Newsgroup: it.comp.os.linux.sys
Titolo: Mysql proxy e rewrite query su un singolo campo

Buongiorno a tutti, chiedo scusa per il semi-ot ma i gruppi su mysql non 
sono particolarmente attivi (o non ne ho trovati tali).
 
Ho un'applicazione LAMP già esistente che salva gli account utente 
(username, email e password) su MySQL 5.5. Ho come requisito obbligatorio 
che l'email non venga più salvata in chiaro ma cifrata in AES. Siccome 
l'applicazione è molto complessa vorrei evitare di far fare questa 
operazione al codice e preferirei trasferirla in modo completamente 
trasparente sul db. Avrei già risolto in scrittura con un trigger su 
MySQL che intercetta tutte le insert sul campo user.email ed esegue un 
AES_ENCRYPT(NEW.email,'pippokey'), ma i trigger funzionano solo in 
insert, update e delete, perciò mi resta il problema di decrittare in 
fase di select.
 
Credo che la soluzione perfetta sarebbe MySQL Proxy ma non l'ho mai usato 
prima e non conosco Lua che a quanto pare è il linguaggio usato per i 
suoi script. 
 
Qualcuno sarebbe così magnanimo da buttarmi giù un esempio di come 
potrebbe essere lo script? Se ho una traccia poi mi smazzo le 
personalizzazioni.
 
In soldoni, ogni INSERT INTO user(email) VALUES('
ant...@pippo.com
'); deve 
essere riscritta in INSERT INTO user(email) VALUES(AES_ENCRYPT
('
ant...@pippo.com
','pippokey'));
ed ogni SELECT email FROM user; deve essere riscritta in SELECT 
AES_DECRYPT(email,'pippokey') FROM user;
 
Idem per le UPDATE.
 
Grazie a tutti.
 
M

 AES_DECRYPT(email,'pippokey') FROM user;
 
Scusa se NON rispondo alla tua domanda :-)
 
Uno dei principali motivi che mi vengono in mente per fare quello che
volete fare è quello di non farsi fregare le password a causa di una
SQLi sulla webapp che usa il db (ce ne sono altri, ovviamente). Se
questo è il rischio principale che volete mitigare, la soluzione che
proponi non è efficace, il quanto le query iniettate leggerebbero i dati
in chiaro attraverso il proxy. Se invece  i rischi che volete
contrastare sono altri... come non detto.
 
Ciao
 
 
Fabio
 


Ciao Fabio,
 
sfondi una porta aperta: ho già fatto presente al cliente fin dal primo 
minuto che questa operazione sui dati utente equivale a "installare una 
porta blindata all'ingresso di una tenda da campeggio" (testuale) ma 
questi pensano di essere i più furbi della stanza e non hanno voluto 
sentir ragioni. Perciò io ora fare quello che Buana dire. 
 
Qualcuno mi tira fuori da questa impasse?
 
Grazie 
 
M

 per i suoi script.
 
Esistono due prodotti. Uno fatto da mysql, e un altro di cui non ricordo 
il nome. Comunque, MySQL Proxy è un bilanciatore/failover tra N basi dati 
in replica tra loro. Se poi fa altro, vuol dire che qualcosa mi sfugge 
veramente.
 
Andando al tuo problema, la tecnica utilizzata è quella di far produrre al 
client (che potrà essere pure un server web) un hash che dovrà essere 
uguale a quello presente sul server.
In questo caso non decripti niente, hai una password sicura e 
irreversibile e il problema è bello è risolto.
 
Prova a fare un giro qui: 
http://bit.ly/z1mXvq
 
 
-- 
echo onailimissaM | awk 'BEGIN { FS = "" }
{ for (i = NF; i >= 1; i-- )
  printf $i }'; echo