无法授予MySQL数据库权限。

21

我已经安装了mysql Server版本为5.5.32-0ubuntu0.12.04.1(Ubuntu)的Linux Ubuntu 12.04 LTS。

我似乎具有root用户的所有权限,可以创建用户和数据库。但是,我似乎无法将用户赋予数据库的所有权限。

我的.my.cnf文件:

[client]
user=root
password=test

我通过 mysql -u root -h localhost -p 登录,但即使我有 .my.cnf 文件,没有使用 -p 选项就无法登录(这不是问题,只是很奇怪)。

有一堆 root 用户,所以我把它们都删除了,现在只剩下这些用户:

mysql> SELECT host,user,password FROM mysql.user;
+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost | root             | ***************************************** |
| localhost | debian-sys-maint | ***************************************** |
+-----------+------------------+-------------------------------------------+

mysql> SHOW GRANTS FOR 'root'@'localhost';
+----------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                            |
+----------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*****************************************' |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION                                                         |
+----------------------------------------------------------------------------------------------------------------------+

现在我创建了一个数据库和一个用户。当我授予权限时,最后一行显示了一个错误。请问您能告诉我为什么会出现这个错误以及我该如何解决它吗?

mysql> create database staging;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER 'staging'@'localhost' IDENTIFIED BY 'test';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON staging.* TO 'staging'@'localhost';
ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'staging'
3个回答

50

首先,确认您当前登录的用户:

 select user(); select current_user();

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

问题在于我安装时没有向root@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          |
+-----------+------------------+-------------------------------------------+------------+------------+

您可以看到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';

我确实遇到了一些许可错误,但重新登录后问题就解决了。


2
是的,一定要注销并重新登录。谢谢帮助! - Slayer6

10

在授予权限后尝试刷新权限

GRANT ALL PRIVILEGES ON staging.* TO 'staging'@'localhost' IDENTIFIED BY 'test';
FLUSH PRIVILEGES;

1
当我授予权限时,出现了错误。因为授予权限命令尚未被接受,所以FLUSH PRIVILEGES;无济于事。 - Trewq
请在授权后添加“IDENTIFIED BY 'test'”以完成操作。请查看我的回答,我已经更新了它。 - xiriusly
我遇到了同样的问题。它抱怨用户'root'@'localhost'没有权限...有什么方法可以验证root是否拥有所有权限? - Trewq

5

对于像我一样仍然遇到此问题的人,值得检查确保尝试的GRANT不存在:

SHOW GRANTS FOR username;

在我的情况下,错误实际上并不是因为有权限错误,而是因为 GRANT 已经存在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接