Mysql

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

  • August 24, 2021

我已經有這個問題好幾個星期了。我不知道下一步該往哪裡看。我已經清理,刷新,重新啟動MySQL服務,重新啟動Ubuntu伺服器。什麼會導致這個WARNING和使用者不顯示在user表格中?我也嘗試過DROP user並得到0 rows affected了結果。這令人難以置信的沮喪!使用者資訊還儲存在 Schema 中的什麼位置,我該如何清除它?

截屏

更新

當我 grep 中的使用者名時,我在文件中/var/lib/mysql/mysql找到了使用者名。db.MYD雖然我不能編輯它。所以我知道使用者名存在於使用者表之外的某個地方。

當一個使用者被創建並被授予權限,然後從 mysql.user 中刪除而不是被刪除時,就會發生這種情況:

首先,創建一個使用者admin_x@localhost

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

檢查使用者是否在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)

好的。

現在我們授予此使用者對 db 的訪問權限test

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

並檢查它:

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)

現在從以下位置不正確地刪除使用者mysql.user

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

並且使用者不再在mysql.user

mysql> select user from mysql.user where user='admin_x';
Empty set (0.00 sec)

但是當你現在嘗試新建它時,你會得到一個錯誤:

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

那是因為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)

現在,當您刪除使用者時

mysql> drop user admin_x@localhost;
Query OK, 0 rows affected (0.00 sec)

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

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

引用自:https://serverfault.com/questions/1075525