2012-08-24 63 views
2

我和一個團隊成員被阻止,因爲授予遠程用戶權限的命令失敗,但沒有錯誤。新用戶使用CREATE USER成功添加到mysql.user,但GRANT PRIVILEGES後跟FLUSH PRIVILEGES不影響授權表。這兩個命令應該說'查詢OK。 0行受影響,'他們這樣做。但是,然後SHOW GRANTS不會顯示新的權限,我們也不能從指定的遠程IP使用該用戶名登錄。任何人都可以解釋以下行爲嗎?MySQL:授予權限後跟Flush權限沒有效果,沒有錯誤(以root身份登錄)

mysql> SELECT CURRENT_USER();  ///I'm definitely in as root user 
+----------------+ 
| CURRENT_USER() | 
+----------------+ 
| [email protected] | 
+----------------+ 
1 row in set (0.00 sec) 

mysql> GRANT ALL PRIVILEGES ON *.* TO 'myNewUser'@'remoteIP'; //grant to existing user 
Query OK, 0 rows affected (0.00 sec) 

mysql> FLUSH PRIVILEGES; 
Query OK, 0 rows affected (0.00 sec) 

mysql> SHOW GRANTS; 

| Grants for [email protected]                             

| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD   '*////TakenOut///' WITH GRANT OPTION | 
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION                    
2 rows in set (0.00 sec) 

我期待第三行有'myNewUser'特權。

+2

哈哈所以這個有點明顯,但萬一別人有同樣的問題: SHOW GRANTS;顯示當前用戶的資助,而不是所有用戶。命令SHOW GRANTS FOR'myNewUser'@'remoteIP'顯示了預期的結果。 。 。 。我的問題意味着與網絡,而不是MySQL。 – devney

+0

如果您的my.cnf文件中沒有指定'skip-name-resolve',請確保您可以將該IP地址解析爲主機名。 – spencer7593

回答

8

SHOW GRANTS語句顯示當前用戶的授予。在你的情況下,爲root @ localhost。所以你不應該期待看到第三排有myNewUser的特權。

相反,查詢mysql.user表...

SELECT * FROM mysql.user WHERE User = 'myNewUser' 

我會驗證密碼設置爲'myNewUser'@'remoteip'。 (。MySQL的標識「用戶」的用戶名和主機的組合,用戶'myNewUser'@'thisip''myNewUser'@'thatip'不同的用戶)


另外,我們有我們的MySQL的my.cnf文件,此設置:

# Disable DNS Lookup (use IP addresses only) 
skip-name-resolve 

所以我們使用IP地址而不是主機名。 (這避免了當DNS無法從IP地址做DNS反向查詢得到主機發生的連接問題。)

http://dev.mysql.com/doc/refman/5.1/en/host-cache.html

底線是MySQL做的一個「反向查找」 IP地址來獲取主機名。如果無法獲得給定IP地址的主機名,則來自IP地址的連接將失敗。

+0

謝謝 - 只是想出了這個:) – devney

+2

方式重新發布答案作爲您的問題的評論,而不是簡單地接受它... –