ユーザーの一覧や設定された権限などユーザーに関する情報を取得する
MySQL で作成済みのユーザーの一覧を取得したり、ユーザー毎に設定されている各項目の値を確認する方法について解説します。
(Last modified: )
作成済みのユーザー一覧を確認する
MySQL ではユーザーを作成すると mysql データベースの中の user テーブルに格納されます。作成済みのユーザーの一覧を取得するには mysql.user テーブルからデータを取得します。次のように実行してください。
それでは mysql.user テーブルからすべてのデータを取得して作成済みのユーザー一覧を確認してみます。
select user, host from mysql.user;
※ すべてのカラムの値を取得すると見にくくなるので user カラムと host カラムの値だけを取得しています。1
作成済みのユーザー一覧を取得することができました。現在 6 つのユーザーが作成されています。 mysql. で始まるユーザーは自動で作成されているユーザーです。
特定のユーザーに関する情報を取得するには mysql データベースの user テーブルから情報を取得します。例えば suzuki で始まるユーザーに関する情報を取得するには次のように実行してください。
select * from mysql.user where user='suzuki'\G
user テーブルには数多くのカラムがあり、ユーザー毎に非常に多くの値が格納されていることが分かります。
user テーブルのカラムの中でもよく参照されるのは ユーザー名のホスト部分以外が格納されている user カラムとユーザー名のホスト部分が格納されている host です。他にも使用している認証プラグインが格納されている plugin やパスワードの有効期限に関する項目、ユーザーに付与されている権限に関する項目などがあります。
現在接続しているユーザーを確認する
現在 MySQL に接続しているユーザーを確認するには user() 関数と current_user() 関数を使います。簡単にいうと user() 関数は接続時に指定したユーザー名とホストを返します。 current_user() 関数は実際に認証されたユーザー名とホストを返します。通常この二つは同じ結果を返しますが、接続時に指定したユーザー名ではないユーザーとして認証がされてしまうケースがあるようです(匿名ユーザーがらみでそうなるようです)。
MySQL の中で参照する場合に重要なのは実際に認証されたユーザー名とホスト名なので current_user() 関数の値を取得します。今回は例として user() 関数と current_user() 関数の両方の値を取得してみます。
select user(), current_user();
現在は root@localhost ユーザーで MySQL に接続していたので、どちらの関数も同じ root@localhost を返しました。
それではいったん MySQL から切断したあとで、 tanaka@localhost ユーザーで MySQL に接続してみます。
あらためて接続しているユーザーを確認してみます。
select user(), current_user();
どちらの関数も現在接続中の tanaka@localhost を返しました。
ユーザーが作成された時のCREATE USER文を確認する
指定したユーザーを作成した時の CREATE USER 文を確認する方法です(実際に実行された SQL そのものではなく、同じユーザーを作成する場合に必要となる SQL 文です)。 SHOW CREATE USE 文を使います。書式は次の通りです。
SHOW CREATE USER user
それでは作成済みの tanaka@localhost ユーザーについて確認してみます。次のように実行してください。
show create user tanaka@localhost\G
少し長いので改行を入れて表示してみます。
CREATE USER `tanaka`@`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 tanaka@localhost identified by 'xxxx';
このように CREATE USER 文を使うことで指定したユーザーがどのように作成されたのかを確認することができます。
なお先ほど表示されたユーザーに関する値の意味を簡単に解説します。
REQUIRE NONE
特定のセキュリティ要件が必要なく、暗号化されていない接続でもログインできます。
PASSWORD EXPIRE DEFAULT
パスワードの有効期限はデフォルトです。
ACCOUNT UNLOCK
ユーザーアカウントをロック解除状態に設定します。ロック解除されているアカウントは MySQL に接続することができます。
PASSWORD HISTORY DEFAULT
過去のパスワード履歴の管理をデフォルトに設定します。過去に使用したことのあるパスワードの履歴をどれだけ保持するかの設定です。
PASSWORD REUSE INTERVAL DEFAULT
パスワードの再利用間隔をデフォルトに設定します。一定期間、使用したことのあるパスワードを再使用することを防止するための設定です。
PASSWORD REQUIRE CURRENT DEFAULT
パスワードの変更時に現在のパスワードを要求する設定をデフォルトに設定します。現在のパスワードの入力が必要となります。
ユーザーに設定されている権限を確認する
作成したユーザーが MySQL でデータベースを作成したり他のユーザーを作成するには必要となる権限が設定されている必要があります。 MySQL で設定可能な権限の一覧や権限の設定方法は別のページで解説しますが、ここではユーザーに設定された権限を確認する方法を確認します。
ユーザーに設定した権限を確認するには SHOW GRANTS 文を使います。書式は次の通りです。
SHOW GRANTS FOR user
ユーザー( user )に設定されている権限を表示します。
では先ほど作成した tanaka@localhost ユーザーに設定されている権限を確認します。次のように実行してください。
show grants for tanaka@localhost;
結果として次のように表示されました。
GRANT USAGE ON *.* TO `tanaka`@`localhost`
詳しくは別のページで解説しますが、 USAGE 権限は、特定の操作を許可しない「空の権限」のことで、 *.* は、すべてのデータベースとすべてのテーブルのことです。つまり tanaka@localhost はすべてのデータベースとテーブルで何も権限が与えられていないことを表しています。
-- --
MySQL で作成済みのユーザーの一覧や、ユーザー毎に設定されている各項目の値を確認する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。