アジェンダ
MySQLには、セキュリティ強化のためのパスワードポリシーがデフォルトで設定されています。これにより、ユーザーが強力なパスワードを使用するよう促す仕組みが提供されています。ただ、特定の状況下ではパスワードポリシーを緩和したり、一時的に無効化する必要がある場合があったりします。(ポリシーを一時的に緩和した場合でも、セキュリティの観点から元に戻さなくてはいけなかったりしますが。)
本記事では、MySQLのパスワードポリシーの詳細と、その変更方法について簡単にまとめます。
パスワードポリシーの確認
MySQLにはパスワードの強度を制御するために、validate_password
プラグインが使用されています。デフォルトで有効になっているこのプラグインは、パスワードの長さや複雑さなどの要件を設定します。
現在のポリシーを確認する方法
MySQLにログインした後、次のコマンドを実行することで現在のパスワードポリシーを確認できます。
SHOW VARIABLES LIKE 'validate_password%';
次のような設定が表示されます:
-
validate_password.policy
: ポリシーの強度レベル(LOW, MEDIUM, STRONG) -
validate_password.length
: パスワードの最小長 -
validate_password.mixed_case_count
: 大文字と小文字の組み合わせの必要数 -
validate_password.number_count
: 数字の必要数 -
validate_password.special_char_count
: 特殊文字の必要数
パスワードポリシーの強度設定
ポリシーレベル
MySQLのパスワードポリシーは、次の3つのレベルに設定できます。
-
LOW
: パスワードの長さのみが制約(デフォルトは4文字以上) -
MEDIUM
: パスワードの長さに加え、数字、特殊文字、大文字・小文字が必要(デフォルト) -
STRONG
: より厳しいルールが適用され、パスワードには辞書攻撃防止のチェックも含まれます
例: ポリシーレベルの変更
例えば、パスワードの強度を緩和するために、次のコマンドでポリシーをLOW
に設定できます。
SET GLOBAL validate_password.policy = LOW;
パスワードの長さや要件を変更する
ポリシーに加えて、パスワードの長さや文字の要件も設定できます。以下のコマンドでこれらの設定を変更できます。
パスワードの最小長の設定
SET GLOBAL validate_password.length = 6;
特殊文字や数字の要件を変更
SET GLOBAL validate_password.special_char_count = 1;
SET GLOBAL validate_password.number_count = 1;
これらの設定を変更すると、MySQLユーザーが作成する新しいパスワードに対して要件が適用されます。
パスワードのリセット
もしroot
ユーザーのパスワードが分からない場合は、次の手順でパスワードをリセットできます。なお、この操作にはMySQLをセーフモードで起動し、認証をスキップする必要があります。
パスワードリセット手順
- MySQLを停止
sudo systemctl stop mysql
- セーフモードで起動
sudo mysqld_safe --skip-grant-tables &
- MySQLに接続
mysql -u root
root
ユーザーのパスワードリセット
セーフモードでログイン後、次のコマンドでパスワードをリセットします。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
- MySQLを再起動
sudo systemctl start mysql
パスワードポリシーを元に戻す
パスワードをリセットした後は、セキュリティを保つためにポリシーを元に戻すことをお勧めします。
SET GLOBAL validate_password.policy = MEDIUM;
パスワードポリシーを無効にする
特定の環境では、パスワードポリシーを完全に無効化する必要がある場合もあります。これを行うには、次のコマンドでvalidate_password
プラグインを無効化します。
UNINSTALL PLUGIN validate_password;
無効化すると、今後パスワードの強度に関する制約がなくなります。