「データベースを表示」は、あなた (ログインしているユーザー) がいくつかの権限を持っているすべてのデータベースを表示します。
ユーザー「xxx」が何らかの権限を持つすべてのデータベースを表示する方法はありますか?
編集:ユーザー「mickey」がいます:
mysql> show grants for mickey;
+-------------------------------------------------------------------------------------------------------+
| Grants for mickey@% |
+-------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'mickey'@'%' IDENTIFIED BY PASSWORD '*B9E506CBC9D7D8352A3C02DBC94677A5DEF491B8' |
| GRANT ALL PRIVILEGES ON `mickey\_%`.* TO 'mickey'@'%' |
+-------------------------------------------------------------------------------------------------------+
ユーザー mickey は、"mickey_%" という名前のデータベースとテーブルを作成/削除できます。これらのデータベースを除外するのは簡単ですが、彼のデータベースには接頭辞「mickey_」が付いているからです。
「mickey_example2」という名前のデータベースが 1 つあり、mickey がすべての権限を持っています。このデータベースを information_schema または mysql db で見つけることができません。
これは、information_schema.USER_PRIVILEGES の「mickey」に関する唯一の情報です。
mysql> SELECT * FROM information_schema.USER_PRIVILEGES WHERE GRANTEE LIKE '%mickey%';
+--------------+---------------+----------------+--------------+
| GRANTEE | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE |
+--------------+---------------+----------------+--------------+
| 'mickey'@'%' | def | USAGE | NO |
+--------------+---------------+----------------+--------------+
MySql のマニュアルには次のように書かれています。
MySQL はデータベースをデータ ディレクトリ内のディレクトリとして実装するため、このステートメントは単にその場所のディレクトリを一覧表示します。ただし、出力には、実際のデータベースに対応しないディレクトリ名が含まれる場合があります。
これは、特にデータベースが空の場合、information_schema で利用可能な (既存のデータベースに関する) 情報が存在する必要がないことを意味します。