FreeBSD 12.4 RELEASE - MySQL - パスワード設定

 クラウディア
1. 概要
2. パスワードの有効期限
3. validate_password
4. パスワードを一時的に単純化
5. パスワードを恒久的に単純化
6. validate_password 無効化

1. 概要

 パスワードに関する設定は、「my.cnf」に記述する内容もあるのですが、いささか面倒なこともあるので、ページを分けました。  ここでは、主にパスワードを単純化するような内容を書いていますが、開発時や私的につかうサーバのみに適用するようにしてください。  実際に他の人が使用するようなサーバでは、きちんとパスワードを利用するようにしないと、セキュリティ上、非常に問題があります。

2. パスワードの有効期限

 何も指定しなければ、「MySQL」のパスワードの有効期限は、デフォルトで、360日なのだそうです。  ただし、デフォルトの設定で [mysqld] セクション、28行目に

default_password_lifetime = 0
 という行があります。  これはパスワードの有効期限を無期限にする設定で、うっかり忘れると大変なことになりそうな気がします。  幸いなことに、「ports」でインストールした場合、デフォルトで上記設定になっているようです。

3. validate_password

 「validate_password」というプラグインが、「MySQL 5.6」あたりから(?)登場しています。  パスワードのチェックは、通常は「validate_password」で行うようです。  明示的にインストールすることもあるようです。  少なくとも、「FreeBSD」上の、「MySQL 8.0」では、デフォルトでインストールされています。  わたしの前ページまでの設定を行ってきた結果は、以下の通り。

mysql> SHOW GLOBAL VARIABLES LIKE 'validate%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| 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.01 sec)
 「MySQL 5.7」までは、「check_user_name」が「OFF」でしたが、「MySQL 8.0」では、「ON」になっています。  パスワード制限では、「validate_password_policy」の設定値が、あれこれ左右するようで、以下のように設定されるようです。
設定値   意味   備考
LOW パスワードの長さのみチェック
MEDIUM LOW に加えて、数字・小文字・大文字・特殊文字をそれぞれ1文字ずつ含む
STRONG MIDIUM に加えて、4文字以上の文字列が辞書ファイルの内容と一致してはならない

 パスワードの長さは、「validate_password_length」で最小文字数が定義されていますが、4より小さい値には設定できません。

4. パスワードを一時的に単純化

 パスワードを、テンポラリに、最小文字数4文字のみに設定するには、「mysql」を起動して  (パラメータの項目名が、「MySQL 5.7」までと異なっているので注意)

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行加えます。  サーバを再起動して、チェックしてみると

$ service mysql-server restart
Stopping mysql.
Waiting for PIDS: 7204.
Starting mysql.

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.31 Source distribution

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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    | ON    |
| 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 無効化

 「MySQL 5.7」では

vi /usr/local/etc/mysql/my.cnf
 で

[mysqld]				←	のセクションに

validate_password               = OFF
 を記述すれば、「validate_password」を無効化できていましたが、「MySQL 8.0」では、上記の記述はエラーで、「mysql-server」が起動できません。  これは、現在(2022年12月19日)、調査中です。
earthcar(アースカー)