web-dev-qa-db-ja.com

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

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

21
user79483

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

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

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では、カラムレベルの特権があることはテーブルレベルの特権があることを意味するように見えます。テーブルレベルの特権があることは、データベースレベルの特権があることを意味するものではありません。プロシージャレベルの権限については不明です。

11
Scott Duckworth
# 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;
9
silviud

データベースの 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';
2
user4514