我有一台伺服器,裡面有大量的mysql資料庫。最近,以 Root 身分登入時,某些架構已停止顯示。
如果我使用該特定資料庫的登入名,那麼我可以看到它。
該資料庫的「所有者」是 root,但其他對 root 不可見的資料庫則由其他人擁有。
我們最近訪問和使用的資料庫似乎消失了,但現在有超過 5 個資料庫不可見。它不是本地緩存,任何使用 root 登入的人都會遇到同樣的問題。
答案1
如果你的當前使用者()沒有說root@localhost
,那麼您沒有 root 權限,並且不允許這樣連接。
若要查看連線後您擁有哪些實際權限,請執行此命令
SHOW GRANTS;
當您連接到特定資料庫時,您應該能夠看到
- 該資料庫的表
- INFORMATION_SCHEMA 中僅用於該資料庫的元數據
舉例來說,您連接到 buyspace_systdb
輸出來自SHOW GRANTS;
很可能會出現這樣的情況
GRANT USAGE ON *.* ...
GRANT ALL PRIVILEGES ON buyspace_systdb.* TO ...
root@localhost
如果您從該本機伺服器登錄,則該使用者將可以工作。如果您遠端登入,root@localhost
則不允許使用者()驗證為當前使用者()。這一點的證明在你問題的第一個顯示。請注意,您只能看到 information_schema。它實際上是空的,但 information_schema.schemata 除外,它有 1 或 2 個條目。如果root@'%'
存在mysql.user
並擁有與 相同的特權root@localhost
,那麼它就會被允許看到一切root@localhost
。
MySQL 的身份驗證方案具有螺旋下降效應。如果您嘗試連線的使用者不存在,它將嘗試更模糊的使用者名稱(允許通配符或有限的權限)。請參閱我的 DBA StackExchange 帖子MySQL 錯誤:使用者「a」@「localhost」的存取被拒絕(使用密碼:YES) 有關此的更多詳細資訊。
底線root@localhost
:您無法從遠端位置連接