> 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了,别说给同事排除故障,自己都登录不了了。
> show grants for root@'localhost'; ERROR 1141 (42000): There is no such grant defined for user 'root' on host 'localhost'这个时候我们停一下,在这个场景中,系统mysql命令直接连接进来的是root@localhost吗?从错误日志来看不是,而从线程信息来看是,所以我们需要进一步分析一下,问题在哪里。