我刚刚在Mac OS X 10.6.6上安装了MySQL社区服务器(5.5.8)。
我一直遵循安全安装的规则(为root分配密码,删除匿名帐户等),但是,有一个用户帐户我不能DROP:
mysql> select host, user from mysql.user;
+--------------------------------+------+
| host | user |
+--------------------------------+------+
| 127.0.0.1 | root |
| ::1 | root |
| My-Computer-Hostname.local | |
| My-Computer-Hostname.local | root |
| localhost | root |
| localhost | web |
+--------------------------------+------+
6 rows in set (0.00 sec)
mysql> drop user ''@'My-Computer-Hostname.local';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select host, user from mysql.user;
+--------------------------------+------+
| host | user |
+--------------------------------+------+
| 127.0.0.1 | root |
| ::1 | root |
| My-Computer-Hostname.local | |
| My-Computer-Hostname.local | root |
| localhost | root |
| localhost | web |
+--------------------------------+------+
6 rows in set (0.00 sec)
mysql>
如您所见,MySQL在执行DROP USER命令时没有报告错误,但实际上并没有删除用户!
我也试过从phpMyAdmin(3.3.9)中删除用户并产生相同的结果(即报告成功,没有错误消息,用户未删除)。
我研究了这个,有些人建议GRANT可能会阻止DROP USER命令,但是,用户没有GRANT权限:
mysql> SHOW GRANTS FOR ''@'My-Computer-Hostname.local';
+-----------------------------------------------------------+
| Grants for @my-computer-hostname.local |
+-----------------------------------------------------------+
| GRANT USAGE ON *.* TO ''@'my-computer-hostname.local' |
+-----------------------------------------------------------+
1 row in set (0.00 sec)
mysql> REVOKE GRANT OPTION ON *.* FROM ''@'My-Computer-Hostname.local';
ERROR 1141 (42000): There is no such grant defined for user '' on host 'my-computer-hostname.local'
之后我尝试再次删除用户,但它也没有删除/删除用户。
我已经检查了我的MySQl错误日志,并且没有任何异常。
MySQL手册表明可以删除所有匿名帐户,为什么我不能删除这个?
答案 0 :(得分:9)
或者,只删除匿名的而不是根目录:
的MySQL> DELETE FROM mysql.user WHERE User ='' AND Host =' my-computer-hostname.local';
在5.1.57上为我工作。
答案 1 :(得分:4)
由于您的大写字符http://bugs.mysql.com/bug.php?id=62255
,这是一个已知的错误使用来自用户douger的建议作为解决方法
答案 2 :(得分:2)
您仍然可以从用户表中删除记录:
mysql> DELETE FROM user WHERE host='my-computer-hostname.local';
Query OK, 2 rows affected (0.00 sec)
此方法在MySQL 4.1之前使用...
答案 3 :(得分:0)
MySQL包含一个匿名用户帐户,允许任何人在没有用户帐户的情况下连接到MySQL服务器。这仅用于测试,应在将数据库服务器放入生产环境之前将其删除。
对MySQL服务器运行以下SQL脚本以删除匿名用户帐户:
DELETE FROM mysql.user WHERE User='';
更改权限/用户帐户后,请确保使用以下命令刷新provilege表:
FLUSH PRIVILEGES;