ユーザーの一覧や設定された権限などユーザーに関する情報を取得する
MySQL で作成済みのユーザーの一覧を取得したり、ユーザー毎に設定されている各項目の値を確認する方法について解説します。
(Last modified: )
作成済みのユーザー一覧を確認する
MySQL ではユーザーを作成すると mysql データベースの中の user テーブルに格納されます。
例として次のようなユーザーを作成しました。
create user shika@localhost identified by 'deer';
作成したユーザーに関する情報を取得するには mysql データベースの user テーブルから情報を取得します。次のように実行してください。
select * from mysql.user where user='shika'\G
user テーブルには数多くのカラムがあり、ユーザー毎に非常に多くの値が格納されていることが分かります。
user テーブルのカラムの中でもよく参照されるのは ユーザー名のホスト部分以外が格納されている user カラムとユーザー名のホスト部分が格納されている host です。他にも使用している認証プラグインが格納されている plugin やパスワードの有効期限に関する項目、ユーザーに付与されている権限に関する項目などがあります。
それでは mysql.user テーブルからすべてのデータを取得して作成済みのユーザー一覧を確認してみます。すべてのカラムの値を取得すると見にくくなるので user カラムと host カラムの情報を取得します。
select user, host from mysql.user;
作成済みのユーザー一覧を取得することができました。
現在接続しているユーザーを確認する
現在 MySQL に接続しているユーザーを確認するには user() 関数と current_user() 関数を使います。簡単にいうと user() 関数は接続時に指定したユーザー名とホストを返します。 current_user() 関数は実際に認証されたユーザー名とホストを返します。通常この二つは同じ結果を返しますが、接続時に指定したユーザー名ではないユーザーとして認証がされてしまうケースがあるようです(匿名ユーザーがらみでそうなるようです)。
MySQL の中で参照する場合に重要なのは実際に認証されたユーザー名とホスト名なので current_user() 関数の値を取得します。今回は例として user() 関数と current_user() 関数の両方の値を取得してみます。
select user(), current_user();
現在は root@localhost ユーザーで MySQL に接続していたので、どちらの関数も同じ root@localhost を返しました。
ユーザーが作成された時のCREATE USER文を確認する
指定したユーザーを作成した時の CREATE USER 文を確認する方法です(実際に実行された SQL そのものではなく、同じユーザーを作成する場合に必要となる SQL 文です)。 SHOW CREATE USE 文を使います。書式は次の通りです。
SHOW CREATE USER user
それでは先ほど作成した shika@localhost ユーザーについて確認してみます。次のように実行してください。
show create user shika@localhost¥G
少し長いので改行を入れて表示してみます。
CREATE USER 'shika'@'localhost' IDENTIFIED WITH 'caching_sha2_password' AS 'ハッシュかされたパスワード' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT
実際に実行した SQL 文は次の通りなので、ユーザー名とパスワード以外はデフォルトで使用される値が設定されているようです。
create user shika@localhost identified by 'deer';
このように CREATE USER 文を使うことで指定したユーザーがどのように作成されたのかを確認することができます。
ユーザーに設定されている権限を確認する
作成したユーザーが MySQL でデータベースを作成したり他のユーザーを作成するには必要となる権限が設定されている必要があります。 MySQL で設定可能な権限の一覧や権限の設定方法は別のページで解説しますが、ここではユーザーに設定された権限を確認する方法を確認します。
ユーザーに設定した権限を確認するには SHOW GRANTS 文を使います。書式は次の通りです。
SHOW GRANTS FOR user
ユーザー( user )に設定されている権限を表示します。
では先ほど作成した shika@localhost ユーザーに設定されている権限を確認します。次のように実行してください。
show grants for shika@localhost;
詳しい説明はここでは行いませんが、 shika@localhost ユーザーには何も権限が設定されていません。
次に以前に作成して一部権限を設定した kuma@localhost ユーザーに設定されている権限を確認します。次のように実行してください。
show grants for kuma@localhost;
mydb データベースに対するすべての権限が設定されています。
-- --
MySQL で作成済みのユーザーの一覧や、ユーザー毎に設定されている各項目の値を確認する方法について解説しました。
( Written by Tatsuo Ikura )

著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。