Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Datos encriptados en MySQL (https://www.clubdelphi.com/foros/showthread.php?t=79187)

Angel.Matilla 14-06-2012 12:19:00

Datos encriptados en MySQL
 
Estoy empezando a trabajar con este motor con Builder C++ 5. Tengo una tabla en la que los datos personales, por seguridad, están encriptados con AES_ENCRYPT y tengo este query:
Código:

SELECT num_socio, AES_DECRYPT(apellidos, @clavencrypt) ApeSoc,
AES_DECRYPT(nombre, @clavencrypt) NomSoc, login_socio FROM inscripciones

Se ejecuta sin problema y la consulta genera un resultado, pero todas las columnas encriptadas vienen vacías y todas tiene datos seguro.

Me explico mejor. Si yo ejecuto el query directamente en el shell de MySQL me devuelve, por ejemplo, esto:
Cita:

+----------------+--------+--------------+
| ApeSoc | NomSoc | login_socio |
+----------------+--------+--------------+
| MATILLA CAND┴S | ┴NGEL | angelmatilla |
+----------------+--------+--------------+
Como quiero cargar un TListView con los datos recuperados ejecuto eso:
Código:

for (; !Query->Eof; Query->Next())
{
    pItem = Lista->Items->Add();
    pItem->Caption = Query->FieldByName("login_socio")->AsString;
    pItem->SubItems->Add(Trim(Query->FieldByName("ApeSoc")->AsString) + ", " +
          Query->FieldByName("NomSoc")->AsString);
    pItem->SubItems->Add(Query->FieldByName("num_socio")->AsInteger);
}

y el resultado que obtengo es, por ejemplo, este:

En la columna identidad debería aparecer MATILLA CANDÁS, ÁNGEL. La consulta la ejecuto con un TADOQuery y la base de datos esá conectada con un TADOConnection.

Angel.Matilla 15-06-2012 17:07:07

Problema resuelto
 
Fiado del manual de referencia de MySQL usaba la sintaxis que sugieren en él (@clavencrypt) pero con C++ Builder funciona a la perfección usando parámetros:
Código:

ADOQuery->Close();
ADOQuery->SQL->Text = "SELECT num_socio, AES_DECRYPT(apellidos, :clave) ApeSoc, "
"AES_DECRYPT(nombre, :clave) NomSoc, login_socio FROM "
"inscripciones ORDER BY ApeSoc, NomSoc, num_socio";
ADOQuery->Parameters->ParamByName("clave")->Value = clavencrypt;
ADOQuery->Open();


Casimiro Notevi 15-06-2012 21:06:06

Gracias por comentarlo :)
Parece que no es algo que usen muchos, pero está bien saber que se ha tratado el tema... y solucionado :)


La franja horaria es GMT +2. Ahora son las 04:28:14.

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