Какой хороший способ зашифровать базу данных MySQL и стоит ли это того?

20

Я знаю, что могу зашифровать отдельные поля базы данных, но меня интересует шифрование каждого поля базы данных. Я хочу убедиться, что никто из тех, кто получает доступ к оболочке mysql, но у кого нет доступа к ключу дешифрования, вообще не может прочитать что-либо из базы данных.

Я также хочу убедиться, что если кто-то получил root-доступ к машине, но не имел ключа дешифрования, он не сможет прочитать данные.

Как мне это сделать? Есть ли смысл делать? Я обеспокоен тем, что если у кого-то есть доступ к базе данных mysql, он неизбежно получит доступ к ключу, так что это не имеет смысла. Я что-то пропустил?

Snitse
источник
5
Рассматривали ли вы хранение БД на выделенном томе и шифрование ее с помощью dm-crypt и LUKS? Конечно, это не то, что вы просите, но все будет зашифровано. Вы даже можете зашифровать ключевой файл с помощью GPG.
dsljanus

Ответы:

10

Доступно минимальное шифрование AES и DES на уровне полей: https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt

Никто не может прочитать данные без указания ключа для каждого запроса (или без добавления его в триггеры / процедуры).

пример:

ВСТАВИТЬ:

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

и ВЫБЕРИТЕ:

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

Также для этого требуется SSL-соединение с базой данных.

И на более низком уровне - вы можете зашифровать файловую систему тоже.

GioMac
источник
2
Примечание. Если база данных не является локальной, необходимо каким-либо образом зашифровать соединение, иначе пароль и ключ будут отправлены в виде простого текста по сети. См. Security.stackexchange.com/questions/45838/…
Аарон Дигулла
AES, MD5 старый и имеет подвиги. что такое новые шифрования?
ЮмЮмЮм
Я знаю, что это всего лишь пример того, как зашифровать / расшифровать поле, но использование пароля в качестве примера - плохая идея. В вашей базе данных никогда не должно быть хэшированных паролей с шифрованием или без него.
Кедмон
Этот ответ касается дешифрования на уровне поля, но вопрос не в этом: «хороший способ зашифровать базу данных mysql» ... «Я знаю, что могу зашифровать отдельные поля базы данных, но мне интересно шифровать каждый поле базы данных. "
LarsH
2

Во-первых: вы храните свой ключ в приложении и обрабатываете все шифрование на уровне приложения.

Далее: вы гарантируете, что экземпляр MySQL и приложение [сервер] находятся на разных компьютерах, чтобы компрометация root на сервере MySQL не позволяла злоумышленнику прочитать ключ из источника приложения.

Этот подход кажется чрезмерным. Правильно обрабатывайте конфиденциальные данные (пароли, кредитные карты и т. Д.), Но шифрование всего лишнее. (И, вероятно, контрпродуктивно в мире первичных ключей)

Дэниел Видрик
источник