我有mysql Server版本:5.5.32-0ubuntu0.12.04.1(Ubuntu)安装了linux Ubuntu 12.04 LTS.
我似乎拥有root权限.我可以创建一个用户和一个数据库.但是,我似乎无法向用户授予对db的所有权限.
我的.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                                                         |
+----------------------------------------------------------------------------------------------------------------------+
现在,我创建一个db,一个用户.我授予权限时,最后一行显示错误.你能不能让我知道为什么我会收到这个错误以及我能做些什么来使这个工作?
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'
Tre*_*ewq 39
首先,确定您登录的用户:
 select user(); select current_user();
第一个命令的结果是您尝试登录的结果,第二个命令是您实际连接的结果.确认您已root@localhost在mysql 中登录.
问题是,我想出了安装时没有提供Grant_priv给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';
我确实得到了一些权限错误,但是当我重新登录时,它很好.
授予权限后尝试刷新权限
GRANT ALL PRIVILEGES ON staging.* TO 'staging'@'localhost' IDENTIFIED BY 'test';
FLUSH PRIVILEGES;
对于那些仍然像我一样偶然发现这一点的人来说,值得检查以确保该尝试GRANT尚不存在:
SHOW GRANTS FOR username;
就我而言,错误实际上并不是因为存在权限错误,而是因为权限错误GRANT已经存在。
| 归档时间: | 
 | 
| 查看次数: | 43628 次 | 
| 最近记录: |