0

「データベースを表示」は、あなた (ログインしているユーザー) がいくつかの権限を持っているすべてのデータベースを表示します。

ユーザー「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 で利用可能な (既存のデータベースに関する) 情報が存在する必要がないことを意味します。

4

3 に答える 3

2

何度も検索して読んだ後、他のユーザーの「データベースを表示」を見つけるためのきれいできれいな方法がないことがわかりました。

次のようにしてデータベースの設計を変更しました: - すべてのデータベース名は $username_ で始まります - $username には下線 "_" を含めることはできません

「SHOW DATABASES」以外の権限のないユーザーがいて、SHOW DATABASES コマンドで WHERE LIKE を使用してユーザーのデータベースを見つけました。

SHOW DATABASES WHERE `Database` LIKE ?

と ?は次のように置き換えられます。

'$username\_%'
于 2012-08-16T09:15:40.000 に答える
1

「information_schema」からテーブル USER_PRIVILEGES にクエリを実行する特定のユーザーの権限を取得できます。

たとえば、「root」という名前のユーザーの「CREATE」権限をテストするには、次のクエリを実行できます。

SELECT * FROM information_schema.USER_PRIVILEGES WHERE GRANTEE LIKE "'root'%" AND PRIVILEGE_TYPE="CREATE";

于 2012-08-14T12:14:55.740 に答える
0
Select Host, Db, User from mysql.db;

これにより、ホスト、データベース名、および対応するユーザーがすべて1つに表示されます

于 2013-11-22T11:32:15.613 に答える