MySQLのERROR 1819 (HY000): Your password does not satisfy the current policy requirementsを修正する

beginner🗄️ MySQL2026-06-02| MySQL 5.7+、MySQL 8.0+、Ubuntu/Debian/CentOS/RHEL、mysql_secure_installation実行後にも発生

Error Message

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
#mysql#パスワード#セキュリティ#mysql8

何が起きたのか

ALTER USERCREATE USER、または SET PASSWORD を実行すると、MySQLが次のエラーを返します:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

これは特に、MySQLの新規インストール直後 — mysql_secure_installation を実行して validate_password プラグインを有効化した場合に発生しやすいエラーです。設定しようとしたパスワードは文法的には正しいSQLですが、MySQLのパスワードポリシーによってブロックされています。

MySQLがパスワードを拒否する理由

MySQL 5.7で validate_password がプラグインとして導入されました。MySQL 8.0ではコンポーネントに昇格されています。いずれの場合も、有効化されている場合はパスワード変更のたびに最低強度要件に照らして検証が行われます。

ポリシーレベルは3種類あります:

  • LOW — 長さのみチェック(デフォルト:8文字)
  • MEDIUM — 長さ+大文字+小文字+数字+特殊文字
  • STRONG — MEDIUMの条件すべて+辞書ファイルに含まれていないこと

MySQL 8をインストールしてセキュアインストールウィザードを実行した場合、ポリシーがMEDIUMまたはSTRONGに設定されている可能性が高いです。

ステップ1:現在のポリシーを確認する

rootとしてログインし、以下を実行します:

SHOW VARIABLES LIKE 'validate_password%';

MySQL 8.0の出力は次のようになります:

+-------------------------------------------------+--------+
| 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      |
+-------------------------------------------------+--------+

MySQL 5.7では、変数名はドットではなくアンダースコアを使います:validate_password_policyvalidate_password_length などです。

これで何が問題なのかが正確にわかります。

即時対応:ポリシーに準拠したパスワードを使用する

最も手早い方法 — 現在のポリシーを満たすパスワードを選ぶことです。デフォルト設定でMEDIUMポリシーの場合、パスワードに必要な条件は次のとおりです:

  • 8文字以上
  • 大文字が1文字以上
  • 小文字が1文字以上
  • 数字が1文字以上
  • 特殊文字が1文字以上(!@#$%^&* など)

例:MyP@ssw0rd! — 見栄えは悪いですが、テスト用には機能します。本番環境ではランダムなパスワードを使用してください。私は ToolCraftのパスワードジェネレーター を使って、ポリシーに準拠したランダムパスワードを即座に生成しています — ブラウザ上で動作し、どこにも送信されません。

コマンドを実行する前に、パスワードが通過するか確認します:

SELECT VALIDATE_PASSWORD_STRENGTH('YourPasswordHere');

0〜100の値が返されます。50以上でMEDIUMポリシーに合格し、STRONGには100が必要です。

次にパスワードを適用します:

ALTER USER 'youruser'@'localhost' IDENTIFIED BY 'YourStr0ng!Pass';

恒久的な対応:ポリシーを用途に合わせて調整する

ローカルの開発環境やステージング環境で使用している場合、STRONGポリシーは過剰です。LOWに下げましょう:

-- MySQL 8.0
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;

-- MySQL 5.7
SET GLOBAL validate_password_policy = LOW;
SET GLOBAL validate_password_length = 6;

これらの変更は即時に反映されますが、MySQLを再起動すると元に戻ります。永続化するには、MySQLの設定ファイルに追記します — Ubuntu/Debianでは /etc/mysql/mysql.conf.d/mysqld.cnf、RHEL/CentOSでは /etc/my.cnf です:

[mysqld]
validate_password.policy = LOW
validate_password.length = 6

その後、再起動します:

sudo systemctl restart mysql

オプション:validate_passwordを完全に無効化する

外部アクセスのないローカル専用の開発マシンであれば、コンポーネントをアンインストールして検証を完全にスキップできます:

-- MySQL 8.0 (コンポーネント)
UNINSTALL COMPONENT 'file://component_validate_password';

-- MySQL 5.7 (プラグイン)
UNINSTALL PLUGIN validate_password;

ポリシーによる制限がなくなります。任意のパスワードを設定できます。

MySQL 8.0で後から再有効化する場合:

INSTALL COMPONENT 'file://component_validate_password';

確認

ポリシーの変更が適用されましたか?反映されているか確認します:

SHOW VARIABLES LIKE 'validate_password%';

次に、設定するパスワードのスコアを確認します:

SELECT VALIDATE_PASSWORD_STRENGTH('yournewpassword');

実際の ALTER USER または CREATE USER コマンドを実行します。今度はERROR 1819が出なければ完了です。

よくある落とし穴:ドットとアンダースコアの混同

MySQL 8.0はドット記法(validate_password.policy)を使います。MySQL 5.7はアンダースコア(validate_password_policy)を使います。混同すると ERROR 1193: Unknown system variable が発生し、最初のエラーに加えて2つ目のエラーが重なります。コマンドをコピーする前にバージョンを確認してください:

SELECT VERSION();

本番環境でのヒント

本番環境では validate_password を無効化しないでください。MEDIUMポリシーが適切なバランスです — 辞書ファイルを必要とせず、弱いパスワードをブロックできます。すべてのサービスアカウントにポリシー準拠のパスワードを生成し、設定ファイルではなくシークレットマネージャー(Vault、AWS Secrets Manager)に保存してください。

バリデーションに失敗するフォーマットを何度も試すのはすぐに面倒になります。設定可能なジェネレーターをブックマークしておきましょう — ToolCraftのジェネレーター では文字数と使用文字を細かく指定できるため、出力されるパスワードが必ず一発でポリシーを通過します。

Related Error Notes