【问题标题】:cannot grant privileges to mysql database无法授予mysql数据库权限
【发布时间】:2013-10-08 01:14:05
【问题描述】:

我有 mysql 服务器版本: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 登录,但没有-p 选项我无法登录,尽管我有.my.cnf(不是问题,但很奇怪)。

有一堆 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'

【问题讨论】:

    标签: mysql


    【解决方案1】:

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

     select user(); select current_user();
    

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

    问题是我想出的安装没有提供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          |
    +-----------+------------------+-------------------------------------------+------------+------------+
    

    您可以看到,对于 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】:

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

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

    【讨论】:

    • 我在授予权限时收到错误消息。 FLUSH PRIVILEGES; 将没有任何区别,因为授予权限命令尚未被接受。
    • 看我的回答,我更新了。授予后放置 IDENTIFIED BY 'test'
    • 我遇到了同样的问题。它抱怨用户'root'@'localhost'没有权限......我可以做些什么来验证root是否拥有所有权限?
    【解决方案3】:

    对于那些仍然像我一样偶然发现的人,值得检查以确保尝试的 GRANT 不存在:

    SHOW GRANTS FOR username;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 2011-06-28
      • 1970-01-01
      • 2014-08-16
      • 2021-01-01
      相关资源
      最近更新 更多