扩展MySQL 5.7/.../ 编写密码验证插件

4.4.10编写密码验证插件

本节介绍如何编写服务器端密码验证插件。这些指令基于中的源代码插件/密码\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 |+--------------------------------------+--------+

有关这些变量的说明,请参见密码验证插件选项和变量.

要在测试插件后禁用该插件,请使用此语句卸载它:

卸载插件验证密码;