Qual è un buon modo per crittografare un database mysql e ne vale la pena?


20

So di poter crittografare determinati campi di un database, ma sono interessato a crittografare ogni campo del database. Voglio assicurarmi che nessuno che abbia accesso a una shell mysql ma che non abbia accesso a una chiave di decrittazione non possa leggere nulla dal database.

Voglio anche assicurarmi che se qualcuno avesse accesso root alla macchina, ma non avesse una chiave di decrittazione, non potrebbe leggere i dati.

Come dovrei farlo? Ha senso farlo? Sono preoccupato se qualcuno ha accesso al database mysql, inevitabilmente avranno accesso alla chiave, quindi non ha senso. Mi sto perdendo qualcosa?


5
Hai mai pensato di archiviare il DB su un volume dedicato e crittografarlo con dm-crypt e LUKS? Certo, non è quello che stai chiedendo, ma tutto sarà crittografato. Puoi persino crittografare il file di chiavi con GPG.
dsljanus,

Risposte:


10

Crittografia AES e DES minima a livello di campo è disponibile: https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt

Nessuno può leggere i dati senza specificare la chiave per ogni query (o senza aggiungerli ai trigger / procedure).

esempio:

INSERIRE:

INSERT INTO users (username, password) VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123'));

e SELEZIONA:

SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'root';

Inoltre, questo richiede una connessione SSL al database.

E a un livello inferiore, puoi crittografare anche il filesystem.


2
Nota: a meno che il database non sia locale, è necessario crittografare la connessione in qualche modo o la password e la chiave verranno inviate come testo semplice sulla rete. Vedi security.stackexchange.com/questions/45838/…
Aaron Digulla

AES, MD5 è vecchio e ha exploit. che cos'è la nuova crittografia?
YumYumYum

So che questo è solo un esempio di come crittografare / decrittografare un campo ma usare la password come esempio è una cattiva idea. Non dovresti mai avere password non cancellate nel tuo database con o senza crittografia.
Caedmon,

Questa risposta riguarda la decrittografia a livello di campo, ma la domanda non riguarda questo: "un buon modo per crittografare un database mysql" ... "So di poter crittografare determinati campi di un database, ma sono interessato a crittografare ogni campo del database. "
LarsH,


2

Primo: memorizzi la tua chiave con l'applicazione e gestisci tutta la crittografia a livello dell'applicazione.

Next: assicurati che l'istanza MySQL e l'applicazione [server] siano su macchine separate in modo che un compromesso root sul server MySQL non consenta all'attaccante di leggere la chiave dall'origine dell'applicazione.

Questo approccio sembra eccessivo. Gestisci correttamente i dati sensibili (password, carte di credito, ecc.) Ma crittografare tutto è eccessivo. (E probabilmente controproducente nel mondo delle chiavi primarie)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.