データベースにアクセスできるすべてのユーザーを知る方法は?
Mysqlインスタンスに管理者ユーザーとして接続し(通常はrootとして)、次のコマンドを実行します...
select user from mysql.db where db='DB_NAME';
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では、カラムレベルの特権があることはテーブルレベルの特権があることを意味するように見えます。テーブルレベルの特権があることは、データベースレベルの特権があることを意味するものではありません。プロシージャレベルの権限については不明です。
# 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;
データベースの 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';