mysql SKIP-NAME-RESOLVE 错误的使用时机造成用户权限

 更新时间:2011年06月19日 12:16:51   作者:  
新加的一台服务器,连接内网中的一台mysql服务器的时候,经常出现超时。
登陆到mysql,查看进程的信息
复制代码 代码如下:

show processlist;

发现大量的进程的状态为 login
原来默认的时候mysql启动时是不使用 skip-name-resolve选项的,这样的话,从其它主机的连接会比较慢,因为mysql会对这个ip做dns反向查询,导致大量的连接处于 login状态....
.
解决这个问题有两个办法

一是加入 skip-name-resolve参数重启mysql

二是在 /etc/hosts中加入一句 192.168.0.2 server2 其中 192.168.0.2是新加的服务器的内网ip,server2是新服务器的主机名


在mysql客户端登陆mysql服务器的登录速度太慢的解决方案一篇文章中,我介绍了如何通过在my.ini文件(linux下是my.cnf文件)中添加"SKIP-NAME-RESOLVE"的参数设置,使得客户端在登录服务器的时候不通过主机解析这一关,直接登陆的方法,以此来提高登录速度。

这里要介绍一下这种方法的负面作用,以及不合理的时机使用这种方法会引发的不可发现的错误。

首先,回顾一下在my.ini文件中添加"SKIP-NAME-RESOLVE"参数来提高访问速度的原理:

在没有设置该参数的时候,客户端在登陆请求发出后,服务器要解析请求者是谁,经过解析,发现登录者是从另外的电脑登录的,也就是说不是服务器本机,那么,服务器会到mysql.user表中去查找是否有这个用户,假设服务器IP是192.168.0.1,而客户机的IP是192.168.0.2;那么查询的顺序是先找'root'@'192.168.0.2'这个user是否存在,若存在,则匹配这个用户登陆,并加载权限列表。若没有该用户,则查找'root'@'%'这个用户是否存在,若存在,则加载权限列表。否则,登录失败。

在设置了SKIP-NAME-RESOLVE参数后,客户端的登录请求的解析式同上面一样的,但是在服务器本机的解析过程却发生了改变:服务器会把在本机登录的用户自动解析为'root'@'127.0.0.1';而不是'root'@'localhost';这样一来就坏了,因为我们在服务器上登录是为了进行一些维护操作,但是显然,'root'@'127.0.0.1'这个用户是被默认为'root'@'%'这个用户的,这个用户还没有足够得权限去执行一些超级管理员'root'@'localhost'才能执行的大作。因为未分配权限。

所以结论是:加入你在服务器本机上登录mysql服务器的话,要么先取消SKIP-NAME-RESOLVE的参数设置,重新启动服务器再登陆,设置完成后,再设置上该参数;要么就给'root'@'127.0.0.1'分配超级管理员权限,但这么做显然是不明智的,因为任何人在任何机器上都可以用这个用户执行管理员操作,前提是知道了密码。

我有一次在mysql服务器上执行数据库创建脚本,并同时创建表、触发器、存储过程等。结果,总是失败,经过了一上午的折腾,最后发现时这个参数造成我以'root'@'127.0.0.1'这个用户登陆了服务器,这个用户没有创建触发器的权限。后来,取消了SKIP-NAME-RESOLVE参数后,执行成功,再把该参数设置回去。重启。OK。

所以,在设置这个参数的时候一定要注意时机:先用超级管理员将所有的用户创建好,再将权限分配好之后,才设置这个参数生效。

相关文章

  • MySQL的左连接、右连接、内连接用法解读

    MySQL的左连接、右连接、内连接用法解读

    这篇文章主要介绍了MySQL的左连接、右连接、内连接用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • linux下如何使用yum源安装mysql

    linux下如何使用yum源安装mysql

    这篇文章主要介绍了linux下如何使用yum源安装mysql问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 详解mysql权限和索引

    详解mysql权限和索引

    本篇文章给大家详细分析了mysql的权限和索引相关知识要点,有这方面需要的朋友参考学习下。
    2018-01-01
  • MySQL中使用MD5加密的实现

    MySQL中使用MD5加密的实现

    本文主要介绍了MySQL中使用MD5加密的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • MySQL中的套接字错误解决

    MySQL中的套接字错误解决

    socket文件是一种特殊的文件,可以促进不同进程之间的通信,有时候系统或MySQL配置的更改可能导致MySQL无法读取套接字文件,本文主要介绍了MySQL中的套接字错误解决,感兴趣的可以了解一下
    2024-02-02
  • MySQL8.0/8.x忘记密码更改root密码的实战步骤(亲测有效!)

    MySQL8.0/8.x忘记密码更改root密码的实战步骤(亲测有效!)

    忘记root密码的场景还是比较常见的,特别是自己搭的测试环境经过好久没用过时,很容易记不得当时设置的密码,下面这篇文章主要给大家介绍了关于MySQL8.0/8.x忘记密码更改root密码的实战步骤,亲测有效!需要的朋友可以参考下
    2023-04-04
  • 教会你完全搞定MySQL数据库 轻松八句话

    教会你完全搞定MySQL数据库 轻松八句话

    只要掌握下面的方法,就基本上能搞定mysql数据库。
    2010-09-09
  • MySQL之解决字符串数字的排序失效问题

    MySQL之解决字符串数字的排序失效问题

    这篇文章主要介绍了MySQL之解决字符串数字的排序失效问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • MySQL数据库开发的36条原则(小结)

    MySQL数据库开发的36条原则(小结)

    这篇文章主要介绍了MySQL数据库开发的36条原则(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • mysql双向加密解密方式用法详解

    mysql双向加密解密方式用法详解

    这篇文章主要介绍了mysql双向加密解密方式用法,需要的朋友可以参考下
    2014-04-04

最新评论