MySQL 出现 DROP USER;但用户仍然存在于 mysql.users 表中

Posted

技术标签:

【中文标题】MySQL 出现 DROP USER;但用户仍然存在于 mysql.users 表中【英文标题】:MySQL appears to DROP USER; but user still exists in mysql.users table 【发布时间】:2011-06-16 13:51:00 【问题描述】:

我刚刚在 Mac OS X 10.6.6 上安装了 mysql Community server (5.5.8)。

我一直在遵守安全安装规则(为 root 分配密码、删除匿名帐户等),但是,我无法删除一个用户帐户:

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手册提示可以删除所有匿名账户,为什么我不能删除这个呢?

【问题讨论】:

【参考方案1】:

MySQL 包含一个匿名用户帐户,允许任何人在没有用户帐户的情况下连接到 MySQL 服务器。这仅用于测试,应在数据库服务器投入生产环境之前将其删除。

对 MySQL 服务器运行以下 SQL 脚本以删除匿名用户帐户:

DELETE FROM mysql.user WHERE User='';

更改权限/用户帐户后,请确保使用以下命令刷新权限表:

FLUSH PRIVILEGES;

【讨论】:

【参考方案2】:

由于您的大写字符,这是一个已知错误:http://bugs.mysql.com/bug.php?id=62255

使用用户 douger 的建议作为解决方法

【讨论】:

【参考方案3】:

或者,只删除匿名的而不是根:

mysql> 从 mysql.user 中删除 User='' AND Host='my-computer-hostname.local';

5.1.57 为我工作。

【讨论】:

【参考方案4】:

您仍然可以从用户表中删除记录:

mysql> DELETE FROM user WHERE host='my-computer-hostname.local';Query OK, 2 rows affected (0.00 sec)

此方法在 MySQL 4.1 之前使用...

【讨论】:

以上是关于MySQL 出现 DROP USER;但用户仍然存在于 mysql.users 表中的主要内容,如果未能解决你的问题,请参考以下文章

mysql5.7数据库删除用户及其权限 drop user ‘root‘@‘%‘; flush privileges;

MySQL CREATE/DROP USER 返回 0

MySQL 权限管理简单篇

drop user 用户名 cascade时报ORA-00604:递归SQL级别2 出现错误 ORA-00942:表或视图不存在 是啥原因 急

在oracle数据库中删除用户drop user username cascade; 但是现在报错啊就高人

试图让红移用户访问 IAM 角色,受信任的实体列表已更新,但仍然出现相同的错误