Jaki jest dobry sposób na szyfrowanie bazy danych MySQL i czy warto?

20

Wiem, że mogę zaszyfrować poszczególne pola bazy danych, ale jestem zainteresowany szyfrowaniem każdego pola bazy danych. Chcę się upewnić, że nikt, kto uzyska dostęp do powłoki mysql, ale nie ma dostępu do klucza deszyfrującego, nie może w ogóle odczytać niczego z bazy danych.

Chcę również upewnić się, że jeśli ktoś uzyska dostęp do komputera jako root, ale nie będzie miał klucza deszyfrującego, nie będzie mógł odczytać danych.

Jak mam to zrobić? Czy ma to sens? Obawiam się, że jeśli ktoś ma dostęp do bazy danych mysql, nieuchronnie będzie miał dostęp do klucza, więc nie ma to sensu. Czy coś brakuje?

Snitse
źródło
5
Czy rozważałeś przechowywanie bazy danych na dedykowanym woluminie i szyfrowanie jej za pomocą dm-crypt i LUKS? Jasne, nie o to pytasz, ale wszystko zostanie zaszyfrowane. Możesz nawet zaszyfrować plik klucza za pomocą GPG.
dsljanus,

Odpowiedzi:

10

Dostępne jest minimalne szyfrowanie AES i DES na poziomie pola: https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt

Nikt nie może odczytać danych bez podania klucza dla każdego zapytania (lub bez dodania go do wyzwalaczy / procedur).

przykład:

WSTAWIĆ:

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

i WYBIERZ:

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

Wymaga to również połączenia SSL z bazą danych.

I na niższym poziomie - możesz także szyfrować system plików.

GioMac
źródło
2
Uwaga: chyba że baza danych jest lokalna, musisz w jakiś sposób zaszyfrować połączenie lub hasło i klucz zostaną wysłane przez sieć jako zwykły tekst. Zobacz security.stackexchange.com/questions/45838/…
Aaron Digulla
AES, MD5 jest stary i ma exploity. co to są nowe szyfrowania?
YumYumYum
Wiem, że to tylko przykład szyfrowania / deszyfrowania pola, ale użycie hasła jako przykładu jest złym pomysłem. Nigdy nie powinieneś mieć niehasowanych haseł w bazie danych z szyfrowaniem lub bez.
Caedmon
Ta odpowiedź dotyczy deszyfrowania na poziomie pola, ale nie chodzi o to: „dobry sposób na szyfrowanie bazy danych mysql” ... ”Wiem, że mogę szyfrować poszczególne pola bazy danych, ale jestem zainteresowany szyfrowaniem każdego pole bazy danych. ”
LarsH
2

Po pierwsze: Przechowujesz swój klucz w aplikacji i obsługujesz wszystkie szyfrowania w warstwie aplikacji.

Następnie: upewniasz się, że instancja MySQL i aplikacja [serwer] znajdują się na osobnych komputerach, aby kompromis roota na serwerze MySQL nie pozwolił atakującemu odczytać klucza ze źródła aplikacji.

To podejście wydaje się przesadne. Obsługuj poufne dane prawidłowo (hasła, karty kredytowe itp.), Ale szyfrowanie wszystkiego jest przesadą. (I prawdopodobnie nieproduktywne w świecie kluczy podstawowych)

Daniel Widrick
źródło