如何在开启SSL的MySQL服务器中豁免本地用户的SSL连接要求
MySQL 5.7 豁免本地localhost用户SSL强制连接要求的方案
方案1:使用本地Unix套接字连接(无需修改全局配置,优先推荐)
require_secure_transport=ON的强制SSL限制仅作用于TCP协议连接,本地使用Unix套接字(Windows下为命名管道/共享内存)的连接不受该规则约束:
- 本地执行
mysql命令时指定host为localhost,默认会自动走Unix套接字连接,无需加SSL参数即可正常登录 - 确认连接方式:登录后执行
status命令,查看Connection字段,显示Localhost via UNIX socket即为套接字连接 - 若之前本地连接强制添加了
--ssl-mode=REQUIRED参数,移除后即可使用非SSL连接
方案2:允许本地TCP连接豁免SSL(适用于必须用127.0.0.1走TCP连接的场景)
如果需要允许本地127.0.0.1的TCP连接不用SSL,可通过关闭全局SSL强制+给远程用户单独配置SSL要求实现:
- 修改MySQL配置文件
my.cnf(Windows为my.ini),将参数调整为:
保存后重启MySQL服务生效require_secure_transport = OFF - 给所有远程访问的用户单独设置强制SSL要求,SQL命令示例:
-- 替换为实际的远程用户名和允许访问的IP段 ALTER USER 'remote_user'@'192.168.%' REQUIRE SSL; -- 若远程用户用%通配所有IP,写法如下 ALTER USER 'remote_user'@'%' REQUIRE SSL; - 给本地localhost用户设置无需SSL:
-- 替换为实际的本地用户名 ALTER USER 'local_user'@'localhost' REQUIRE NONE; ALTER USER 'local_user'@'127.0.0.1' REQUIRE NONE; - 刷新权限使配置生效:
FLUSH PRIVILEGES;
配置验证
- 远程连接验证:远程主机执行
mysql -u remote_user -p -h 服务器IP,不加SSL参数会被拒绝,添加--ssl-mode=REQUIRED可正常登录 - 本地连接验证:本地执行
mysql -u local_user -p -h 127.0.0.1,无需添加SSL参数即可正常登录
注意事项
- 调整配置前可先执行
SELECT user,host,ssl_type FROM mysql.user;查看现有用户的SSL要求,ssl_type为ANY代表强制SSL,NONE代表无SSL要求 - 生产环境修改用户权限前建议先备份
mysql.user表,避免误操作导致访问异常
内容的提问来源于stack exchange,提问作者Haizhou
相关产品推荐
相关产品推荐

