2016-01-04 14 views
5

Potrzebuję ukryć dane przed dostępem użytkowników w mysql. Nawet jeśli użytkownik zna hasło, może potrzebować klucza do odszyfrowania danych. Czy to możliwe?Domyślne szyfrowanie AES dla wszystkich tabel w bazie danych Mysql

W mysql istnieje opcja AES_ENCRYPT do szyfrowania danych po wstawieniu, Czy istnieje opcja domyślnego szyfrowania dla wszystkich kolumn tabeli w bazie danych?

+0

Czy wiesz, co się stanie, jeśli zaszyfrujesz wszystkie dane w MySQL? – Mjh

+0

Tak, wszystkie dane użytkownika, w tym tabele Mysql, będą szyfrowane, co uniemożliwi dostęp do użytkownika. Ale próbuję zaszyfrować tylko określoną bazę danych. To wszystko, co wiem, jeśli się myliłem, popraw mnie –

+0

Spójrz na tę próbkę z MariaDB: https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/ –

Odpowiedz

0

prawdopodobnie musisz to zrobić w swojej aplikacji, a nie bezpośrednio w MySQL. przechowywać dane zaszyfrowane ale odszyfrować/szyfrowania w kodzie poziomu aplikacji

0

Co znajduje się punkt pozwala użytkownikowi połączyć, jeśli nie ma klucza do odszyfrowania i wszystkie stoliki są szyfrowane? Musisz zmodyfikować swoje pytanie, aby opisać swoją sprawę użycia bardziej szczegółowo.

Kontrola dostępu dla każdego użytkownika jest bardziej elastyczna. Załóżmy, że korzystasz z szyfrowania i pewnego dnia chcesz wyłączyć dostęp dla jednego konkretnego użytkownika. Musiałbyś zmienić klucz, a to oznacza, że ​​musisz ponownie zaszyfrować wszystkie dane za pomocą nowego klucza, a następnie powiadomić wszystkich pozostałych użytkowników zaktualizowanego klucza. To bardzo niewygodne.

Podczas gdy użytkownik po prostu używa swojego loginu lub jego uprawnień do kontrolowania dostępu, może wyłączyć konto jednego użytkownika i/lub użyć REVOKE, aby zmienić swoje uprawnienia. Wszyscy pozostali użytkownicy nadal mieliby dostęp, jaki mieli wcześniej. To znacznie łatwiejsze.

Poza tym MySQL nie ma globalnej opcji "szyfrowania wszystkich tabel". Nie ma nawet opcji szyfrowania wszystkich danych wstawionych do danej tabeli.

MySQL ma pewne encryption functions jak AES_ENCRYPT() ale jest obsługiwane na poziomie poszczególnych wyrażeń SQL:

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

Trzeba by zrobić to za każdym razem, kiedy wstawić lub zaktualizować wiersz.

Następnie odszyfrować podobnie za każdym razem wybrać:

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

Ktoś wyżej szyfrowanie MariaDB. To nie robi tego, co chcesz. Oznacza to, że plik obszaru tabel na dysku jest zaszyfrowany, ale serwer MariaDB automatycznie odszyfrowuje go dla każdego, kto łączy się z serwerem. Więc nie jest to lepsze niż przywileje dostępu SQL. Nie można również zaszyfrować dzienników zapytań lub dzienników błędów lub dzienników binarnych.

Powiązane problemy