免責事項
この記事はTodd Farmer氏によるMySQL Server Blogの投稿(2015/6/24)をユーザが翻訳したものであり、Oracle公式の文書ではありません。
MySQL 5.7より前は、CREATE USERコマンドにはたくさんの制約があった。
- 認証プラグインとパスワードの両方を設定する方法がない
- ユーザーを無効化する方法がない
- ユーザーに対するリソース制限を行う方法がない
- デフォルト以外のパスワード期限切れポリシを設定する方法がない
- SSL/x509を必須とする方法がない
これらの全ては他の方法で実現することができたが、通常GRANTコマンドなどの他の構文を使う必要があった。 MySQL 5.7.6からは、これらは新しくかつ改良されたCREATE USERコマンドで実現できる。
パスワードと認証プラグイン
セキュリティーの観点から、最も私にとって重要なのは、ユーザーアカウントをデフォルト以外の認証プラグイン(例えばsha256_papssword)を利用し、かつ空でないパスワードを持つユーザーを作成できることだ。
mysql> CREATE USER new@localhost
-> IDENTIFIED WITH sha256_password
-> BY 'pwd';
Query OK, 0 rows affected (0.00 sec)
パスワードは後続する構文で指定可能だが、ユーザーに最初の段階でパスワードがないアカウントを作ることを強いるのは確実にセキュリティー上のバッドプラクティスである。
ユーザーの無効化
これまでにエンドユーザーからは直接アクセスできないアカウントのユースケースについて述べてきた。 このユースケースをサポートする為に、MySQL 5.6でmysql_no_login認証プラグインも実装した。 今や、はるかに良い方法がある - ただ単純にアカウントをロック状態にすればよい。
mysql> CREATE USER d@localhost ACCOUNT LOCK;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
D:\mysql-5.7.7-rc-winx64>bin\mysql -ud -P3309
ERROR 3118 (HY000): Access denied for user 'd'@'localhost'. Account is locked.
その他の新たなアカウントのオプション
もう1つの便利な機能追加は、新しいアカウントを標準以外のパスワード期限切れポリシで作成することができるものである。
mysql> CREATE USER p@localhost
-> IDENTIFIED BY 'pwd'
-> PASSWORD EXPIRE INTERVAL 1 DAY;
Query OK, 0 rows affected (0.00 sec)
同じように、SSLを必須とした新規アカウントを作成するのに、もはや複数のクエリを発行する必要がなくなった。
mysql> CREATE USER s@localhost
-> REQUIRE SSL;
Query OK, 0 rows affected (0.00 sec)
また、新規ユーザーに対するリソース制限についても同様に指定できる。
myql> CREATE USER r@localhost
-> WITH MAX_QUERIES_PER_HOUR 5;
Query OK, 0 rows affected (0.00 sec)
これは 大いに ユーザーアカウント作成の操作やスクリプトを簡易化するだろう。 これらの切望していた改良を我々に提供してくれたSatish氏とこれに関わった他の全てのメンバに大いに感謝! 新しい構文について何か疑問点があれば、ここにコメントして欲しい。 関連するバグを見つけたら、またここのコメントで我々に知らせ、バグ表をオープンしていただきたい。 あるいはサポートご契約のお客様である場合は、サポートチケットをオープンし、知らせて欲しい。
今のところは以上である。MySQLを使ってくれてありがとう!