Mysql
MySQL警告“使用者存在”但使用者不在“使用者”表中
我已經有這個問題好幾個星期了。我不知道下一步該往哪裡看。我已經清理,刷新,重新啟動
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)