代码改变世界

MySQL root授权报错ERROR 1045 (28000)

  abce  阅读(1935)  评论(0编辑  收藏  举报

创建用户后授权的时候报错,显示没有访问权限:

1
2
mysql> grant select, process, super, replication client, reload on *.* to 'abc'@'127.0.0.1';
ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)

  

先看看系统中,有哪些数据库用户:

1
2
3
4
5
6
7
mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| abc           | 127.0.0.1 |
| root          | %         |
+---------------+-----------+

这里的abc就是刚才创建的用户。

查看一下当前登录的用户信息:(status命令看到不一定是真的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mysql> status;      
--------------
/usr/local/mysql/bin/mysql  Ver 14.14 Distrib 5.7.29, for linux-glibc2.12 (x86_64) using  EditLine wrapper
 
Connection id:          74969
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.29-log MySQL Community Server (GPL)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /tmp/mysql.sock
Uptime:                 49 days 4 hours 12 min 24 sec
 
Threads: 63  Questions: 325324823  Slow queries: 66  Opens: 34378  Flush tables: 99  Open tables: 476  Queries per second avg: 76.569
--------------
 
mysql> select user(), current_user();
+----------------+----------------+
| user()         | current_user() |
+----------------+----------------+
| root@localhost | root@%         |
+----------------+----------------+
1 row in set (0.00 sec)

user()表示当前的登录用户;current_user()表示对应于mysql.user表里对应的账号。

看下当前用户权限;

1
2
3
4
5
6
7
8
9
mysql> show grants;
+-------------------------------------------+
| Grants for root@%                         |
+-------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' |
+-------------------------------------------+
1 row in set (0.00 sec)
 
mysql>

  

可以看到root用户是没有with grant option权限的。正确的应该是这样的:

1
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION

  

修改方法:

1
2
3
4
5
6
7
8
9
10
mysql> select user,host,Grant_priv from mysql.user;
+---------------+-----------+------------+
| user          | host      | Grant_priv |
+---------------+-----------+------------+
| abc           | 127.0.0.1 | N          |
| root          | %         | N          |
+---------------+-----------+------------+
 
mysql> update mysql.user set Grant_priv="Y" where user="root" and host="%";
mysql> flush privileges;

  

退出重新登录,再次授权即可。

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2015-12-20 Innodb后台线程
2015-12-20 查看当前数据库支持哪些存储引擎
2015-12-20 ERROR: No query specified
点击右上角即可分享
微信分享提示