データベース(MySQL)にアクセスできるすべてのユーザーを知る方法は?


19

データベースにアクセスできるすべてのユーザーを知る方法は?

回答:


14

管理ユーザー(通常はroot)としてmysqlインスタンスに接続し、次のコマンドを入力します...

select user from mysql.db where db='DB_NAME';

ライブのMariaDB(MySQLフォーク)に対してこれを実行したところ、2つの空白行が返されました。
クリスS

1
あなたのデータベース名は何ですか?「DB_NAME」をデータベースの名前に置き換える必要があります。
user79644

select user from mysql.db修飾なしで実行すると、2つの空白行も返されます。
クリスS

MariaDBとMySQLの違いはわかりませんが、そのクエリは標準のMySQL 5インストールで期待どおりに実行されます。
-rvf

これはOPへの答えの一部にすぎません。mysql.user.dbフィールドには、複数のデータベースに一致するワイルドカード文字を含めることができます。提案されたクエリを使用すると、それらが欠落します。dev.mysql.com/doc/refman/5.0/en/grant.html-user4514 12
1

10

user79644の回答は、データベースレベルの特権を持つユーザーを取得しますが、テーブルレベル、列レベル、またはプロシージャレベルの特権のみを持つユーザーを見逃します。それらをすべて見つけるには、次のステートメントを使用します。

SELECT user,host FROM db WHERE db='name';
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';

少なくともMySQL 5.5では、列レベルの特権を持っているということは、テーブルレベルの特権を持っていることを意味するようです。テーブルレベルの特権を持っていることは、データベースレベルの特権を持っていることを意味しません。プロシージャレベルの権限についてはわかりません。


1
これは答えの一部にすぎません。mysql.user.dbフィールドには、複数のデータベースに一致するワイルドカード文字を含めることができます。提案されたクエリを使用すると、それらが欠落します。dev.mysql.com/doc/refman/5.0/en/grant.html
user4514

どのデータベースですか?私は取得していますERROR 1046 (3D000): No database selected
user124384

@ user124384答えで言われていないのは、mysqlデータベースを使うべきだということです。ここで、MySQLが使用するすべてのデータが保存されます。またはUSE mysql;、次のようなデータベース名をテーブル名に追加するコマンドを指定します。FROM mysql.dbFROM mysql.tables_priv
Gypsy Spellweaver

8
# current users that access the db
mysql> show processlist;
+-----+------+-----------+------+---------+------+-------+------------------+
| Id  | User | Host      | db   | Command | Time | State | Info             |
+-----+------+-----------+------+---------+------+-------+------------------+
| 214 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
+-----+------+-----------+------+---------+------+-------+------------------+

# who can access what at anytime and his privilege level
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

# what privileges are available
mysql> show privileges;

2
現在の唯一の付与は、ユーザ(ログイン)を表示するグラントショーは
NL-X

ルートとして、次の助成金を表示することもできます
ローワンホーキンス

2

あなたは、心の中で負担する必要がMySQLのGRANTデータベースのために含めることができるワイルドカード文字を。これはLIKE、クエリで使用することで説明する必要があります。

SELECT user,host FROM db WHERE 'name' LIKE db;
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.