LoginSignup
4
0

More than 3 years have passed since last update.

MySQL8.0.18でランダムパスワードによるユーザ生成を試す

Last updated at Posted at 2019-10-15

2019/10/14に、MySQL8.0系の最新バージョンである8.0.18がリリースされました。
https://mysqlserverteam.com/the-mysql-8-0-18-maintenance-release-is-generally-available/

"Maintenance Release"と銘打たれていますが、最早いつも通り多くの新機能が盛り込まれており、今回の目玉としては

  • Hash Joinのサポート
  • EXPLAIN ANALYZE(実際のクエリ実行に即した、より詳細な実行計画の出力)

などが挙げられます。
その中で、比較的地味ではありますが新たに追加されたランダムパスワードによるユーザ生成を試したいと思います。

ランダムパスワードによるユーザ生成について

以下の構文により、ランダムパスワードによるユーザ生成を実行できます。

CREATE USER user IDENTIFIED BY RANDOM PASSWORD;

また、以下の構文により、既存ユーザのランダムパスワードによるパスワード変更を実行できます。

ALTER USER user IDENTIFIED BY RANDOM PASSWORD;
SET PASSWORD [FOR user] TO RANDOM;

試してみた

実際に試してみます。

# mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.18 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

...

mysql> CREATE USER hoge@localhost IDENTIFIED BY RANDOM PASSWORD;
+------+-----------+----------------------+
| user | host      | generated password   |
+------+-----------+----------------------+
| hoge | localhost | EfHaU:q+,GvXd3g_g1b: |
+------+-----------+----------------------+
1 row in set (0.01 sec)

ユーザを作成した瞬間に、"generated password"として生成されたパスワードがドカッと表示されます。

上記ユーザでログインしてみます。

# mysql -u hoge -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.18 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

...

mysql> show grants;
+------------------------------------------+
| Grants for hoge@localhost                |
+------------------------------------------+
| GRANT USAGE ON *.* TO `hoge`@`localhost` |
+------------------------------------------+
1 row in set (0.00 sec)

当然ですが、出力されたパスワードでログインできます。

ALTER USERも試してみます。

mysql> ALTER USER hoge@localhost IDENTIFIED BY RANDOM PASSWORD;
+------+-----------+----------------------+
| user | host      | generated password   |
+------+-----------+----------------------+
| hoge | localhost | NqZ(udGqTnkTKB.D6SrI |
+------+-----------+----------------------+
1 row in set (0.02 sec)

ALTERでも概ね一緒です。

コマンドラインで-eオプションを使っても以下のように出力されます。

# mysql -uroot -e'CREATE USER fuga@localhost IDENTIFIED BY RANDOM PASSWORD'
+------+-----------+----------------------+
| user | host      | generated password   |
+------+-----------+----------------------+
| fuga | localhost | K]T6eu7dPhDR[i++,9WE |
+------+-----------+----------------------+

標準出力にパイプするとタブ区切りでの出力になるので、以下のようなコマンドでパスワードのみ出力することができます。

# mysql -uroot -s -e'CREATE USER piyo@localhost IDENTIFIED BY RANDOM PASSWORD' | awk '{print $NF}'
pnx]txV0x;oxL@cg]u,k

雰囲気的に、 validate_password.policy=MEDIUM の「文字種」(数値、アルファベット大文字および小文字、特殊文字の4種すべてを含む)は満たすように生成されるようです。が、 validate_password.length はどれだけ高い値を設定しても(最大100ですが)無視して文字列が生成されるようです。
(追記)公式ドキュメントに記載がありますが、 validate_password コンポーネントの設定には影響されないとのことです。

mysql> set global validate_password.length=100;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE USER foo@localhost IDENTIFIED BY RANDOM PASSWORD;
+------+-----------+----------------------+
| user | host      | generated password   |
+------+-----------+----------------------+
| foo  | localhost | hDn[u)mlb.kE:5J*T7f[ |
+------+-----------+----------------------+
1 row in set (0.02 sec)

上記で生成されたパスワードを手動設定するとエラーが返ってきます。(正常な動作)

mysql> CREATE USER bar@localhost IDENTIFIED BY 'hDn[u)mlb.kE:5J*T7f[';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

(10/16追記)ランダムパスワードの文字列長について

生成されるランダムパスワードの文字列長は generated_random_password_length というシステム変数によって制御されており、デフォルトでは20となっているため必ず20文字のパスワードが生成されるようです。
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_generated_random_password_length

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0