2013-10-08 57 views
12

我有mysql服務器版本:5.5.32-0ubuntu0.12.04.1(Ubuntu)安裝了linux Ubuntu 12.04 LTS。不能授予mysql數據庫的權限

我似乎擁有作爲根的所有權限。我可以創建一個用戶和一個數據庫。但是,我似乎無法給用戶所有權限的數據庫。

我.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 [email protected]                       | 
+----------------------------------------------------------------------------------------------------------------------+ 
| 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' 

回答

30

首先,確定你登錄的用戶:

select user(); select current_user(); 

第一個命令的結果是你試圖登錄什麼因爲,第二個是你實際連接的。確認您在mysql中以[email protected]的身份登錄。

問題是我想出的安裝沒有提供Grant_priv[email protected]。這裏是你如何檢查。

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   | 
+-----------+------------------+-------------------------------------------+------------+------------+ 

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

我沒有得到一些權限錯誤,但是當我重新登錄,這是罰款。

+0

是的。絕對必須註銷並返回。感謝您的幫助! – Slayer6

9

嘗試授予權限後沖洗特權

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

當我授予權限時,出現錯誤。 'FLUSH PRIVILEGES;'沒有任何區別,因爲授權許可命令尚未被接受。 – Trewq

+0

看到我的回答,我更新了它。在授予 – xiriusly

+0

後,通過'test'進行身份驗證。我遇到了同樣的問題。它抱怨用戶'root'@'localhost'沒有權限......我能做些什麼來驗證root擁有所有權限嗎? – Trewq

3

對於那些誰仍偶爾發現這個像我一樣,這是值得檢查,以確保試圖GRANT尚不存在:

SHOW GRANTS FOR username; 

在我的情況下,錯誤是不實際,因爲有一個許可錯誤,但是因爲GRANT已經存在。