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?
mysql
encryption
Snitse
źródło
źródło
Odpowiedzi:
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Ć:
i WYBIERZ:
Wymaga to również połączenia SSL z bazą danych.
I na niższym poziomie - możesz także szyfrować system plików.
źródło
MariaDB niedawno dodała szyfrowanie na poziomie tabeli dla tabel InnoDB i XtraDB. https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/#specifying-what-tables-to-encrypt
MySQL obsługuje również szyfrowanie na poziomie tabeli dla InnoDB. https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html
źródło
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)
źródło