validate_password
プラグイン (MySQL 5.6.6 の時点で使用可能) は、パスワードをテストしてセキュリティーを向上させるために使用することができます。このプラグインは、2 つの機能を実装します。
平文の値として指定されるパスワードを割り当てるステートメントで、値は現在のパスワードポリシーと照合して検査され、弱い場合は拒否されます (ステートメントは
ER_NOT_VALID_PASSWORD
エラーを返します)。これは、CREATE USER
、GRANT
、およびSET PASSWORD
ステートメントに影響します。PASSWORD()
およびOLD_PASSWORD()
関数への引数として指定されるパスワードも検査されます。パスワード候補の強さは、
VALIDATE_PASSWORD_STRENGTH()
SQL 関数を使用して評価でき、これはパスワード引数を取得して、0 (弱い) から 100 (強い) までの整数を返します。
たとえば、次のステートメントの平文パスワードが検査されます。デフォルトのパスワードポリシーではパスワードに最低 8 文字の長さが要求されるため、パスワードが弱いことからステートメントはエラーを生成します。
mysql> SET PASSWORD = PASSWORD('abc');
ERROR 1819 (HY000): Your password does not satisfy the current policy
requirements
ハッシュ済みの値として指定されたパスワードは、元のパスワード値が得られないため検査されません。
mysql> SET PASSWORD = '*0D3CED9BEC10A777AEC23CCC353A8C08A633045E';
Query OK, 0 rows affected (0.01 sec)
パスワード検査を制御するパラメータは、validate_password_
の形式の名前を持つシステム変数の値として利用できます。これらの変数を変更してパスワード検査を構成することができます。セクション6.1.2.6.2「パスワード検証プラグインのオプションおよび変数」を参照してください。
xxx
パスワード検査の 3 つのレベルは、LOW
、MEDIUM
、および STRONG
です。デフォルトは MEDIUM
で、これを変更するには、validate_password_policy
の値を変更します。これらのポリシーにより、実装されるパスワードテストはますます厳密になります。次の記述はデフォルトのパラメータ値を示しており、これらは適切なシステム変数を変更することによって変更できます。
LOW
ポリシーは、パスワードの長さのみテストします。パスワードは少なくとも 8 文字の長さでなければなりません。MEDIUM
ポリシーは、パスワードが最低 1 つの数値文字を含み、1 つの小文字および大文字を含み、1 つの特殊文字 (英数字以外) を含む必要があるという条件を追加します。STRONG
ポリシーは、パスワードの 4 文字以上の部分文字列が、(辞書ファイルが指定された場合に) 辞書ファイル内の単語と一致してはならないという条件を追加します。
validate_password
プラグインがインストールされていない場合、validate_password_
システム変数は利用できず、ステートメント内のパスワードは検査されず、xxx
VALIDATE_PASSWORD_STRENGTH()
は常に 0 を返します。たとえば、アカウントに 8 文字より短いパスワードを割り当てることができます。
パスワード検証プラグインの名前は validate_password
です。サーバーから使用できるようにするには、プラグインライブラリのオブジェクトファイルが MySQL プラグインディレクトリ (plugin_dir
システム変数によって指定されたディレクトリ) に存在する必要があります。必要に応じて、サーバーの起動時に、プラグインディレクトリの場所をサーバーに指示する plugin_dir
の値を設定します。
サーバー起動時にプラグインをロードするには、--plugin-load
オプションを使用して、プラグインを格納するオブジェクトファイルの名前を指定します。このプラグインのロード方式では、サーバーを起動するたびにオプションを指定する必要があります。たとえば、my.cnf
ファイルに次の行を入力します。
[mysqld]
plugin-load=validate_password.so
システム上のオブジェクトファイルのサフィクスが .so
とは異なる場合、正しいサフィクスに置き換えてください (たとえば Windows の場合は .dll
)。
または、プラグインを実行時に登録するには (必要に応じて拡張子を変更して) 次のステートメントを使用します。
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
INSTALL PLUGIN
は、プラグインをロードします。また、後続の通常のサーバー起動のたびにプラグインがロードされるように、そのプラグインを mysql.plugins
テーブルに登録します。
プラグインが INSTALL PLUGIN
によって以前登録されているか、--plugin-load
を指定してロードされた場合、--validate-password
オプションをサーバー起動時に使用して、プラグインの有効化を制御できます。たとえば、プラグインをロードして、実行時に削除されないようにするには、次のオプションを使用します。
[mysqld]
plugin-load=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
パスワード検証プラグインを使用せずにサーバーが実行することを回避することが望まれる場合、--validate-password
に FORCE
または FORCE_PLUS_PERMANENT
の値を指定して使用することで、プラグインが正常に初期化しない場合にサーバー起動を強制的に失敗させるようにします。
プラグインのインストールについての一般的な情報は、セクション5.1.8「サーバープラグイン」を参照してください。プラグインのインストールを検証するには、INFORMATION_SCHEMA.PLUGINS
テーブルを調査するか、SHOW PLUGINS
ステートメントを使用します。セクション5.1.8.2「サーバープラグイン情報の取得」を参照してください。
validate_password
プラグインの有効化を制御するには、次のオプションを使用します。
-
コマンド行形式 --validate-password[=value]
導入 5.6.6 型 列挙 デフォルト ON
有効な値 ON
OFF
FORCE
FORCE_PLUS_PERMANENT
このオプションは、サーバーが起動時に
validate_password
プラグインをロードする方法を制御します。値はセクション5.1.8.1「プラグインのインストールおよびアンインストール」に記載されているような、プラグインロードオプション用に指定可能ないずれかの値とする必要があります。たとえば、--validate-password=FORCE_PLUS_PERMANENT
の場合、プラグインをロードし、サーバーの実行中にプラグインが削除されないようにするようサーバーに指示します。このオプションは、
validate_password
プラグインがINSTALL PLUGIN
で以前登録されていたか、--plugin-load
でロードされている場合にのみ利用できます。セクション6.1.2.6.1「パスワード検証プラグインのインストール」を参照してください。
validate_password
プラグインがインストールされている場合、パスワード検査を制御するパラメータを示すいくつかのシステム変数を公開します。
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| 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 |
+--------------------------------------+--------+
パスワードの検査方法を変更するために、これらの変数はいずれもサーバー起動時に設定でき、これらのほとんどは実行時にも設定できます。次のリストは、各変数の意味を説明したものです。
-
validate_password_dictionary_file
導入 5.6.6 システム変数 validate_password_dictionary_file
スコープ グローバル 動的 (≥ 5.6.26) はい 動的 (≤ 5.6.25) いいえ 型 ファイル名 パスワードを検査するために
validate_password
プラグインによって使用される辞書ファイルのパス名。この変数は、そのプラグインがインストールされないかぎり利用できません。デフォルトでは、この変数は空の値を持ち、辞書検査は実行されません。辞書検査を有効にするには、この変数を空白でない値に設定する必要があります。ファイル名が相対パスとして指定された場合、サーバーのデータディレクトリを基準として解釈されます。この内容は小文字で記載し、1 行に 1 つの単語としてください。内容は、
utf8
の文字セットを持つものとして処理されます。許可される最大のファイルサイズは 1M バイトです。パスワード検査中に辞書ファイルが使用されるようにするには、パスワードポリシーを 2 (
STRONG
) に設定する必要があります。validate_password_policy
システム変数の説明を参照してください。これが true である場合、長さが 4 から 100 までのパスワードの各部分文字列が辞書ファイル内の単語と比較されます。いずれかが一致すると、パスワードが拒否されます。比較では大文字と小文字が区別されません。VALIDATE_PASSWORD_STRENGTH()
の場合、パスワードはSTRONG
を含むすべてのポリシーと照合して検査されるため、強さの評価にはvalidate_password_policy
値に関係なく辞書検査が含まれます。サーバーが実行中に辞書ファイルに変更を行なった場合、変更を認識させるにはサーバーの再起動が必要です。
-
導入 5.6.6 システム変数 validate_password_length
スコープ グローバル 動的 はい 型 数値 デフォルト 8
最小値 0
validate_password
プラグインによって検査されるパスワードに必要な最小の文字数。この変数は、そのプラグインがインストールされないかぎり利用できません。validate_password_length
の最小値は、関連するほかのいくつかのシステム変数の関数です。MySQL 5.6.10 の時点では、サーバーでは次の式の値より小さい値は設定されません。validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)
前述の制約のため
validate_password
プラグインがvalidate_password_length
の値を調整した場合、プラグインはエラーログファイルにメッセージを書き込みます。 -
validate_password_mixed_case_count
導入 5.6.6 システム変数 validate_password_mixed_case_count
スコープ グローバル 動的 はい 型 数値 デフォルト 1
最小値 0
パスワードポリシーが
MEDIUM
またはそれより強い場合、validate_password
プラグインによって検査されるパスワードに必要な小文字および大文字の最大数。この変数は、そのプラグインがインストールされないかぎり利用できません。 -
validate_password_number_count
導入 5.6.6 システム変数 validate_password_number_count
スコープ グローバル 動的 はい 型 数値 デフォルト 1
最小値 0
パスワードポリシーが
MEDIUM
またはそれより強い場合、validate_password
プラグインによって検査されるパスワードに必要な数値文字 (数字) の最大数。この変数は、そのプラグインがインストールされないかぎり利用できません。 -
導入 5.6.6 システム変数 validate_password_policy
スコープ グローバル 動的 はい 型 列挙 デフォルト 1
有効な値 0
1
2
validate_password
プラグインによって適用されるパスワードポリシー。この変数は、そのプラグインがインストールされないかぎり利用できません。validate_password_policy
値は、数値 0、1、2 または対応する記号値LOW
、MEDIUM
、STRONG
を使用して指定できます。次の表では、それぞれのポリシーに対して実施されるテストについて説明します。長さテストの場合、必要な長さはvalidate_password_length
システム変数の値です。同様に、ほかのテストについて必要な値は、ほかのvalidate_password_
変数によって提供されます。xxx
ポリシー 実施されるテスト 0
またはLOW
長さ 1
またはMEDIUM
長さ。数値、小文字、大文字、および特殊文字 2
またはSTRONG
長さ。数値、小文字、大文字、および特殊文字。辞書ファイル 注記MySQL 5.6.10 以前では、
validate_password_policy
の名前はvalidate_password_policy_number
でした。 -
validate_password_special_char_count
導入 5.6.6 システム変数 validate_password_special_char_count
スコープ グローバル 動的 はい 型 数値 デフォルト 1
最小値 0
パスワードポリシーが
MEDIUM
またはそれより強い場合、validate_password
プラグインによって検査されるパスワードに必要な英数字以外の文字の最大数。この変数は、そのプラグインがインストールされないかぎり利用できません。