Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


6.1.2.6 パスワード検証プラグイン

validate_password プラグイン (MySQL 5.6.6 の時点で使用可能) は、パスワードをテストしてセキュリティーを向上させるために使用することができます。このプラグインは、2 つの機能を実装します。

  • 平文の値として指定されるパスワードを割り当てるステートメントで、値は現在のパスワードポリシーと照合して検査され、弱い場合は拒否されます (ステートメントは ER_NOT_VALID_PASSWORD エラーを返します)。これは、CREATE USERGRANT、および 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_xxx の形式の名前を持つシステム変数の値として利用できます。これらの変数を変更してパスワード検査を構成することができます。セクション6.1.2.6.2「パスワード検証プラグインのオプションおよび変数」を参照してください。

パスワード検査の 3 つのレベルは、LOWMEDIUM、および STRONG です。デフォルトは MEDIUM で、これを変更するには、validate_password_policy の値を変更します。これらのポリシーにより、実装されるパスワードテストはますます厳密になります。次の記述はデフォルトのパラメータ値を示しており、これらは適切なシステム変数を変更することによって変更できます。

  • LOW ポリシーは、パスワードの長さのみテストします。パスワードは少なくとも 8 文字の長さでなければなりません。

  • MEDIUM ポリシーは、パスワードが最低 1 つの数値文字を含み、1 つの小文字および大文字を含み、1 つの特殊文字 (英数字以外) を含む必要があるという条件を追加します。

  • STRONG ポリシーは、パスワードの 4 文字以上の部分文字列が、(辞書ファイルが指定された場合に) 辞書ファイル内の単語と一致してはならないという条件を追加します。

validate_password プラグインがインストールされていない場合、validate_password_xxx システム変数は利用できず、ステートメント内のパスワードは検査されず、VALIDATE_PASSWORD_STRENGTH() は常に 0 を返します。たとえば、アカウントに 8 文字より短いパスワードを割り当てることができます。

6.1.2.6.1 パスワード検証プラグインのインストール

パスワード検証プラグインの名前は 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-passwordFORCE または FORCE_PLUS_PERMANENT の値を指定して使用することで、プラグインが正常に初期化しない場合にサーバー起動を強制的に失敗させるようにします。

プラグインのインストールについての一般的な情報は、セクション5.1.8「サーバープラグイン」を参照してください。プラグインのインストールを検証するには、INFORMATION_SCHEMA.PLUGINS テーブルを調査するか、SHOW PLUGINS ステートメントを使用します。セクション5.1.8.2「サーバープラグイン情報の取得」を参照してください。

6.1.2.6.2 パスワード検証プラグインのオプションおよび変数

validate_password プラグインの有効化を制御するには、次のオプションを使用します。

  • --validate-password[=value]

    導入 5.6.6
    コマンド行形式 --validate-password[=value]
    許可されている値 列挙
    デフォルト 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
    変数スコープ グローバル
    動的変数 いいえ
    許可されている値 ファイル名

    パスワードを検査するために validate_password プラグインによって使用される辞書ファイルのパス名。この変数は、そのプラグインがインストールされないかぎり利用できません。

    デフォルトでは、この変数は空の値を持ち、辞書検査は実行されません。辞書検査を有効にするには、この変数を空白でない値に設定する必要があります。ファイル名が相対パスとして指定された場合、サーバーのデータディレクトリを基準として解釈されます。この内容は小文字で記載し、1 行に 1 つの単語としてください。内容は、utf8 の文字セットを持つものとして処理されます。許可される最大のファイルサイズは 1M バイトです。

    パスワード検査中に辞書ファイルが使用されるようにするには、パスワードポリシーを 2 (STRONG) に設定する必要があります。validate_password_policy システム変数の説明を参照してください。これが true である場合、長さが 4 から 100 までのパスワードの各部分文字列が辞書ファイル内の単語と比較されます。いずれかが一致すると、パスワードが拒否されます。比較では大文字と小文字が区別されません。

    VALIDATE_PASSWORD_STRENGTH() の場合、パスワードは STRONG を含むすべてのポリシーと照合して検査されるため、強さの評価には validate_password_policy 値に関係なく辞書検査が含まれます。

    サーバーが実行中に辞書ファイルに変更を行なった場合、変更を認識させるにはサーバーの再起動が必要です。

  • validate_password_length

    導入 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 プラグインによって検査されるパスワードに必要な数値文字 (数字) の最大数。この変数は、そのプラグインがインストールされないかぎり利用できません。

  • validate_password_policy

    導入 5.6.6
    システム変数 名前 validate_password_policy
    変数スコープ グローバル
    動的変数 はい
    許可されている値 列挙
    デフォルト 1
    有効な値 0
    1
    2

    validate_password プラグインによって適用されるパスワードポリシー。この変数は、そのプラグインがインストールされないかぎり利用できません。

    validate_password_policy 値は、数値 0、1、2 または対応する記号値 LOWMEDIUMSTRONG を使用して指定できます。次の表では、それぞれのポリシーに対して実施されるテストについて説明します。長さテストの場合、必要な長さは 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 プラグインによって検査されるパスワードに必要な英数字以外の文字の最大数。この変数は、そのプラグインがインストールされないかぎり利用できません。


User Comments
Sign Up Login You must be logged in to post a comment.