Navicat mysql报错 1142 - SELECT command denied to user 'xxx'@'localhost' for table 'user'

Navicat mysql报错 1142 - SELECT command denied to user 'xxx'@'localhost' for table 'user'_第1张图片 话我就撂这儿了,只要你认真看完,你就能解决。

困了我一天一夜的问题终于解决了,问题也不知道是怎么产生的,点击“用户”或者修改“information_schema”的值就会提示错误,似乎是因为权限不足,错误入下图。

Navicat mysql报错 1142 - SELECT command denied to user 'xxx'@'localhost' for table 'user'_第2张图片

首先你要知道数据库的用户是怎么回事。每个数据库都有账号密码,连接特定的数据库需要对应的账号密码,这个很容易理解,PHP里的mysqli_connect你们也用的多了。主机上的MYSQL可以有很多个数据库,这个MYSQL有一个root账户,这个账户可以随意操作其他数据库账户的权限。“information_schema”这个数据库需要比较大的权限才能修改,不然只能只读。root账户自然是可以操作“information_schema”的,Event_Scheduler就需要root账户开启。

这里的问题就在于user1的权限不足,我们就需要用root赋予user1更大的权限。

那么root账号是啥,密码又是啥?

 

(环境说明)我搭建的环境:在自己的台式主机上直接安装的宝塔软件,然后选择的5.5版本的mysql安装。安装的时候会提示输入数据库的密码,这里填入的是root密码。之后会用到,不是从宝塔安装的小伙伴们也别忘了自己mysql的root密码,密码忘了可以重装(或者点下边那个“密码”按钮强制修改)。

Navicat mysql报错 1142 - SELECT command denied to user 'xxx'@'localhost' for table 'user'_第3张图片

这里连接sql_dora数据库用的账号是sql_dora,密码是pwd1.Navicat mysql报错 1142 - SELECT command denied to user 'xxx'@'localhost' for table 'user'_第4张图片

需要说明的是这个账号,它是没有大权限的。而root这个用户名才是有真正大权限的,它的密码是创建数据库时你输入的那个。

对了,那怎么验证你的root账号的密码是否正确呢?

CMD法(建议跳过,看下一个Navicat法):

1.找到你的MYSQL安装目录

Navicat mysql报错 1142 - SELECT command denied to user 'xxx'@'localhost' for table 'user'_第5张图片

2.打开CMD,输入命令。

Microsoft Windows [版本 10.0.17134.885]
(c) 2018 Microsoft Corporation。保留所有权利。

//切换到D盘盘符
C:\Users\Administrator>D:

//切换到MYSQL目录下,目录获取方法请看上一步骤
D:\>cd D:\BtSoft\WebSoft\mysql\MySQL5.5\bin

//用root登陆MYSQL,指令:mysql -hlocalhost -uroot -p密码
D:\BtSoft\WebSoft\mysql\MySQL5.5\bin>mysql -hlocalhost -uroot -p123456

//登陆成功后的返回
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 672
Server version: 5.5.54-log MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

//不清楚这是干啥的(滑稽
mysql> use mysql
Database changed

//输出用户名为sql_dora的信息
mysql> select * from user where user='sql_dora';
+-----------+----------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+--------+-----------------------+
| Host      | User     | Password                                  | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string |
+-----------+----------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+--------+-----------------------+
| 127.0.0.1 | sql_dora | *CBC40DD3286B5BBB6F9F3582C7760D52524ABC16 | N           | N           | N           | N           | N           | N         | N           | N             | N            | N         | N          | N               | N          | N          | N            | N          | N                     | N                | N            | N               | N                | N                | N              | N                   | N                  | N                | N          | N            | N                      |          |            |             |              |             0 |           0 |               0 |                    0 |        | NULL                  |
+-----------+----------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+--------+-----------------------+
1 row in set (0.00 sec)

mysql>

当然,执行到第三步就行了,我们只测试root密码是不是对的。

Navicat法:

如下图,用户名填写root,密码填入,测试连接就行了。(我也是写完CMD法之后突然想起有这么个直接测试的…)

Navicat mysql报错 1142 - SELECT command denied to user 'xxx'@'localhost' for table 'user'_第6张图片

 

用root账户登录之后我们就获得了最高权限,接下来给我们的sql_dora用户赋权。

Navicat mysql报错 1142 - SELECT command denied to user 'xxx'@'localhost' for table 'user'_第7张图片

下图是点击“用户”就会提示1142错误的默认权限情况。Navicat mysql报错 1142 - SELECT command denied to user 'xxx'@'localhost' for table 'user'_第8张图片

勾选上Select之后,保存。再打开数据库,以sql_dora之名,你会发现Select错误就不会再出来了!

如果需要其他权限,请适当勾选,权限过多不太好,哪天MYSQL被注入了,drop你的库你就傻眼了。

 

(最后,最后,最后)

我发现一个很严肃的问题,直接用root账号操作不就好了,干嘛还得麻烦给sql_dora赋权。

等等,好像是有那么个必要的,毕竟PHP连接数据库不能用root啊,风险太高。Navicat私下root还行,上PHP最好还是给小账户赋权一下,用小账户,把风险降到最低。

Navicat mysql报错 1142 - SELECT command denied to user 'xxx'@'localhost' for table 'user'_第9张图片 就写到这里过了,给莫名其妙出了问题的小伙伴们参考参考。经过这么一搞,自己对之前模模糊糊的MYSQL用户机制有了那么个头绪,至少没那么头大了。

看完了我的文章,你的问题应该解决了,点个赞再走呗~

啥?你说啥?你还想关注我?那好吧,我接受了!Navicat mysql报错 1142 - SELECT command denied to user 'xxx'@'localhost' for table 'user'_第10张图片

 

 

你可能感兴趣的:(MYSQL)