加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL root用户登录的几处小问题

发布时间:2022-04-01 06:39:55 所属栏目:MySql教程 来源:互联网
导读:今天和同事聊了聊技术的事情,聊到BAT里面的一些高大上的系统和设计,相比总是会有些差距,不过像那样体量的公司知识沉淀很深,所以能够做好我们力所能及的事情,把它细化做好,也是一种进步和改进。 如果你老是觉得自己的环境受限,有各种KPI或者是成本的
       今天和同事聊了聊技术的事情,聊到BAT里面的一些高大上的系统和设计,相比总是会有些差距,不过像那样体量的公司知识沉淀很深,所以能够做好我们力所能及的事情,把它细化做好,也是一种进步和改进。
 
        如果你老是觉得自己的环境受限,有各种KPI或者是成本的考量,做事情从下往上去推动很难,这些都是实际的困难,很多公司都是存在这样的问题的。在资源受限方面,我尤其纠结,举个有意思的小例子,如果我收到一条报警,提示数据库表空间不足了,那就添加一个数据文件呗,结果数据库层面的空间问题解决了,而马上会收到一个系统空间不足的报警,碰到这种情况,你自己体会,心情肯定是很复杂的。
 
        今天碰到的一个案例比较特别,是关于MySQL登录的,数据库环境是5.6版本。
 
> select version();
+-----------------+
| version()       |
+-----------------+
| 5.6.23-72.1-log |
+-----------------+
1 row in set (0.01 sec)今天同事问我一个问题,想让我看看某个数据库用户的权限问题,我登录到服务器端之后,一切都很顺利。
 
# mysql
Logging to file '/home/mysql/query.log'
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 52625
Server version: 5.6.23-72.1-log Percona Server (GPL), Release 72.1, Revision 0503478一切都很正常,然后我准备看看连接到数据库的线程情况。
 
> show processlist;
ERROR 1227 (42000): Access denied; you need (at least one of) the PROCESS privilege(s) for this operation竟然抛出了这个奇怪的错误,如果想查看数据字典中的信息,也被禁止了。
 
> select user,host from mysql.user;
ERROR 1142 (42000): SELECT command denied to user ''@'localhost' for table 'user'   这个时候就很纠结了,我堂堂的root用户竟然登录不了MySQL了,别说给同事排除故障,自己都登录不了了。
 
带着疑问,我查看了error log,竟然没有发现什么相关的异常信息。
 
这个数据库中有10个左右的数据库用户,大体是这样的内容,做了修改。
 
> select user,host from mysql.user;
+----------------+-----------------------------+
| user           | host                        |
+----------------+-----------------------------+
| cloud_test     | %                           |
| cloudcs_app    | %                           |
| root           | %                           |
| cloud_test     | 10.127.138.107              |
| root           | 10.127.138.107              |
|                | localhost                   |
| jeanron        | test_user%                  |
+----------------+-----------------------------+查看show process的信息,看到是用户是root
 
| 52629 | root           | localhost       
+-------+----------------+------------查看root@localhost的权限,竟然没有。
 
> show grants for root@'localhost';
ERROR 1141 (42000): There is no such grant defined for user 'root' on host 'localhost'这个时候我们停一下,在这个场景中,系统mysql命令直接连接进来的是root@localhost吗?从错误日志来看不是,而从线程信息来看是,所以我们需要进一步分析一下,问题在哪里。
 
虽然服务端直接mysql命令登录后,查看不了线程情况,查看不了数据字典,但是show grants这个命令是可以的。
 
mysql> select user,host from mysql.user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| mysql.sys | localhost |
| root      | localhost |
+-----------+-----------+
2 rows in set (0.00 sec)默认的连接方式是root@'localhost'
 
而在上面的场景中,没有root@'localhost'的配置,就优先使用了''@'localhost'这个用户。
 
为什么会有这个问题呢,和开发同学沟通之后,定位分析,发现原来之前这个服务器的IP发生过变化。后来开发同学自己也做了一些修改和配置,就是现在的情况了。
 
  对于这种情况怎么修复呢,我的想法是删除匿名用户,服务端不启用密码,即root@'localhost',而客户端连接则使用域名解析的方式,但是对开发同学不开放root权限,所以我们删除root@'%' 用户。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读