MySQL 8.0默认情况下允许客户端选择是否使用SSL连接,若需要强制指定用户必须通过SSL方式连接数据库,可以通过REQUIRE SSL关键字修改用户权限来实现,整个过程不需要修改MySQL的全局配置文件,操作相对灵活。

开启强制SSL连接的前提条件
在配置强制SSL连接之前,需要确认MySQL 8.0服务端已经开启了SSL支持,可以通过以下SQL语句查看SSL的状态:
-- 查看SSL相关配置状态 SHOW VARIABLES LIKE '%ssl%';
如果查询结果中have_ssl的值为YES,说明服务端已经支持SSL,可以直接进行后续配置;如果是DISABLED,则需要先开启MySQL的SSL功能,通常需要生成SSL证书并配置到MySQL的配置文件中,重启服务后生效。
使用REQUIRE SSL修改用户权限
REQUIRE SSL是MySQL中用户权限定义的子句,用于限定用户连接时必须使用SSL加密连接,配置方式分为两种情况:修改已有用户的权限、创建新用户时直接指定。
修改已有用户的权限
假设需要将现有用户test_user的权限修改为强制SSL连接,且用户可以从任意主机访问,执行以下SQL:
-- 修改用户权限,添加REQUIRE SSL要求 ALTER USER 'test_user'@'%' REQUIRE SSL; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
创建新用户时指定强制SSL
如果是新建用户,可以直接在创建语句中加上REQUIRE SSL关键字:
-- 创建新用户并强制要求SSL连接 CREATE USER 'new_ssl_user'@'%' IDENTIFIED BY 'user_password' REQUIRE SSL; -- 给用户授予对应的数据库权限,这里示例授予test库的所有权限 GRANT ALL PRIVILEGES ON test.* TO 'new_ssl_user'@'%'; FLUSH PRIVILEGES;
REQUIRE的其他可选参数
除了REQUIRE SSL之外,还有几个相关的子句可以满足不同的安全需求:
- REQUIRE NONE:默认配置,不强制要求SSL连接,客户端可以选择是否使用SSL。
- REQUIRE X509:不仅要求SSL连接,还要求客户端提供有效的X509证书,安全性更高。
- REQUIRE CIPHER:可以指定具体的加密套件,比如
REQUIRE CIPHER 'AES256-SHA'。
配置后的连接验证
完成权限修改后,需要验证配置是否生效,可以通过两种方式测试:
客户端连接测试
使用修改后的用户尝试不使用SSL连接,如果配置生效会连接失败:
# 不使用SSL尝试连接,预期会报错 mysql -u test_user -p -h 127.0.0.1 --ssl-mode=DISABLED
执行后如果返回类似Access denied for user 'test_user'@'127.0.0.1' (using password: YES)的错误,说明强制SSL配置生效。
服务端查看连接状态
已经成功连接的客户端,可以在MySQL服务端执行以下SQL查看连接是否使用了SSL:
-- 查看当前所有连接的SSL使用情况 SELECT user, host, ssl_cipher FROM information_schema.processlist WHERE user = 'test_user';
如果ssl_cipher字段不为空,说明该连接使用了SSL加密。
常见问题处理
如果配置后出现客户端无法连接的情况,可以先排查以下几个点:
- 确认服务端SSL功能是否正常开启,
have_ssl是否为YES。 - 确认客户端的SSL支持是否正常,部分旧版本的MySQL客户端可能不支持SSL连接。
- 如果使用自定义证书,确认客户端是否拿到了正确的CA证书,连接时指定
--ssl-ca参数。
注意:修改用户权限时如果使用了REQUIRE SSL,该用户后续所有连接都必须使用SSL,无法通过非SSL方式登录,操作前建议确认业务场景是否需要保留非SSL连接通道。
MySQL_8.0SSL连接REQUIRE_SSL强制授权修改时间:2026-06-21 01:18:29