[英]cannot grant privileges to mysql database
我有 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'
首先,確定您登錄的用戶:
select user(); select current_user();
第一個命令的結果是您嘗試登錄的身份,第二個是您實際連接的身份。 確認您在 mysql 中以root@localhost
身份登錄。
問題是我想出的安裝沒有向root@localhost
提供Grant_priv
。 這是您可以檢查的方法。
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
已經存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.