CREATE USER文(MySQL)

MySQL

https://dev.mysql.com/doc/refman/8.0/ja/create-user.html を調べたのでメモ

文の全体

CREATE USER [IF NOT EXISTS]
    user [auth_option] [, user [auth_option]] ...
    DEFAULT ROLE role [, role ] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH resource_option [resource_option] ...]
    [password_option | lock_option] ...
    [COMMENT 'comment_string' | ATTRIBUTE 'json_object']

これを1行ずつ見ていく

[IF NOT EXISTS]

CREATE USER文は存在するユーザー名のユーザーを作成しようとするとエラーになるが、
IF NOT EXISTS がついているとエラーにならず、存在しない場合のみ作成されるようになる

user [auth_option] [, user [auth_option]] …

user にはユーザー名を設定する

auth_option は、パスワード周りの設定ができる。

設定内容は

auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED BY RANDOM PASSWORD
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
  | IDENTIFIED WITH auth_plugin AS 'auth_string'
}

となっており、

IDENTIFIED BY ‘auth_string’

で、任意のパスワードを設定しつつユーザー作成するか、

IDENTIFIED BY RANDOM PASSWORD

で、MySQLにランダムなパスワードを生成してもらいつつユーザー作成する、ということもできる

ランダムで生成されるパスワードの長さは generated_random_password_length で制御されており、デフォルトは20文字

IDENTIFIED WITH auth_plugin
IDENTIFIED WITH auth_plugin BY ‘auth_string’
IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
IDENTIFIED WITH auth_plugin AS ‘auth_string’

では、認証プラグインを指定しつつパスワードを設定することができる

認証プラグインの詳細は https://dev.mysql.com/doc/refman/8.0/ja/authentication-plugins.html にある

デフォルトの認証プラグインは default_authentication_plugin に設定されているもので、
最初は caching_sha2_password が設定されている

また最後の「AS ‘auth_string’」の構文は、認証プラグインに沿った形でそのままパスワードを設定できる (ハッシュが必要ならハッシュ化されたパスワードを指定できる)

DEFAULT ROLE role [, role ] …

MySQLにログイン時に有効になるデフォルトロールを設定できる

ロールの付与自体は GRANT文でできるが、それだけだとログイン時に有効になるようにはなっておらず、DEFAULT ROLE に設定されて初めてログイン時に有効になる

[REQUIRE {NONE | tls_option [[AND] tls_option] …}]

MySQLログイン時のセキュリティ要件を設定できる

NONE は要件なしのときに設定する (デフォルトはこれ)

tls_option には以下の内容を設定できる

tls_option: {
   SSL
 | X509
 | CIPHER 'cipher'
 | ISSUER 'issuer'
 | SUBJECT 'subject'
}

証明書に詳しくないので割愛するが、SSL接続を必須としたり、
特定の認証局の証明書でないとだめ、といった設定ができる

[WITH resource_option [resource_option] …]

下記の resource_option を指定することにより、ログイン時のDBリソース使用に制限をもたせることができる

resource_option: {
    MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
}

MAX_QUERIES_PER_HOUR count

1時間に同じユーザーが実施できるクエリ数を制限できる

MAX_UPDATES_PER_HOUR count

1時間に同じユーザーが実施できるDMLの数を制限できる

MAX_CONNECTIONS_PER_HOUR count

1時間で同じユーザーが接続できる数を制限できる

MAX_USER_CONNECTIONS count

同じユーザーでの同時接続数を制限できる

[password_option | lock_option] …

password_option

パスワードの管理用オプション

password_option: {
    PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]
  | PASSWORD HISTORY {DEFAULT | N}
  | PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
  | PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
  | FAILED_LOGIN_ATTEMPTS N
  | PASSWORD_LOCK_TIME {N | UNBOUNDED}
}

PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]

パスワードの期限に関するオプション

PASSWORD EXPIRE のみだと、ユーザーのパスワードは期限切れ状態で登録される

DEFAULT だと default_password_lifetime で設定された日数で期限切れにする
0の場合は期限切れにならない (デフォルトはこれ)

NEVER は、期限切れなし

INTERVAL N DAY で、任意の日数を指定することもできる

PASSWORD HISTORY {DEFAULT | N}

以前設定した何回分のパスワードは設定不可とするか

DEFAULT の場合 password_history の値を見る (デフォルトは 0 で、制限なし)

N で任意の回数を指定することもできる

PASSWORD REUSE INTERVAL {DEFAULT | N DAY}

今後何日間は同じパスワードの設定を不可とするか

DEFAULT の場合 password_reuse_interval の値を見る (デフォルトは 0 で、制限なし)

N で任意の日数を指定することもできる

PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]

パスワード変更時に今のパスワード入力を必要とするか

PASSWORD REQUIRE CURRENT のみの指定だと必須になる

DEFAULT をつけると、password_require_current の値を見る (デフォルトは OFF)

OPTIONAL だと任意になり、今のパスワードを入力しなくてもOKになる

FAILED_LOGIN_ATTEMPTS N

パスワードを何連続で失敗したらアカウントロックするか

0の場合この制限を行わない

PASSWORD_LOCK_TIME {N | UNBOUNDED}

パスワード連続失敗でのロック時に何日間ロックするか

0の場合ロックされなくなる

UNBOUNDED だと無期限のロックになる

lock_option

アカウントロック状態のユーザーとするか

lock_option: {
    ACCOUNT LOCK
  | ACCOUNT UNLOCK
}

[COMMENT ‘comment_string’ | ATTRIBUTE ‘json_object’]

COMMENT で生成するユーザーに対するコメントを設定できる

ATTRIBUTE はJSON形式で、そのユーザーに対する任意の属性を設定できる

コメント

タイトルとURLをコピーしました