MySQL警告“用户存在”但用户不在“用户”表中

Zak*_*Zak 4 mysql

我已经有这个问题好几个星期了。我不知道下一步该往哪里看。我已经清理,刷新,重新启动MySQL服务,重新启动Ubuntu服务器。什么会导致这个WARNING和用户不显示在user表中?我也尝试过DROP user并得到0 rows affected了结果。这是令人难以置信的令人沮丧!用户信息存储在架构中的其他位置以及如何清除它?

截屏

更新

当我 grep 中的用户名时,/var/lib/mysql/mysql我在db.MYD文件中找到了用户名。虽然我无法编辑它。所以我知道用户名存在于用户表之外的其他地方。

dig*_*jay 11

当用户被创建并被授予权限,然后从 mysql.user 中删除而不是被删除时,就会发生这种情况:

首先,创建一个用户admin_x@localhost

mysql> create user admin_x@localhost identified by 'abc123';
Query OK, 0 rows affected (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

检查用户是否在mysql.user

mysql> select user, host from mysql.user where user='admin_x';
+---------+-----------+
| user    | host      |
+---------+-----------+
| admin_x | localhost |
+---------+-----------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

好的。

现在我们授予该用户访问 db 的权限test

mysql> grant all on test.* to admin_x@localhost;
Query OK, 0 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

并检查它:

mysql> show grants for admin_x@localhost;
+-----------------------------------------------------------+
| Grants for admin_x@localhost                              |
+-----------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'admin_x'@'localhost'      |
| GRANT ALL PRIVILEGES ON `test`.* TO 'admin_x'@'localhost' |
+-----------------------------------------------------------+
2 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

现在从以下位置不正确地删除用户mysql.user

mysql> delete from mysql.user where user='admin_x';
Query OK, 1 row affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

并且用户不再在mysql.user

mysql> select user from mysql.user where user='admin_x';
Empty set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

但是当您现在尝试创建新的时,您会收到一个错误:

mysql> create user admin_x@localhost identified by 'abc123';
ERROR 1396 (HY000): Operation CREATE USER failed for 'admin_x'@'localhost'
Run Code Online (Sandbox Code Playgroud)

那是因为admin_x@localhost仍然有权限存储在mysql.db

mysql> select User from mysql.db where user='admin_x';
+---------+
| User    |
+---------+
| admin_x |
+---------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

现在,当您删除用户时

mysql> drop user admin_x@localhost;
Query OK, 0 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

它真的消失了,您可以再次创建它:

mysql> create user admin_x@localhost identified by 'abc123';
Query OK, 0 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)