MySQL中skip_name_resolve和skip_grant_tables变量的作用是什么?
MySQL
skip_name_resolve 与 skip_grant_tables 参数作用说明 skip_name_resolve
该参数用于控制MySQL服务端在处理客户端连接时的DNS域名解析逻辑,默认处于关闭状态。
- 开启(设置为ON)后,MySQL会完全跳过所有域名解析步骤:不会将客户端的IP地址反解析为域名,也不会校验域名与IP的对应关系,所有账号权限匹配仅使用客户端IP地址完成
- 可以大幅降低高并发场景下的连接建立延迟,同时避免DNS服务故障、解析不稳定导致的连接超时、无响应甚至被异常拒绝的问题
- 开启后,
mysql.user权限表中所有基于域名配置的账号规则会直接失效,仅支持使用IP地址、%通配符配置允许访问的客户端来源 - 大部分新版本MySQL支持通过
SET GLOBAL skip_name_resolve = ON;动态调整生效,老版本需要写入my.cnf(Windows下为my.ini)的[mysqld]段落,重启服务后生效
skip_grant_tables
该参数是MySQL的应急运维参数,专门用于权限异常、忘记超级管理员密码等场景,无法在服务运行时动态开启,只能在启动阶段配置。
- 开启后,MySQL会完全跳过所有权限校验逻辑:不会校验账号是否存在、密码是否正确,所有接入的客户端默认拥有最高的ALL PRIVILEGES权限,可以任意读写所有库表、修改账号权限
- 开启后账号管理相关的语句(如
ALTER USER、SET PASSWORD)会暂时失效,需要先执行FLUSH PRIVILEGES;加载权限表后才能正常操作 - 该参数的安全风险极高,开启时务必限制仅本地网络可访问MySQL端口,避免数据被恶意窃取、篡改,完成运维操作后必须第一时间移除该参数并重启服务,恢复正常权限校验
内容的提问来源于stack exchange,提问作者Adrián
相关产品推荐
相关产品推荐

