¿Optimizar Login?

Publicado en 'Programación' por Azrael00, 25 Nov 2014.





  1. Azrael00

    Azrael00 Miembro nuevo

    Registro:
    2 Jun 2012
    Mensajes:
    7
    Likes:
    2




    Estoy haciendo un proyecto en php y mysql con phpmyadmin, y mi login se basa en un SELECT que devuelve el ID del usuario, pero quería saber si es posible optimizar este procedimiento.
    ID: int
    usuario : varchar(20)
    contraseña : varchar(20)
    Cómo busca el SELECT? Es posible optimizar en algún sentido? Qué algoritmos podría utilizar? Ayuda! soy nuevo en base de datos.
     


  2. n0fxcodeX

    n0fxcodeX Suspendido

    Registro:
    5 Set 2014
    Mensajes:
    881
    Likes:
    173
    la respuesta es facil y recuerda tener esto siempre cuando programes te lo dice alguien con experiencia.

    "SI FUNCIONA DEJALO COMO ESTA"

    espero averte ayudado :)
     
    A drkrap le gustó este mensaje.
  3. drkrap

    drkrap Miembro de bronce

    Registro:
    18 Ene 2011
    Mensajes:
    1,345
    Likes:
    304
    Bueno Pa empezar lo ideal es tener un polo de conexiones abiertas en tu base de datos y tu server de aplicaciones, en realidad no es problema del select, si no del motor de la base datos vs la cantidad de datos que tiene alojada, agregando la cantidad de recursos para realizar n transacciones por segundo.. En cristiano.. Al hardware que tengas y motor de be que uses,
     
  4. freddy21da

    freddy21da Miembro maestro

    Registro:
    6 Oct 2013
    Mensajes:
    523
    Likes:
    91
    puedes crear procedimientos almacenados
     
  5. AiApaec

    AiApaec Miembro frecuente

    Registro:
    1 May 2014
    Mensajes:
    58
    Likes:
    14
    Las consultas, inserts, deletes, updates son optimizados automáticamente por el propio motor, en tu caso MySql. Aunque a veces sí se hace necesario optimizar algunas consultas o transacciones. En tu caso es innecesario me parece, el Select que haces es muy simple y el motor no debería tener problemas de rendimiento a menos que tengas grandes cantidades de datos (millones de registros). Complementando la regla básica que te puso el compañero arriba en mayúsculas, hay otra que también debería ser tomada en cuenta:
    "premature optimization is the root of all evil" (la optimización prematura es la raíz de todos los males)
    Esto no quiere decir que hay que olvidar optimizaciones básicas y pequeñas (como esta que es muy conocida: no concatenar un string dentro de un loop), más bien se refiere a que no se gaste tiempo y energías en optimizaciones que te tomarán algun tiempo ya que por experiencia se sabe que es una posible fuente de bugs en el futuro. Las optimizaciones se hacen cuando hacen falta, más ahora que el hardware ha bajado de precio, a veces es más barato aumentar la potencia de las máquinas que contratar a un programador para optimizar, tanto así que Martin Fowler en su libro Patterns of Enterprise Application Architecture dice que "cuando se construyen aplicaciones empresariales a menudo tiene sentido hacerlas preferentemente escalables (para hardware) en vez de eficientes".

    Regresando a tu Select, dices que devuelve un ID, no dices cómo lo has implementado. Algunos consejos: las contraseñas en tu BD deben estar encriptadas, de hecho podría ser mejor que tengas un hash de las contraseñas, un hash salteado (un salt aleaotrio para cada contraseña), de esa forma no hay forma de recuperarla, de descubrir la contraseña, un buen método es usar PBKDF2 con un número relativamente alto de iteraciones.
    Recupera la contraseña 'hasheada' desde la BD y en la aplicacion, en tu caso en la página php, genera el hash de la contraseña tipeada por el usuario y compara el hash con el de la BD, esto para que la contraseña tipeada por el usuario no tenga que viajar hasta el server de la BD.
     
    A eduar2083 le gustó este mensaje.
  6. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Hola,
    Lo que indica el usuario AiApaec es correcto, no se deben almacenar las contraseñas como tal en el servidor de DB, bien alguien podría sniffear la red y obtener el usuario y password, por otro lado,quien esté a cargo de dicha BD, generalmente un DBA, tendría a su disposición las credenciales de todos los usuarios. Como ya indicaron lo que se debe comparar es el resultado encriptado, Personalmente utilizo el algoritmo TripleDES para el lenguaje de Gestión (en tu caso PHP), sin embargo existen otros como SHA1. Sumado a esto, debes utilizar un stored procedure para ejecutar la consulta, es un error muy grave autenticar enviando una cadena SQL al servidor debido a que la aplicación estaría a merced de un ataque por SQL Injection.

    Saludos.
     
Etiquetas: