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

MySQLで特定ユーザーの全権限(GRANT)を確認する方法

MySQLでは、サーバーに登録されているユーザーアカウントや、それぞれのユーザーが持つ権限(GRANT)をSQL文で簡単に確認できます。この記事では、まず全ユーザーの一覧を表示し、その後に特定のユーザーに付与されているすべての権限を確認する手順を解説します。

1. 登録されている全ユーザーとホスト名を表示する

まず、mysql.user テーブルに対してSELECT文を実行し、ユーザー名(user)とホスト名(host)の一覧を取得します。

mysql> select user,host from MySQL.user;

実行すると、以下のようにユーザーごとのホスト情報が出力されます。

+------------------+-----------+
| user             | host      |
+------------------+-----------+
| Bob              | %         |
| Charlie          | %         |
| Robert           | %         |
| User2            | %         |
| mysql.infoschema | %         |
| mysql.session    | %         |
| mysql.sys        | %         |
| root             | %         |
| @UserName@       | localhost |
| Adam             | localhost |
| Adam Smith       | localhost |
| Chris            | localhost |
| David            | localhost |
| James            | localhost |
| John             | localhost |
| John Doe         | localhost |
| Michael          | localhost |
| Mike             | localhost |
| User1            | localhost |
| am               | localhost |
| hbstudent        | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
+------------------+-----------+
23 rows in set (0.00 sec)

ここで「host」列の意味も押さえておきましょう。% は任意のホストからの接続を許可するアカウント、localhost はローカルホストからの接続のみを許可するアカウントを表します。MySQLでは同じユーザー名でも接続元ホストによって別のアカウントとして扱われるため、権限を確認する際は「ユーザー名@ホスト名」の組み合わせを正確に指定することが重要です。

2. 特定ユーザーのすべての権限を表示する

特定のユーザーに付与されている権限を確認するには、SHOW GRANTS 文を使用します。書式は次のとおりです。

SHOW GRANTS FOR 'ユーザー名'@'ホスト名';

例として、John@localhost の権限を確認してみましょう。

mysql> show grants for 'John'@'localhost';

実行結果は以下のようになります。

+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for John@localhost                                                                                                                                                                                                                                                                                                                                                              |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `John`@`localhost` |
| GRANT BACKUP_ADMIN,BINLOG_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,GROUP_REPLICATION_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SET_USER_ID,SYSTEM_VARIABLES_ADMIN,XA_RECOVER_ADMIN ON *.* TO `John`@`localhost`                                                                                                                                                                 |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.07 sec)

出力結果の読み方

この結果から、John@localhost には *.*(すべてのデータベース・すべてのテーブル)に対して、SELECT・INSERT・UPDATE・DELETEといった基本操作に加え、CREATE USER や RELOAD、SHUTDOWN など強力な管理系権限まで幅広く付与されていることがわかります。また、2行目には BACKUP_ADMIN や SYSTEM_VARIABLES_ADMIN など、MySQL 8.0で追加された動的権限(Dynamic Privileges)が表示されています。

補足:権限確認時に役立つコマンド

  • 現在ログイン中の自分の権限を確認したい場合: ホスト名を省略して SHOW GRANTS; または SHOW GRANTS FOR CURRENT_USER(); を実行します。
  • mysql.user テーブルへのアクセス権がない場合: 一般ユーザーは mysql.user を直接参照できないことがあります。その場合は管理者(rootなど)に確認を依頼してください。
  • 特定データベース単位の権限を知りたい場合: 出力内の ON *.* 以外に ON データベース名.* の行がないかも併せてチェックしましょう。

このように、SHOW GRANTS 文を使えば、ユーザーごとの権限設定をひと目で把握できます。セキュリティ監査や不要な権限の見直しの際にも活用できる基本的な操作なので、ぜひ覚えておきましょう。

  1. MySQLでカンマ区切りの値から特定の数値を含むレコードをすべて選択する方法

    MySQLで特定の数値を含むレコードを抽出するには?カンマ区切りで保存された値の中に、特定の数値が含まれているレコードをすべて取得したい場合は、concat() 関数と LIKE 演算子を組み合わせて使用します。基本の構文は以下のとおりです。select *from yourTableName where concat(,, yourColumnName, ,) like %,yourValue,%;この方法のポイント単純に LIKE %4% とすると、「14」や「40」など意図しない数値までマッチしてしまう可能性があります。そこで、列の値の前後を concat() でカンマで囲むことで、「4

  2. MySQLで特定の番号を含むレコードをすべて選択する方法|FIND_IN_SET()関数の使い方

    MySQLで、カンマ区切りの値の中に特定の番号が含まれているレコードをすべて抽出したい場合は、FIND_IN_SET() 関数を使用します。この関数は、文字列リストの中から指定した値が何番目に存在するかを返し、見つからない場合は 0 を返します。そのため、結果が 0 より大きいかどうかを条件にすることで、目的の番号を含むレコードだけを取得できます。ここでは、実際にテーブルを作成して動作を確認してみましょう。1. テーブルの作成まず、サンプル用のテーブルを作成します。mysql> create table demo73 -> ( -> interest_id v