MySQL:授予权限后跟Flush Privileges没有效果,没有错误(以root用户身份登录)

时间:2012-08-24 20:21:46

标签: mysql remote-access privileges

我和团队成员都难倒,因为向远程用户授予权限的命令失败,但没有错误。使用CREATE USER将新用户成功添加到mysql.user,但GRANT PRIVILEGES后跟FLUSH PRIVILEGES不会影响授权表。这两个命令都应该说'查询正常。 0行受影响,'他们这样做。但是,SHOW GRANTS不会显示新的权限,也不能使用指定的远程ip登录该用户名。任何人都可以解释以下行为吗?

mysql> SELECT CURRENT_USER();     ///I'm definitely in as root user
+----------------+
| CURRENT_USER() |
+----------------+
| root@localhost |
+----------------+
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 root@localhost                                                                                                                   

| 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'的特权。

1 个答案:

答案 0 :(得分:10)

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地址的连接将失败。