错误1044(42000):具有所有权限的"root"访问被拒绝

lat*_*ian 21 mysql mysqladmin

我有奇怪的错误.我通过命令行以root身份登录本地Mysql.创建数据库后:

create database some_db;
Run Code Online (Sandbox Code Playgroud)

然后给某些用户授予权限:

grant all privileges on some_db.* to some_user@'localhost' identified by 'password';
Run Code Online (Sandbox Code Playgroud)

这是错误的:

ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'some_db'
Run Code Online (Sandbox Code Playgroud)

root(show grants;)的权限显示:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*8919C53DC7A4DFBF3F8584382E96463583EB7FDA' 
Run Code Online (Sandbox Code Playgroud)

我也确保我以root身份登录:

select current_user();
Run Code Online (Sandbox Code Playgroud)

这证实我以"root"@"localhost"身份登录

我已多次创建数据库和分配用户,从未遇到过问题.为什么我无法在root用户登录时将用户分配给root创建的数据库?

ps来自其他帖子,我认为这个问题可能是由于一些奇怪的用户引起的

select host, user from mysql.user;
Run Code Online (Sandbox Code Playgroud)

有些用户我还没有添加但确实出现了:

 MY_COMPuTER_name.local |       ''
 MY_COMPuTER_name.local |     root
Run Code Online (Sandbox Code Playgroud)

我试图删除这些用户

drop user 'root'@'MY_COMPuTER_name.local';
drop user ''@'MY_COMPuTER_name.local';
Run Code Online (Sandbox Code Playgroud)

但是,虽然它表明查询运行成功,但即使在刷新权限之后也不会删除用户.为什么我无法删除用户?任何帮助都很有用

Ama*_*ian 43

首先,确定您登录的用户:

 select user();
 select current_user();
Run Code Online (Sandbox Code Playgroud)

第一个命令的结果是您尝试登录的结果,第二个命令是您实际连接的结果.确认您已root@localhost在mysql 中登录.

Grant_privroot@localhost.这是你如何检查.

mysql> SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user;
+-----------+------------------+-------------------------------------------+------------+------------+
| host      | user             | password                                  | Grant_priv | Super_priv |
+-----------+------------------+-------------------------------------------+------------+------------+
| localhost | root             | ***************************************** | N          | Y          |
| localhost | debian-sys-maint | ***************************************** | Y          | Y          |
| localhost | staging          | ***************************************** | N          | N          |
+-----------+------------------+-------------------------------------------+------------+------------+
Run Code Online (Sandbox Code Playgroud)

您可以看到root @ localhost的Grant_priv设置为N. 这需要是Y.以下是如何解决这个问题:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';
Run Code Online (Sandbox Code Playgroud)

我重新登录,很好.

  • 哇...真棒!谢谢.这解决了问题.我不知道有两种类型授予权限以及如何查看它们而不是设置它们.好学习.谢谢你 (5认同)