この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:T
更新日時:2026-06-11 07:10:02

タイトル: ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
SEOタイトル: MySQL ERROR 1819 パスワードポリシー の原因と対処

この記事の要点
  • MySQL の validate_password プラグインが要件未満のパスワードを拒否したエラー
  • デフォルト要件 (MEDIUM): 長さ 8 以上、大小英字 + 数字 + 特殊文字を含む
  • 現在のポリシー確認: SHOW VARIABLES LIKE "validate_password%"
  • 対処1: ポリシー緩和 SET GLOBAL validate_password.policy = LOW
  • 対処2: 要件を満たす強いパスワードに変更 (例: Aa1!Aa1!Aa1!)
  • 対処3: 検証プラグイン自体を無効化 (本番非推奨)

エラー全文

mysql> ALTER USER 'app'@'localhost' IDENTIFIED BY 'password';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

MySQL に同梱されている validate_password (8.0+ は component_validate_password) プラグインが、指定したパスワードを「要件不足」と判断したときに出ます。CREATE USER / ALTER USER / SET PASSWORD すべてで発生します。

現在のポリシーを確認する

SHOW VARIABLES LIKE 'validate_password%';
-- MySQL 8.0 以降はピリオド付き
SHOW VARIABLES LIKE 'validate_password.%';

-- 主要項目の意味
-- validate_password.policy             : 厳しさ LOW/MEDIUM/STRONG (0/1/2)
-- validate_password.length             : 最低長 (デフォルト 8)
-- validate_password.mixed_case_count   : 大小英字の最低数 (MEDIUM 以上で 1)
-- validate_password.number_count       : 数字の最低数 (MEDIUM 以上で 1)
-- validate_password.special_char_count : 特殊文字の最低数 (MEDIUM 以上で 1)
-- validate_password.dictionary_file    : 辞書ファイル (STRONG で利用)

ポリシーレベル

レベル要件
LOW0長さ のみ (デフォルト 8 文字)
MEDIUM (default)1長さ + 大小英字 + 数字 + 特殊文字
STRONG2MEDIUM + 辞書ファイルにある単語を含まない

対処1: ポリシーを緩和

開発環境などで短いパスワードを使いたい場合:

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

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

-- 設定後にパスワード変更
ALTER USER 'app'@'localhost' IDENTIFIED BY 'abcd';

-- 永続化したい場合は my.cnf に
-- [mysqld]
-- validate_password.policy = LOW
-- validate_password.length = 4

本番では絶対に使わないでください。

対処2: 強いパスワードに変更

MEDIUM のままでも以下のような値なら通ります:

通る例
  Pa$$w0rd2024       (大小 + 数字 + 記号 + 12 文字)
  Aa1!Aa1!Aa1!       (繰り返しでも判定は通る)
  Tar0_Suzuki!       (英字 + 数字 + 記号)

通らない例
  password           (短い + 大文字無 + 数字無 + 記号無)
  abcdefgh           (大文字無 + 数字無 + 記号無)
  P@ssword           (数字無)
  Pa$$word           (数字無)

パスワード強度は SQL でも事前に評価できます:

-- 0=弱, 25, 50, 75, 100 のいずれかが返る
SELECT VALIDATE_PASSWORD_STRENGTH('Pa$$w0rd2024');
-- 100 (= 強)

SELECT VALIDATE_PASSWORD_STRENGTH('password');
-- 25 (= 弱)

対処3: 検証プラグインを無効化

どうしても外したい場合 (社内 DB / 検証環境のみ):

-- MySQL 8.0+ (Component 方式)
UNINSTALL COMPONENT 'file://component_validate_password';

-- MySQL 5.7 (Plugin 方式)
UNINSTALL PLUGIN validate_password;

-- 再有効化
INSTALL COMPONENT 'file://component_validate_password';
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

パスワード変更コマンド一覧

-- 8.0+ 推奨構文
ALTER USER 'user'@'localhost' IDENTIFIED BY 'Pa$$w0rd2024';

-- 5.7 でも動く
SET PASSWORD FOR 'user'@'localhost' = 'Pa$$w0rd2024';

-- 自分自身のパスワード
ALTER USER USER() IDENTIFIED BY 'Pa$$w0rd2024';

-- 認証プラグイン指定 (8.0+ デフォルトは caching_sha2_password)
ALTER USER 'user'@'localhost'
  IDENTIFIED WITH mysql_native_password BY 'Pa$$w0rd2024';

初回 root パスワード設定でハマるパターン

MySQL を新規インストールした直後の root には一時パスワードが設定されており、最初のログイン時に変更を求められます。このとき validate_password が有効なので、弱い PW を入れるとエラーになります。

# 一時パスワードを取得
sudo grep 'temporary password' /var/log/mysqld.log
# A temporary password is generated for root@localhost: xxxxx

# ログイン後、まず強いパスワードに変更
mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Pa$$w0rd2024';

# その後でポリシーを必要に応じて緩和
mysql> SET GLOBAL validate_password.policy = LOW;

関連エラー

エラー番号意味
ERROR 1819 (HY000)本記事 — パスワード強度不足
ERROR 1820 (HY000)パスワード変更必須 (期限切れ)
ERROR 1133 (42000)そのユーザー名・ホストが存在しない
ERROR 1396 (HY000)CREATE USER 失敗 (既存ユーザー)

FAQ

Q: my.cnf に書いて再起動しても反映されない
A: MySQL 8.0 はピリオド形式 validate_password.policy、5.7 はアンダースコア validate_password_policy。バージョンによって書き方が違います。

Q: GRANT 文の中でパスワード設定したい
A: 8.0 では非推奨。CREATE USER ... IDENTIFIED BY ... でユーザー作成 → GRANT ... ON ... TO 'user'@'host' の 2 段階に分けます。

Q: 緩和したのにエラーが続く
A: SET GLOBAL は新規セッションから有効。現在のセッションで再ログインするか、SET SESSION も併用してください。