Назад | Перейти на главную страницу

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

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

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

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

Доступно минимальное шифрование 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-соединение с базой данных.

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

MariaDB недавно добавила шифрование на уровне таблиц для таблиц InnoDB и XtraDB. https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/#specifying-what-tables-to-encrypt

MySQL также поддерживает шифрование на уровне таблиц для InnoDB. https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html

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

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

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