Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PostgreSQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=42)
-   -   Formulario Delphi para hacer Login a PostGreSQL (https://www.clubdelphi.com/foros/showthread.php?t=94912)

rrosariom 21-10-2020 21:58:59

Formulario Delphi para hacer Login a PostGreSQL
 
Buenas tardes, espero que todos se encuentren muy bien!!

Actualmente, tengo una base de datos en PostgreSQL en hice una tabla llamada USERS con los campos usuario y contraseña. En el caso de la columna contraseña utilicé una función de una extensión de PostgreSQL para encriptarla, ya que no deseo que si alguien accede a la base de datos y tiene los permisos pueda ver la clave de los usuarios del sistema. Todo marcha bien, sin embargo, cuando intento hacer login desde DELPHI para entrar al sistema no encuentra el usuario y contraseña creada, y por ende no me carga el sistema. Considerando que, desde DELPHI desencripto la clave, y de hecho puedo verlo en un dbgrid y en edit también.

A continuación, el código para ver si alguien de este foro me ayuda:
Código Delphi [-]
Adoquery1.Close();
Adoquery1.SQL.Clear();
Adoquery1.SQL.Add('SELECT "ID_USER", "USUARIO",  pgp_sym_decrypt("CLAVE"::bytea,''AES_KEY'') as "CLAVE", "COD_EMPLEADO" FROM "schema_SYS00"."USERS"');
Adoquery1.SQL.Add('WHERE "USUARIO" =' + '''' + dbedit1.Text + '''');
Adoquery1.SQL.Add('AND pgp_sym_decrypt("CLAVE"::bytea,''AES_KEY'') =' +''''+ dbedit2.text+'''');
Adoquery1.Open;
if adoquery1.RecordCount = 0 then
 showmessage('Usuario o contraseña incorrecto o no existen') else
  form1.showmodal;
Siempre me devuelve el mensaje del showmessage.

Muchas gracias...
Rolando.

Casimiro Notevi 22-10-2020 00:03:21

Deberías usar parámetros en lugar de concatenar valores y textos, es fácil equivocarse o provocar errores así.
Aparte de eso, ¿has probado desde algún "manager" de postgresql si devuelven valores esa sentencia?

rrosariom 22-10-2020 04:15:08

Hola Casimiro, muchas gracias por las atenciones!!

Si, hice todas esas pruebas y todo marcha bien.

Ya lo resolví el problema, utilizando la misma sentencia, pero cambiando los dbedits por edit. La situación, es que su uso los dbedit, ya tienes en memoria el valor del hash de la encriptación y por eso nunca encontrará la existencia del registro del usuario, sin embargo, con los edits, como no tienen ninguna relación con la base de datos, lo se hace es una comparación que es realmente lo que debe ocurrir.

Hermano, muchas gracias, y espero que le sirva a otros, porque casi no veo soluciones de este tipo, existen muchos login, pero la mayoría no encriptan las claves, y los que sí utilizan métodos un poco complejos.

Siempre es un placer estar en este foro!!
Rolando.

ElKurgan 22-10-2020 09:54:34

Gracias por compartir la solución

Saludos


La franja horaria es GMT +2. Ahora son las 00:49:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi