1. 概要
パスワードに関する設定は、「my.cnf」に記述する内容もあるのですが、いささか面倒なこともあるので、ページを分けました。
ここでは、主にパスワードを単純化するような内容を書いていますが、開発時や私的につかうサーバのみに適用するようにしてください。
実際に他の人が使用するようなサーバでは、きちんとパスワードを利用するようにしないと、セキュリティ上、非常に問題があります。
2. パスワードの有効期限
何も指定しなければ MySQL のパスワードの有効期限はデフォルトで 360日なのだそうです。
ただし、デフォルトの設定で [mysqld] セクション、32行目に
default_password_lifetime = 0
という行があります。
これはパスワードの有効期限を無期限にする設定で、うっかり忘れると大変なことになりそうな気がします。
幸いなことに ports でインストールした場合、デフォルトで上記設定になっているようです。
3. validate_password
「validate_password」というプラグインが、「MySQL 5.6」あたりから(?)登場しています。
パスワードのチェックは、通常は「validate_password」で行うようです。
明示的にインストールすることもあるようです。
少なくとも、「FreeBSD」上の、「MySQL 5.7」では、デフォルトでインストールされています。
以下、下記のサイトを参考にさせていただきました。
「MySQL の validate_password のルールをゆるくする - Qiita」
「Mysql 5.7* パスワードを Policy に合わせるとめんどくさい件について - Qiita」
「MySQL(5.7)メモ - Qiita」
デフォルトの設定値は、以下の通り。
mysql> SHOW GLOBAL VARIABLES LIKE 'validate%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
中でも「validate_password_policy」の設定値が、あれこれ左右するようで、以下のように設定されるようです。
パスワードの長さは、「validate_password_length」で最小文字数が定義されていますが、4より小さい値には設定できません。
4. パスワードを一時的に単純化
パスワードを、テンポラリに、最小文字数4文字のみに設定するには、「mysql」を起動して
SET GLOBAL validate_password_length = 4;
SET GLOBAL validate_password_policy = LOW;
このまま、例えば、「root」パスワードを変更するのであれば
SET PASSWORD FOR root@localhost=password('パスワード');
で、変更します。
このままの状態で、「CREATE USER」なり「ALTER USER」なりで、パスワードを設定・変更もできます。
「validate_password」の値は、サーバを再起動するとご破算になりますが、設定したパスワードは有効なままです。
5. パスワードを恒久的に単純化
前項の状態を恒久的に設定するには
vi /usr/local/etc/mysql/my.cnf
で
[mysqld] ← のセクションに
validate_password_length = 4
validate_password_policy = LOW
と2行加えます。
注意すべきは、この状態で、文法チェックしてみようとすると
> /usr/local/libexec/mysqld --verbose --help > /dev/null
2020-01-16T05:27:49.238768Z 0 [ERROR] unknown variable 'validate_password_length=4'
2020-01-16T05:27:49.262618Z 0 [ERROR] Aborting
エラーになっちゃうのです。
これは、サーバ自体が起動していない状態でチェックするので、「validate_password」プラグインが読みこまれていないので、エラーと解釈してしまうものと思われます。
実際、サーバを再起動して、チェックしてみると
> service mysql-server restart
Stopping mysql.
Waiting for PIDS: 17473.
Starting mysql.
> mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28-log Source distribution
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW GLOBAL VARIABLES LIKE 'validate%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 4 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
7 rows in set (0.01 sec)
ちゃんと再起動するし、設定値も反映されているのだ。
6. validate_password 無効化
vi /usr/local/etc/mysql/my.cnf
で
[mysqld] ← のセクションに
validate_password = OFF
を記述すれば、「validate_password」を無効化できます。
アンインストールするより楽ちんですな。
上記の設定の代わりに
default_authentication_plugin = mysql_native_password ← NG
と書くような記事もありましたが、うまく機能できませんでした。
極端な、話をすれば、「validate_password = OFF」を設定していれば
SET PASSWORD FOR root@localhost=password('');
と、パスワードなしも設定できます。
「update user set authentication_string='' where User='root';」てなコマンドで、「root」パスワードをなしにする記事もありましたが、実行すると
ERROR 1046 (3D000): No database selected
と怒られちゃいました。
データベースを選択していないと設定できない???
今回調べたのは、このあたりまでですわ(あ~、「FreeBSD 12.1 RELEASE」の頃のまま)。