MySQL cung cấp các hàm mã hóa/giải mã ngay trong SQL, ví dụ:
✅ AES (Advanced Encryption Standard)
SELECT TO_BASE64(AES_ENCRYPT('thong_tin_can_ma_hoa', 'my_secret_key'));
SELECT AES_DECRYPT(FROM_BASE64(ma_dulieu_mahoa), 'my_secret_key');
Lưu ý:
'my_secret_key'
) để mã hóa/giải mãTO_BASE64
để lưu dạng text dễ quản lý✅ DES (Data Encryption Standard) (ít dùng hơn do bảo mật yếu):
SELECT TO_BASE64(DES_ENCRYPT('hello', 'key'));
SELECT DES_DECRYPT(FROM_BASE64(ma_dulieu_mahoa), 'key');
Đây là mã hóa để bảo vệ file dữ liệu khi nằm trên đĩa cứng, ví dụ nếu hacker đánh cắp file .ibd
hay .frm
.
MySQL hỗ trợ:
✅ InnoDB Tablespace Encryption
✅ Redo Log, Binary Log Encryption
✅ Keyring plugin để quản lý master key
Cách bật:
[mysqld]
innodb_encrypt_tables=ON
innodb_encrypt_log=ON
early-plugin-load=keyring_file.so
keyring_file_data=/var/lib/mysql-keyring/keyring
sau đó khi tạo bảng:
CREATE TABLE nhanvien (
id INT,
ten VARCHAR(50)
) ENCRYPTION='Y';
MySQL sẽ tự mã hóa ở mức tablespace (InnoDB), bạn không cần mã hóa/giải mã thủ công.
✅ Application-level → dùng hàm AES_ENCRYPT, AES_DECRYPT ngay trong SQL
✅ Storage-level → bật InnoDB encryption + keyring