はじめに
MySQLでは、パスワードポリシーが高く設定されているため、
デフォルトでは安易なパスワードが設定できないようになっている。
MySQLのパスワードポリシー変更記事は様々なものがあるが、バージョンなど環境により、若干ことなったりするので、
CentOS 7.6でMySQL8.0の場合で、パスワードのポリシーを変更し、4文字パスワードを許可するように変更する手順を記載する。
パスワードのポリシーを変更する
$ vi /etc/my.conf
# 下記の設定を追加する
validate_password.policy=LOW
validate_password.length=4
validate_password.check_user_name=OFF
セーフモード起動
$ systemctl stop mysqld
$ systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
$ systemctl start mysqld
パスワードポリシーの確認
下記のように表示されることを確認する。
$ mysql -u root -e "SHOW variables like '%validate_password%';"
+--------------------------------------+-------+
| 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 |
+--------------------------------------+-------+
表示されない場合、下記のコマンドで再設定する。
$ mysql -u root -e "SET GLOBAL validate_password.policy = LOW;"
$ mysql -u root -e "SET GLOBAL validate_password.length = 4;"
$ mysql -u root -e "SET GLOBAL validate_password.check_user_name = OFF;"
rootのパスワードリセット
$ mysql -u root -e "UPDATE mysql.user SET authentication_string=null WHERE User='root';"
セーフモード解除
$ systemctl stop mysqld
$ systemctl set-environment MYSQLD_OPTS=""
$ systemctl start mysqld
パスワードの再設定
パスワードをpassに設定。
$ mysql -u root
> ALTER USER 'root'@'localhost' IDENTIFIED BY 'pass';
※ MySQL 5系の場合は、下記のコマンドで変更可能。
> UPDATE mysql.user SET authentication_string = PASSWORD('pass') WHERE User = 'root';"
設定したパスワードが使用できることを確認
$ mysql -u root -ppass -e "select host,user from mysql.user;"