Який хороший спосіб зашифрувати базу даних mysql, і чи варто цього?


20

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

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

Як мені це зробити? Чи має сенс це робити? Мене хвилює, якщо хтось має доступ до бази даних mysql, вони неминуче матимуть доступ до ключа, тому це не має сенсу. Я щось пропускаю?


5
Чи планували ви зберігати БД на виділеному томі та шифрувати його за допомогою dm-crypt та LUKS? Звичайно, це не те, що ви просите, але все буде зашифровано. Ви навіть можете зашифрувати файл ключів за допомогою GPG.
dsljanus

Відповіді:


10

Доступно мінімальне шифрування AES та DES на рівні поля: https://dev.mysql.com/doc/refman/5.5/uk/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 до бази даних.

А на нижньому рівні - ви також можете зашифрувати файлову систему.


2
Примітка. Якщо база даних не є локальною, вам потрібно якось зашифрувати з'єднання, або пароль і ключ будуть надсилатися як звичайний текст по мережі. Див. Security.stackexchange.com/questions/45838/…
Аарон Дігулла

AES, MD5 старий і має подвиги. що таке нові шифрування?
YumYumYum

Я знаю, що це лише приклад того, як шифрувати / розшифровувати поле, але використовувати пароль як приклад - це погана ідея. Ви ніколи не повинні мати незахищені паролі у вашій базі даних із шифруванням або без нього.
Кедмон

Ця відповідь стосується дешифрування на рівні поля, проте питання не в тому: "хороший спосіб шифрування бази даних mysql" ... "Я знаю, що можу зашифрувати окремі поля бази даних, але мені цікаво шифрувати кожне поле бази даних. "
LarsH


2

По-перше: ви зберігаєте свій ключ із програмою та обробляєте все шифрування на рівні програми.

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

Цей підхід видається надмірним. Правильно обробляйте конфіденційні дані (паролі, кредитні картки тощо), але шифрувати все надмірно. (І, ймовірно, лічильник продуктивних у світі первинних ключів)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.