本节介绍如何编写服务器端密码验证插件。这些指令基于中的源代码插件/密码\u验证
MySQL源分发的目录。这个验证\u password.cc
该目录中的源文件实现了名为验证\u密码
.
要编写密码验证插件,请在插件源文件中包含以下头文件。根据插件的功能和要求,可能还需要其他MySQL或通用头文件。
#包括
插件\验证\密码.h
包括plugin.h
,因此不需要显式包含后一个文件。plugin.h
定义MYSQL\验证\密码\插件
服务器插件类型和声明插件所需的数据结构。插件\验证\密码.h
定义特定于密码验证插件的数据结构。
密码验证插件,就像MySQL服务器插件一样,具有一个通用的插件描述符(请参阅第4.4.2.1节,“服务器插件库和插件描述符”). 在里面验证\u password.cc
,的通用描述符验证\u密码
看起来像这样:
mysql\u声明\u plugin(验证\u密码){mysql\u validate\u password\u plugin,/*type*/&validate\u password\u descriptor,/*descriptor*/“validate\u password”、/*name*/“Oracle Corporation”,/*author*/“check password struch”、/*description*/plugin\u LICENSE\u GPL、validate\u password\u init、/*init函数(加载时)*/validate\u password\u deinit,/*Denit函数(卸载时)*/0x0100,/*版本*/NULL,验证\u密码\u系统变量,/*系统变量*/NULL,0,}mysql\u declare\u plugin\u end;
这个名称
成员(验证\u密码
)指示在语句(例如)中用于引用插件的名称安装插件
或卸载插件
. 这也是显示的名称信息\u SCHEMA.PLUGINS
或显示插件
.
一般描述符也指验证\密码\系统\变量
,一种向显示变量
声明:
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};
这个验证\u密码\u init
初始化函数读取字典文件(如果指定了一个),然后验证密码
函数释放与文件关联的数据结构。
这个验证\密码\描述符
一般描述符中的值指向特定于类型的描述符。对于密码验证插件,此描述符具有以下结构:
struct st_mysql_validate_password{int interface_version;/*对于满足密码策略的密码(由plugin变量选择),此函数返回TRUE;对于所有其他密码*/int(*validate_password)(mysql_string_handle password);/*此函数根据策略返回密码强度(0-100)*/int(*get_password_strength)(mysql_string_handle password);};
类型特定的描述符具有以下成员:
接口\u版本
:按照惯例,特定类型的插件描述符以给定插件类型的接口版本开始。服务器检查接口\u版本
当它加载插件时,查看插件是否与之兼容。对于密码验证插件接口\u版本
成员为MYSQL\u验证\u密码\u接口\u版本
(定义见插件\验证\密码.h
).验证\u密码
:服务器调用的函数,用于测试密码是否满足当前密码策略。如果密码正常,则返回1,否则返回0。参数是密码,作为mysql\u字符串\u句柄
价值此数据类型由mysql\u字符串
服务器服务。有关详细信息,请参阅字符串\u服务.h
和字符串\u service.cc
中的源文件sql语句
目录获取密码\u力量
:服务器调用以评估密码强度的函数。它返回一个从0(弱)到100(强)的值。参数是密码,作为mysql\u字符串\u句柄
价值
对于验证\u密码
插件,类型特定描述符如下所示:
静态结构st\u mysql\u validate\u password validate\u password\u descriptor={mysql\u validate\u password\u INTERFACE\u VERSION,validate\u password,/*validate function*/get\u password\u strength/*validate strength function*/};
要编译和安装插件库文件,请使用中的说明第4.4.3节,“编译和安装插件库”. 要使库文件可用,请将其安装到plugin目录(由插件目录
系统变量)。对于验证\u密码
插件,它是编译和安装时,您从源代码构建MySQL。它也包含在二进制分布中。构建过程生成一个名为验证\u密码.so
(the)所以
后缀可能会因平台而异)。
要在运行时注册插件,请使用以下语句,调整所以
您的平台后缀(如有必要):
安装PLUGIN validate_password SONAME'validate_password.so';
有关插件加载的更多信息,请参见安装和卸载插件.
要验证插件安装,请检查信息\u SCHEMA.PLUGINS
表或使用显示插件
陈述看见获取服务器插件信息.
而验证\u密码
插件已安装,它公开了指示密码检查参数的系统变量:
mysql>显示变量,如“validate_password%”;+-----------------------------------------+\124;变量|名称|值|+-----------------------------------------+----------------+|验证|密码|字典|文件| |验证|密码|长度| 8 |验证|密码|混合|大小写|计数| 1 |验证|密码|策略|中等| |验证|密码|特殊|字符|计数| 1 |+--------------------------------------+--------+
有关这些变量的说明,请参见密码验证插件选项和变量.
要在测试插件后禁用该插件,请使用此语句卸载它:
卸载插件验证密码;