mysql插件验证_编写密码验证插件

编写密码验证插件

本节介绍如何编写服务器端密码验证插件。这些说明基于plugin/password_validationMySQL源代码分发目录中的源代码。该validate_password.cc目录中的源文件实现了名为的插件validate_password。注意

在MySQL 8.0.4中,该validate_password插件已重新实现为validate_password组件。的插件形式validate_password仍然可用,但现已弃用,并将在以后的MySQL版本中删除。使用该插件的MySQL安装应过渡到使用组件。请参见“密码验证组件”。

要编写密码验证插件,请在插件源文件中包含以下头文件。根据插件的功能和要求,可能还需要其他MySQL或常规头文件。#include

plugin_validate_password.hinclude plugin.h,因此您无需显式包括后者。plugin.h定义MYSQL_VALIDATE_PASSWORD_PLUGIN服务器插件类型和声明插件所需的数据结构。plugin_validate_password.h定义特定于密码验证插件的数据结构。

与任何MySQL服务器插件一样,密码验证插件也具有通用的插件描述符(请参见“服务器插件库和插件描述符”)。在中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服务器服务实现。有关详细信息,请参见目录中的string_service.h和string_service.cc源文件sql。

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 */

};

要编译和安装插件库文件,请使用“编译和安装插件库”中的说明。要使该库文件可供使用,请将其安装在插件目录(由plugin_dir系统变量命名的目录)中。对于该validate_password插件,当您从源代码构建MySQL时,将对其进行编译和安装。它也包含在二进制发行版中。构建过程将生成一个共享对象库,其名称为validate_password.so(.so后缀可能因平台而异)。

要在运行时注册插件,请使用以下语句(.so根据需要调整平台的后缀):INSTALL PLUGIN validate_password SONAME 'validate_password.so';

有关插件加载的更多信息,请参见“MySQL服务器插件”。

要验证插件安装,请检查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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值