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

登陆到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。

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

(0)

相关推荐

  • 远程连接mysql数据库注意事项记录(远程连接慢skip-name-resolve)

    一.如何新建独立帐号并设置权限 这里我使用Navicat作为我的数据库管理工具,打开Navicat. 选择"用户"--"新建用户" 输入用户名.主机.密码,需要注意的是,主机那不是写"localhost",而是写"%" 然后可以设置"服务器权限" 和指定数据库的权限,最后保存退出即可 二.远程连接慢 慢是一个很大的问题,网上的办法是在my.ini的"[mysqld]"下面加入一行&quo

  • mysql 加了 skip-name-resolve不能链接数据库问题的解决方法

    mysql 加了 skip-name-resolve不能链接的问题, 要确认 MySql 是否采用过主机名的授权 在 MySql Server 的配置文件 My.ini 中,增加如下两行: [mysqld] skip-name-resolve 它将禁止 MySql Server 对外部连接进行 DNS 解析,使用这一选项可以消除 MySql 进行 DNS 解析的时间. 但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求. 如果开启 ski

  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢. 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve. 原因是默认安装的MySql开启了DNS的反向解析.如果禁用的话就不能在MySQL的授权表中使用主机名了而只能用ip格式. 附:How MySQL uses DNS When a new thread connects to mysqld, mysqld will spawn a new thread t

  • Mysql DNS反向解析导致连接超时过程分析(skip-name-resolve)

    MySQL数据库收到一个网络连接后,首先拿到对方的IP地址,然后对这个IP地址进行反向DNS解析从而得到这个IP地址对应的主机名.用主机名在权限系统里面进行权限判断.反向DNS解析是耗费时间的,有可能让用户感觉起来很慢.甚至有的时候,反向解析出来的主机名并没有指向这个IP地址,这时候就无法连接成功了. 可以在配置文件里面禁止MySQL进行反向DNS解析,只需在my.cnf的[mysqld]段落中加入如下行即可: skip-name-resolve (windows与linux下一样的) 设备在连

  • MySql使用skip-name-resolve解决外网链接客户端过慢问题

    在腾讯云上面搭建的mysql使用开发的电脑上navicat进行访问时总是特别的慢,原来是Mysql会对请求的地址进行域名解析,开发的电脑并没有域名,所以会导致特别的慢,使用以下进行解决 [mysqld] skip-name-resolve skip-grant-tables 官方的解释 How MySQL uses DNS When a new thread connects to mysqld, mysqld will spawn a new thread to handle the requ

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

    登陆到mysql,查看进程的信息 复制代码 代码如下: show processlist; 发现大量的进程的状态为 login 原来默认的时候mysql启动时是不使用 skip-name-resolve选项的,这样的话,从其它主机的连接会比较慢,因为mysql会对这个ip做dns反向查询,导致大量的连接处于 login状态..... 解决这个问题有两个办法 一是加入 skip-name-resolve参数重启mysql 二是在 /etc/hosts中加入一句 192.168.0.2 server

  • 阿里云安装mysql数据库出现2002错误解决办法

    在安装数据库的时候出现了如下错误: 解决办法如下: 1.在bin目录下 输入:kill -s 9 9907 再输入: ps -ef|grep mysql 显示如下: 2.回到lampp目录下,重启数据库,服务器: 1.  ./lampp restart 以上所述是小编给大家介绍的阿里云安装mysql数据库出现2002错误解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • MySQL ERROR 1045 (28000) 错误的解决办法

    错误现象: ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)  ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: YES) windows下,以上两个错误的解决方法,本人亲测有效,现分享解决方案如下: 1.找到配置文件my.ini  ,然后将其打开,可以选择用记事本打开. 2

  • MySQL忘记root密码错误号码1045的解决办法

    停止MySQL服务 Windows可以右键我的电脑--管理--服务和应用程序--服务--找到对应的服务停止掉 免密登录 切换到MySQL安装路径下:D:\mysql-5.7.24-winx64\bin:如果已经配了环境变量,则不用再安装目录 打开CMD命令窗口,在命令行输入:mysqld -nt --skip-grant-table 8.0以上数据库输入:mysqld --console --skip-grant-tables --shared-memory 进入数据库 以管理员身份重新启动一个

  • MySQL too many connections错误的原因及解决

    今天中午,开发测试环境的MySQL服务报了一个too many connections的错误,从问题上看,可能是连接池被打满了,导致所有的连接都不可用了. 在这种情况下,最为直接的办法就是重新设置最大连接数,查看my.cnf文件,里面关于连接数的参数有两个,分别是: max_connections:最大连接数 max_user_connections:用户最大连接数 其中,第一个参数确定的是该实例的最大连接数,第二个参数确定的是单个用户的最大连接数. 一般的线上环境,为了保险起见,一般这两个参数

  • MySQL 那些常见的错误设计规范,你都知道吗

    依托于互联网的发达,我们可以随时随地利用一些等车或坐地铁的碎片时间学习以及了解资讯.同时发达的互联网也方便人们能够快速分享自己的知识,与相同爱好和需求的朋友们一起共同讨论. 但是过于方便的分享也让知识变得五花八门,很容易让人接收到错误的信息.这些错误最多的都是因为技术发展迅速,而且没有空闲时间去及时更新已经发布的内容所导致.为了避免给后面学习的人造成误解,我们今天来看一看 MySQL 设计规范中几个常见的错误例子. 主键的设计 错误的设计规范:主键建议使用自增 ID 值,不要使用 UUID,MD

  • MySQL命令提示符出现输入错误时如何修改前面的命令

    目录 当前问题 解决过程 具体步骤 解决案例 当前问题 ​ 在MySQL命令提示符中输入多行命令时,突然发现前面有错误,是很令人头疼的事情.大部人都知道可以通过输入\c来取消前边的输入,直接重新进入"mysql->"提示符.但是如果前边输入的东西太多,直接取消又很可惜的,需要我们重新敲打指令,如果直接复制的话,复制的每一行前面都会有"->"符号,这样又需要时间删除前面这些符号. 解决过程 ​ 这种情况下,可以输入\p,命令提示符窗口下面会弹出你前面所有输

  • Navicat连接mysql报错1251错误的解决方法

    本文为大家分享了Navicat连接mysql报错1251错误的解决方法,供大家参考 错误提示 出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password 解决办法:把mysql用户登录密码加密规则还原成mysql_native_password. 步骤: 1.打开cmd命令窗口,输入命令 mysql -uroot -p 打开MySQL数据库,然后输入密码进行登录. 2.修改加密规则 将加

  • MySQL 8.0.31中使用MySQL Workbench提示配置文件错误信息解决方案

    MySQL 8.0.31中使用MySQL Workbench提示配置文件错误信息 Error opening configuration file UnicodeDecodeError:‘gbk’ coded can’t decode byte 0x92 in position 5004: illegal multibyte sequence 配置文件之前安装MySQL Server的时候编码格式好像改了, 才使的MySQL Workbench能打开配置文件;过完年回来发现还是会报错,这个报错看

  • MySQL数据库下用户及用户权限配置

    问题:使用某大腿写的远程工具管理Mysql数据库时发现所有数据能正常显示,但是无法进行删除.修改等操作. 思路:可以远程读取到数据库里的信息,说明当前主机可以远程连接数据库.却无法进行删除.修改这些操作,说明某些权限并未赋予当前远程用户. 解决方法: 查看当前用户权限 show grants for username 显示当前用户下的权限为:select,insert,update,delete GRANT USAGE ON *.* TO 'username'@'host' IDENTIFIED

随机推荐