本節說明如何編寫伺服器端密碼驗證外掛程式。這些說明基於 MySQL 原始發行版的 plugin/password_validation
目錄中的原始碼。該目錄中的 validate_password.cc
原始檔實作名為 validate_password
的外掛程式。
較舊 MySQL 版本中的 validate_password
外掛程式形式已棄用,並可能會在未來版本的 MySQL 中移除。請改用元件;請參閱轉換至密碼驗證元件。
若要編寫密碼驗證外掛程式,請在外掛程式原始檔中包含下列標頭檔。根據外掛程式的功能和需求,可能也需要其他 MySQL 或一般標頭檔。
#include <mysql/plugin_validate_password.h>
plugin_validate_password.h
包含 plugin.h
,因此您不需要明確包含後者檔案。plugin.h
定義了 MYSQL_VALIDATE_PASSWORD_PLUGIN
伺服器外掛程式類型,以及宣告外掛程式所需的資料結構。plugin_validate_password.h
定義了特定於密碼驗證外掛程式的資料結構。
密碼驗證外掛程式,如任何 MySQL 伺服器外掛程式,都有一個一般外掛程式描述符(請參閱第 4.4.2.1 節「伺服器外掛程式庫與外掛程式描述符」)。在 validate_password.cc
中,validate_password
的一般描述符如下所示
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 PLUGIN
或 UNINSTALL PLUGIN
等語句中,用於參考外掛程式的名稱。這也是 INFORMATION_SCHEMA.PLUGINS
或 SHOW PLUGINS
所顯示的名稱。
一般描述符也會參考 validate_password_system_variables
,這是一個向 SHOW 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 */
};
若要編譯和安裝外掛程式庫檔案,請使用第 4.4.3 節「編譯與安裝外掛程式庫」中的說明。若要讓程式庫檔案可供使用,請將它安裝在 plugin 目錄中(由 plugin_dir
系統變數命名的目錄)。對於 validate_password
外掛程式,當您從原始碼建置 MySQL 時,它會被編譯和安裝。它也包含在二進位發行版中。建置程序會產生一個共享物件程式庫,其名稱為 validate_password.so
(.so
後綴可能會因您的平台而異)。
若要在執行階段註冊外掛程式,請使用此語句,並根據您的平台調整 .so
後綴(如有必要)
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
如需外掛程式載入的其他資訊,請參閱安裝和解除安裝外掛程式。
若要驗證外掛程式安裝,請檢查 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 |
+--------------------------------------+--------+
如需這些變數的說明,請參閱密碼驗證選項和變數。
若要在測試後停用外掛程式,請使用此語句來卸載它
UNINSTALL PLUGIN validate_password;