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


MySQL 5.6 リファレンスマニュアル  /  ...  /  パスワード検証プラグインの作成

24.2.4.10 パスワード検証プラグインの作成

このセクションでは、パスワード検証サーバープラグインを作成する方法について説明します。この手順は、MySQL ソース配布の plugin/password_validation ディレクトリにあるソースコードに基づいています。そのディレクトリ内にある validate_password.cc ソースファイルは、validate_password という名前のプラグインを実装します。

パスワード検証プラグインを作成するには、プラグインのソースファイルに次のヘッダーファイルをインクルードします。プラグインの機能および要件によっては、ほかの MySQL のヘッダーファイルまたは一般的なヘッダーファイルが必要になることもあります。

#include <mysql/plugin_validate_password.h>

plugin_validate_password.hplugin.h をインクルードするため、後者のファイルを明示的にインクルードする必要はありません。plugin.hMYSQL_VALIDATE_PASSWORD_PLUGIN サーバープラグインタイプとプラグインを宣言するために必要なデータ構造体を定義します。plugin_validate_password.h は、パスワード検証プラグインに固有のデータ構造体を定義します。

パスワード検証プラグインには、ほかの MySQL サーバープラグインと同じように一般プラグインディスクリプタがあります (セクション24.2.4.2.1「サーバープラグインライブラリおよびプラグインディスクリプタ」を参照してください)。validate_password.cc では、一般ディスクリプタは次のようになります。

mysql_declare_plugin(validate_password)
{
  MYSQL_VALIDATE_PASSWORD_PLUGIN,     /*   type                            */
  &validate_password_descriptor,      /*   descriptor                      */
  "validate_password",                /*   name                            */
  "Oracle Corporation",               /*   author                          */
  "check password strength",          /*   description                     */
  PLUGIN_LICENSE_GPL,
  validate_password_init,             /*   init function (when loaded)     */
  validate_password_deinit,           /*   deinit function (when unloaded) */
  0x0100,                             /*   version                         */
  NULL,
  validate_password_system_variables, /*   system variables                */
  NULL,
  0,
}
mysql_declare_plugin_end;

name メンバー (validate_password) は、INSTALL PLUGINUNINSTALL PLUGIN などのステートメントでプラグインを参照するために使用する名前を指定します。これは INFORMATION_SCHEMA.PLUGINS または SHOW PLUGINS によって表示される名前でもあります。

一般ディスクリプタは、SHOW VARIABLES ステートメントに対してさまざまなステータス変数を公開する構造体である validate_password_system_variables も参照します。

static struct st_mysql_sys_var* validate_password_system_variables[]= {
  MYSQL_SYSVAR(length),
  MYSQL_SYSVAR(number_count),
  MYSQL_SYSVAR(mixed_case_count),
  MYSQL_SYSVAR(special_char_count),
  MYSQL_SYSVAR(policy),
  MYSQL_SYSVAR(dictionary_file),
  NULL
};

validate_password_init 初期化関数は辞書ファイルを読み取り (指定されている場合)、validate_password_deinit 関数はそのファイルに関連付けられているデータ構造体を解放します。

一般ディスクリプタの validate_password_descriptor 値はタイプ固有のディスクリプタを指しています。パスワード検証プラグインの場合、このディスクリプタの構造体は次のようになります。

struct st_mysql_validate_password
{
  int interface_version;
  /*
    This function returns TRUE for passwords which satisfy the password
    policy (as chosen by plugin variable) and FALSE for all other
    password
  */
  int (*validate_password)(mysql_string_handle password);
  /*
    This function returns the password strength (0-100) depending
    upon the policies
  */
  int (*get_password_strength)(mysql_string_handle password);
};

タイプ固有のディスクリプタには次のメンバーがあります。

  • interface_version: 規則により、タイプ固有のプラグインディスクリプタは、特定のプラグインタイプのインタフェースバージョンで始まります。サーバーはプラグインをロードするときに interface_version を検査し、プラグインと互換性があるかどうかを確認します。パスワード検証プラグインの場合、interface_version メンバーの値は MYSQL_VALIDATE_PASSWORD_INTERFACE_VERSION (plugin_validate_password.h で定義されます) です。

  • validate_password: パスワードが現在のパスワードポリシーを満たしているかどうかをテストするためにサーバーが呼び出す関数。パスワードが妥当な場合は 1 を返し、そうでない場合は 0 を返します。引数はパスワードであり、mysql_string_handle 値として渡されます。このデータ型は mysql_string サーバーサービスによって実装されます。詳細は、sql ディレクトリ内の string_service.h および string_service.cc のソースファイルを参照してください。

  • get_password_strength: パスワードの強さを評価するためにサーバーが呼び出す関数。これは 0 (弱い) から 100 (強い) までの値を返します。引数はパスワードであり、mysql_string_handle 値として渡されます。

validate_password プラグインの場合、タイプ固有のディスクリプタは次のようになります。

static struct st_mysql_validate_password validate_password_descriptor=
{
  MYSQL_VALIDATE_PASSWORD_INTERFACE_VERSION,
  validate_password,                         /* validate function          */
  get_password_strength                      /* validate strength function */
};

プラグインライブラリのオブジェクトファイルをコンパイルおよびインストールするには、セクション24.2.4.3「プラグインライブラリのコンパイルおよびインストール」の手順を使用します。ライブラリファイルを使用するには、ライブラリファイルがプラグインディレクトリ (plugin_dir システム変数で指定されているディレクトリ) にインストールされている必要があります。validate_password プラグインの場合、MySQL をソースからビルドするときにコンパイルおよびインストールされます。これはバイナリ配布にも含められます。ビルド処理では、validate_password.so という名前の共有オブジェクトライブラリが生成されます (拡張子はプラットフォームによって異なる場合があります)。

プラグインを実行時に登録するには、次のステートメントを使用します (必要に応じて拡張子を変更します)。

mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';

プラグインのロードについての追加情報は、セクション5.1.8.1「プラグインのインストールおよびアンインストール」を参照してください。

プラグインのインストールを検証するには、INFORMATION_SCHEMA.PLUGINS テーブルを調査するか、SHOW PLUGINS ステートメントを使用します。

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

これらの変数の説明については、セクション6.1.2.6.2「パスワード検証プラグインのオプションおよび変数」を参照してください。

プラグインをテスト後に無効にするには、次のステートメントを使用してプラグインをアンロードします。

mysql> UNINSTALL PLUGIN validate_password;