2016-01-04 5 views
5

Ho bisogno di nascondere i dati dall'accesso utente in mysql. Anche se l'utente conosce la password, potrebbe aver bisogno di una chiave per decifrare i dati. È possibile?Crittografia AES Mysql predefinita per tutte le tabelle in un database

In mysql è disponibile l'opzione AES_ENCRYPT per crittografare i dati quando vengono inseriti, Esiste un'opzione per fornire una crittografia predefinita per tutte le colonne della tabella in un database?

+0

Sai cosa succede se cripti tutti i dati in MySQL? – Mjh

+0

Sì, tutti i dati utente, incluse le tabelle Mysql, saranno crittografati e impediranno l'accesso all'utente. Ma sto cercando di criptare solo un database specifico. Questo è tutto quello che so, se ho sbagliato, correggimi –

+0

Dai un'occhiata a questo esempio da MariaDB: https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/ –

risposta

0

probabilmente avete bisogno di farlo nella vostra applicazione e non in mysql direttamente. memorizzare i dati cifrati, ma decifrare/cifrare nell'applicazione codice di livello

0

Qual è il punto di permettere a un utente di connettersi se non hanno la chiave per decifrare, e tutti tavoli sono criptati? Devi modificare la tua domanda per descrivere più dettagliatamente il tuo caso d'uso.

Controllare l'accesso per utente è più flessibile. Supponiamo di utilizzare la crittografia e un giorno si desidera disabilitare l'accesso per un particolare utente. Dovresti cambiare la chiave, e questo significa che devi crittografare nuovamente tutti i dati con la nuova chiave, e poi notificare a tutti gli altri utenti la chiave aggiornata. È molto sconveniente.

Mentre se si utilizza il login o loro GRANT privilegi per controllare l'accesso, è possibile disattivare conto di ogni singolo utente e/o utilizzare REVOKE di cambiare i loro privilegi. Tutti gli altri utenti continueranno ad avere l'accesso che hanno fatto prima. È molto più facile.

Inoltre, MySQL non dispone di un'opzione globale "criptare tutte le tabelle". Non ha nemmeno un'opzione per crittografare tutti i dati inseriti in una data tabella.

MySQL ha alcune encryption functions come AES_ENCRYPT() ma è gestita a livello di singole espressioni SQL:

INSERT INTO MyTable 
SET someColumn = AES_ENCRYPT('Something sensitive', 'thePassword'); 

Si dovrebbe fare questo ogni volta che si inserisce o aggiorna una riga.

Poi decifrare Allo stesso modo ogni volta che si seleziona:

SELECT AES_DECRYPT(someColumn, 'thePassword') FROM MyTable... 

Qualcuno sopra menzionato crittografia MariaDB. Questo non fa quello che vuoi. Significa che il file tablespace su disco è crittografato, ma il server MariaDB lo decodifica automaticamente per chiunque si connetta al server. Quindi non è meglio dei privilegi di accesso SQL. Inoltre, non riesce a crittografare i registri delle query, i log degli errori o i registri binari.