MySQL 提供了多种加密方式,包括哈希函数、SSL/TLS 加密和加密文件存储等。
- 哈希函数
MySQL 支持多种哈希函数,如 SHA1、MD5 和 SHA2 等。这些函数可以在 INSERT 或 UPDATE 语句中使用,将密码字符串转换为固定长度的哈希值,然后存储到数据库中。
示例:
INSERT INTO users (username, password) VALUES ('john', SHA1('123456'));
查询时,需要对输入的密码再次进行哈希运算,比较结果是否一致:
SELECT * FROM users WHERE username = 'john' AND password = SHA1('123456');
- SSL/TLS 加密
MySQL 支持通过 SSL/TLS 协议对客户端和服务器之间的通信进行加密。使用 SSL/TLS 加密需要生成证书和私钥,并将其配置到 MySQL 服务器和客户端上。
示例:
在 MySQL 服务器上启用 SSL/TLS:
[mysqld]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem
在客户端上连接时指定 SSL/TLS 参数:
mysql -h hostname -u user -p --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem
- 加密文件存储
MySQL 还支持将数据文件以加密方式存储到磁盘上,防止本地访问或窃取。这种方式需要使用 MySQL Enterprise Edition,并且需要启用加密插件。
示例:
在 MySQL 配置文件中启用加密插件:
[mysqld]
plugin-load-add=innodb_encrypt.so
innodb_encrypt_tables=ON
innodb_encrypt_log=ON
innodb_encryption_threads=4
创建表时指定加密选项:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
password VARBINARY(100) ENCRYPTED
) ENGINE=InnoDB;