在 MySQL 中使用加密连接可以有效保护数据在传输过程中的安全,防止敏感信息被窃听或篡改。核心方法是通过 SSL/TLS 加密客户端与服务器之间的通信。只要配置得当,MySQL 支持原生的 SSL 连接,适用于远程访问、云环境或合规性要求较高的场景。
启用 MySQL 服务器端 SSL 支持
MySQL 从 5.7 版本开始默认自动生成 SSL 证书和密钥,但需要确认是否已启用。可以通过以下方式检查并开启:
登录 MySQL 执行 SHOW VARIABLES LIKE '%ssl%';,查看 have_ssl 是否为 YES 若未启用,需在 MySQL 配置文件(如 my.cnf 或 my.ini)中添加 SSL 相关参数:[mysqld]
ssl-ca=ca.pem
ssl-cert=server-cert.pem
ssl-key=server-key.pem
这些证书文件可通过 OpenSSL 自动生成,或由受信任的 CA 签发。重启 MySQL 服务后再次检查 SSL 状态。
强制用户使用 SSL 连接
为提升安全性,可限制特定用户只能通过加密连接访问:
创建用户时指定 REQUIRE SSL:CREATE USER 'secure_user'@'%' IDENTIFIED BY 'password' REQUIRE SSL; 已有用户可使用命令修改:
ALTER USER 'existing_user'@'%' REQUIRE SSL;
这样该用户在连接时必须使用加密通道,否则会被拒绝登录。
客户端连接时启用加密
客户端可通过多种方式建立加密连接:
使用 mysql 命令行工具时添加 --ssl-mode 参数:mysql -u secure_user -h your_host -p --ssl-mode=REQUIRED 支持 SSL 模式的选项包括:DISABLED、PREFERRED、REQUIRED、VERIFY_CA、VERIFY_IDENTITY 在应用程序中(如 PHP、Python),连接字符串应包含 SSL 配置,例如指定 ca.pem 路径以验证服务器身份
验证加密连接是否生效
连接成功后,可通过以下方式确认当前会话是否加密:
执行 STATUS 或 \s 查看输出中的 "SSL" 行,显示加密协议版本表示已加密 查询会话连接属性:SELECT * FROM performance_schema.session_status WHERE VARIABLE_NAME = 'Ssl_cipher';
如果返回非空值,说明使用了加密密码套件
基本上就这些。只要服务器启用了 SSL,用户配置了连接要求,客户端正确发起请求,数据传输就能得到有效保护。定期更新证书、使用强加密算法,能进一步增强安全性。
