MySQLでCREATE USER文の書き方

MySQLでCREATE USER文の書き方

MySQLで新しいユーザーを作成するには、CREATE USER文を使用します。
CREATE USER文は、データベースに対してアクセス権を持つ新しいユーザーアカウントを作成するために使用されます。
以下では、CREATE USER文の基本的な使い方から、詳細なオプションの説明までを行います。

基本的なCREATE USER文の構文

CREATE USER文の基本的な構文は以下の通りです。

CREATE USER 'username'@'host' IDENTIFIED BY 'password';
  • 'username'は新しく作成するユーザーの名前です。
  • 'host'はユーザーが接続できるホストを指定します。

一般的には'localhost'を使用しますが、'%'を指定すると任意のホストからの接続を許可することができます。

  • 'password'はユーザーのパスワードです。

ローカルホストから接続するtest_userという名前のユーザーを作成し、そのパスワードをpasswordに設定するには、次のSQL文を使用します。

CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'password';

ユーザーのホスト指定

MySQLでは、ユーザー名とホスト名の組み合わせがユニークである必要があります。
たとえば、同じユーザー名でも異なるホストからのアクセスを許可したい場合、異なるホスト名で複数のユーザーを作成することができます。

test_userがローカルホストと任意のホストから接続できるようにする場合、以下のようにします。

CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'password';
CREATE USER 'test_user'@'%' IDENTIFIED BY 'password';

ユーザーに権限を付与する

ユーザーを作成しただけでは、そのユーザーにはまだ何の権限も付与されていません。
GRANT文を使用して、ユーザーに特定のデータベースやテーブルに対する権限を付与する必要があります。

test_userに対して、すべてのデータベースのすべてのテーブルに対するSELECT権限を付与するには、次のようにします。

GRANT SELECT ON *.* TO 'test_user'@'localhost';

さらに、権限の変更を適用するためにFLUSH PRIVILEGESを実行します。
ただし、MySQL 8.0以降ではCREATE USERやGRANTを実行することで自動的に権限が更新されるため、FLUSH PRIVILEGESは必要ありません。

ユーザーの削除

作成したユーザーを削除するには、DROP USER文を使用します。

test_userをローカルホストから削除するには、次のSQL文を使用します。

DROP USER 'test_user'@'localhost';

その他のオプション

CREATE USER文には、他にも多くのオプションがあります。
たとえば、MAX_QUERIES_PER_HOUR、MAX_CONNECTIONS_PER_HOUR、MAX_UPDATES_PER_HOUR、MAX_USER_CONNECTIONSなどのオプションを使用して、ユーザーのリソース制限を設定することができます。

1時間あたり最大10回のクエリ実行と最大5回の接続を許可するユーザーを作成するには、次のようにします。

CREATE USER 'limited_user'@'localhost' IDENTIFIED BY 'password'
WITH MAX_QUERIES_PER_HOUR 10
MAX_CONNECTIONS_PER_HOUR 5;

ユーザーのパスワードを変更する

ユーザーのパスワードを変更するには、ALTER USER文を使用します。

test_userのパスワードをnew_passwordに変更するには、次のようにします。

ALTER USER 'test_user'@'localhost' IDENTIFIED BY 'new_password';

セキュリティに関する注意点

1. 強力なパスワードを使用する:
ユーザーのパスワードは強力で推測されにくいものを選ぶべきです。
2. 最小限の権限を付与する:
セキュリティのベストプラクティスとして、ユーザーには必要最低限の権限のみを付与することが推奨されます。
3. リモートアクセスの制限:
必要ない限り、ユーザーに対してリモートからのアクセスを許可しないように設定することが望ましいです。

まとめ

CREATE USER文は、新しいユーザーをMySQLデータベースに追加するための基本的な方法です。
ホスト、認証プラグイン、リソース制限など、さまざまなオプションを使用してユーザーを詳細に設定することができます。
ユーザーを作成した後は、GRANT文を使用して必要な権限を付与することを忘れないようにしましょう。
セキュリティ上のベストプラクティスを遵守し、データベースの安全性を確保することが重要です。