MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでユーザーのすべての権限(GRANT)を表示・確認する方法

MySQLでユーザーのすべての権限(GRANT)を表示する方法

MySQLでは、どのユーザーにどんな権限が付与されているのかを確認したい場面がよくあります。そんなときに便利なのが、INFORMATION_SCHEMA.SCHEMA_PRIVILEGES テーブルです。このテーブルを参照すれば、スキーマ(データベース)単位で付与されたすべての権限を一覧表示できます。

INFORMATION_SCHEMA.SCHEMA_PRIVILEGES の主なカラム

  • GRANTEE: 権限が付与されているユーザー('ユーザー名'@'ホスト名' の形式)
  • TABLE_CATALOG: カタログ名(通常は「def」固定)
  • TABLE_SCHEMA: 対象のデータベース(スキーマ)名
  • PRIVILEGE_TYPE: 付与されている権限の種類(SELECT、INSERT など)
  • IS_GRANTABLE: 他のユーザーへの再付与(WITH GRANT OPTION)が可能かどうか(YES / NO)

実行例:すべての権限を一覧表示する

まず基本の構文を見てみましょう。次のSELECT文を実行すると、登録済みユーザーのすべてのスキーマ権限を取得できます。

SELECT * FROM INFORMATION_SCHEMA.SCHEMA_PRIVILEGES;

それでは、実際にmysqlクライアントから実行してみます。

mysql> SELECT * FROM INFORMATION_SCHEMA.SCHEMA_PRIVILEGES;

実行すると、次のような結果が出力されます(表示上、一部の行を省略しています)。

+-----------------------------+---------------+--------------------+-------------------------+--------------+
| GRANTEE                     | TABLE_CATALOG | TABLE_SCHEMA       | PRIVILEGE_TYPE          | IS_GRANTABLE |
+-----------------------------+---------------+--------------------+-------------------------+--------------+
| 'mysql.sys'@'localhost'     | def           | sys                | TRIGGER                 | NO           |
| 'Adam Smith'@'localhost'    | def           | test               | SELECT                  | NO           |
| 'Adam Smith'@'localhost'    | def           | test               | INSERT                  | NO           |
| 'Adam Smith'@'localhost'    | def           | test               | UPDATE                  | NO           |
| ...(省略)...                                                                                              |
| 'David'@'localhost'         | def           | test               | DELETE                  | NO           |
| 'mysql.session'@'localhost' | def           | performance_schema | SELECT                  | NO           |
| 'Robert'@'%'                | def           | sample             | SELECT                  | YES          |
| 'Robert'@'%'                | def           | sample             | INSERT                  | YES          |
| ...(省略)...                                                                                              |
| 'Robert'@'%'                | def           | web                | EXECUTE                 | NO           |
+-----------------------------+---------------+--------------------+-------------------------+--------------+
46 rows in set (0.00 sec)

出力結果の読み取りポイント

  • 'Adam Smith'@'localhost' には、test データベースに対して SELECT・INSERT・UPDATE・DELETE・CREATE・DROP など幅広い権限が付与されています。
  • 'Robert'@'%' は sample データベースに対して IS_GRANTABLE = YES、つまり WITH GRANT OPTION 付きの権限を持っており、他のユーザーへ権限を譲渡することも可能です。
  • mysql.sysmysql.session などの内部アカウントには、それぞれ必要最小限の権限のみが割り当てられています。

特定のユーザーの権限だけを絞り込む

すべてのユーザーではなく、特定のユーザーに付与された権限だけを確認したい場合は、WHERE句で GRANTEE を指定します。

SELECT * FROM INFORMATION_SCHEMA.SCHEMA_PRIVILEGES
WHERE GRANTEE = "'Robert'@'%'";

補足:SHOW GRANTS 文との違い

ユーザーの権限を確認する方法としては、SHOW GRANTS 文も広く使われています。

SHOW GRANTS FOR 'sample_user'@'localhost';

SHOW GRANTS は GRANT 文の形式で結果を返すため、そのままコピーして権限を再現しやすいのが特徴です。一方、INFORMATION_SCHEMA.SCHEMA_PRIVILEGES は表形式で構造化された情報を返すため、WHERE句による絞り込みや他のテーブルとの結合分析に向いています。目的に応じて使い分けるとよいでしょう。

まとめ

MySQLでユーザーに付与された権限を確認するには、SELECT * FROM INFORMATION_SCHEMA.SCHEMA_PRIVILEGES; が便利です。GRANTEE 列でユーザーを絞り込めば、特定ユーザーの権限だけを簡単に抽出できます。セキュリティ監査や権限まわりのトラブルシューティングの際に、ぜひ活用してください。

  1. MySQLでテーブルのすべてのフィールド(カラム)を表示する方法

    MySQLで特定のテーブルに含まれるすべてのフィールド(カラム)名を確認したい場合、information_schema.columns テーブルを利用する方法が便利です。table_schema にデータベース名、table_name に対象のテーブル名を指定することで、そのテーブルの全フィールドを一覧表示できます。基本の構文以下の構文を使うことで、指定したテーブルのすべてのカラム名を取得できます。select column_name as anyAliasName from information_schema.columns     where t

  2. MySQLでNULL値を1として表示・更新する方法

    MySQLでは、テーブル内のNULL値を別の値(たとえば「1」)に置き換えて扱いたい場面があります。この記事では、IFNULL関数とUPDATE文を組み合わせて、NULL値を1に変換する具体的な手順をサンプルコード付きで解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable1963 ( Counter int ); Query OK, 0 rows affected (0.00 sec) 2. レコードを挿入する INSERT文を使って、NULLを含む複数のレコードを