Я знаю, что могу зашифровать отдельные поля базы данных, но меня интересует шифрование каждого поля базы данных. Я хочу убедиться, что никто из тех, кто получает доступ к оболочке mysql, но у кого нет доступа к ключу дешифрования, вообще не может прочитать что-либо из базы данных.
Я также хочу убедиться, что если кто-то получил root-доступ к машине, но не имел ключа дешифрования, он не сможет прочитать данные.
Как мне это сделать? Есть ли смысл делать? Я обеспокоен тем, что если у кого-то есть доступ к базе данных mysql, он неизбежно получит доступ к ключу, так что это не имеет смысла. Я что-то пропустил?
mysql
encryption
Snitse
источник
источник
Ответы:
Доступно минимальное шифрование AES и DES на уровне полей: https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt
Никто не может прочитать данные без указания ключа для каждого запроса (или без добавления его в триггеры / процедуры).
пример:
ВСТАВИТЬ:
и ВЫБЕРИТЕ:
Также для этого требуется 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 и приложение [сервер] находятся на разных компьютерах, чтобы компрометация root на сервере MySQL не позволяла злоумышленнику прочитать ключ из источника приложения.
Этот подход кажется чрезмерным. Правильно обрабатывайте конфиденциальные данные (пароли, кредитные карты и т. Д.), Но шифрование всего лишнее. (И, вероятно, контрпродуктивно в мире первичных ключей)
источник