要被服务器使用,插件库文件必须位于 MySQL 插件目录(由plugin_dir
系统变量命名的目录)中。plugin_dir
如有必要,通过设置服务器启动时 的值来配置插件目录位置 。
插件库文件的基本名称是 validate_password
. 文件名后缀因平台而异(例如,.so
对于 Unix 和类 Unix 系统,.dll
对于 Windows)。
INSTALL PLUGIN
加载插件,并将其注册到mysql.plugins
系统表中,以使插件在随后的每次正常服务器启动时都被加载,而无需 --plugin-load-add
.
要验证插件安装,请检查 INFORMATION_SCHEMA.PLUGINS
表或使用SHOW PLUGINS
语句
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'validate%'; +-------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +-------------------+---------------+ | validate_password | ACTIVE | +-------------------+---------------+ 1 row in set (0.00 sec) mysql>
如果插件无法初始化,请检查服务器错误日志以获取诊断消息。
如果插件之前已经注册 INSTALL PLUGIN
或加载了 --plugin-load-add
,您可以--validate-password
在服务器启动时使用该选项来控制插件激活。例如,要在启动时加载插件并防止在运行时将其删除,请使用以下选项:
[mysqld] plugin-load-add=validate_password.so validate-password=FORCE_PLUS_PERMANENT
如果希望阻止服务器在没有密码验证插件的情况下运行,请使用 --validate-password
或FORCE
如果 FORCE_PLUS_PERMANENT
插件未成功初始化,则强制服务器启动失败。
密码安全
修改参数是使用set global 参数变量名=值(具体值看下面说明)
默认安装完密码相关的并没加载,所以加载方式有两种
1、在进入mysql后通过INSTALL PLUGIN validate_password SONAME 'validate_password.so';激活
2、在配置文件中my.conf
[mysqld]
plugin-load-add=validate_password.so
mysql> show variables like 'validate%'; Empty set (0.00 sec) mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so'; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'validate%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password_check_user_name | OFF | | 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 | +--------------------------------------+--------+ 7 rows in set (0.00 sec)
密码验证插件选项
要控制 validate_password
插件的激活,请使用此选项:
--validate-password[=
value
]
命令行格式 | --validate-password[=value] |
---|---|
类型 | 枚举 |
默认值 | ON |
有效值 |
|
此选项控制服务器 validate_password
在启动时如何加载插件。该值应该是可用于插件加载选项的值之一,如 第 5.5.1 节“安装和卸载插件”中所述。例如, --validate-password=FORCE_PLUS_PERMANENT
告诉服务器在启动时加载插件,并防止在服务器运行时将其删除。
仅当 validate_password
插件先前已注册INSTALL PLUGIN
或加载时,此选项才可用 --plugin-load-add
。请参阅 第 6.4.3.1 节,“密码验证插件安装”。
密码验证插件系统变量
如果validate_password
启用了插件,它会公开几个启用密码检查配置的系统变量:
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| 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 |
+--------------------------------------+--------+
要更改密码检查方式,您可以在服务器启动或运行时设置这些系统变量。下面的列表描述了每个变量的含义。
validate_password_check_user_name
命令行格式 | --validate-password-check-user-name[={OFF|ON}] |
---|---|
介绍 | 5.7.15 |
系统变量 | validate_password_check_user_name |
范围 | 全局的 |
动态的 | 是的 |
类型 | 布尔值 |
默认值 | OFF |
是否validate_password
将密码与当前会话的有效用户帐户的用户名部分进行比较,如果匹配则拒绝它们。validate_password
除非已安装 ,否则此变量不可用 。
默认情况下, validate_password_check_user_name
禁用。此变量控制用户名匹配,与 的值无关 validate_password_policy
。
启用后 validate_password_check_user_name
,它具有以下效果:
检查发生在所有 validate_password
被调用的上下文中,包括使用 ALTER USER
或 SET PASSWORD
更改当前用户密码等语句,以及调用 和 等 PASSWORD()
函数 VALIDATE_PASSWORD_STRENGTH()
。
用于比较的用户名取自 当前会话的USER()
和函数的值。CURRENT_USER()
这意味着具有足够权限来设置另一个用户的密码的用户可以将密码设置为该用户的名称,而不能将该用户的密码设置为执行该语句的用户的名称。例如,'root'@'localhost'
可以将密码设置为 'jeffrey'@'localhost'
, 'jeffrey'
但不能将密码设置为'root
。
USER()
仅使用和 CURRENT_USER()
函数值 的用户名部分 ,而不使用主机名部分。如果用户名为空,则不进行比较。
如果密码与用户名相同或相反,则会发生匹配并拒绝密码。
用户名匹配区分大小写。密码和用户名值作为二进制字符串逐字节进行比较。
如果密码与用户名匹配,则 VALIDATE_PASSWORD_STRENGTH()
无论其他 validate_password
系统变量如何设置,都返回 0。
validate_password_dictionary_file
命令行格式 | --validate-password-dictionary-file=file_name |
---|---|
系统变量 | validate_password_dictionary_file |
范围 | 全局的 |
动态的 | 是的 |
类型 | 文件名 |
validate_password
用于检查密码 的字典文件的路径名 。validate_password
除非已安装 ,否则此变量不可用 。默认情况下,此变量具有空值并且不执行字典检查。要进行字典检查,变量值必须为非空。如果文件以相对路径命名,则相对于服务器数据目录进行解释。文件内容应为小写,每行一个字。内容被视为具有字符集utf8
。允许的最大文件大小为 1MB。对于密码检查时要使用的字典文件,密码策略必须设置为 2 ( STRONG
);参见 validate_password_policy
系统变量的描述。假设这是真的,长度为 4 到 100 的密码的每个子字符串都会与字典文件中的单词进行比较。任何匹配都会导致密码被拒绝。比较不区分大小写。对于 VALIDATE_PASSWORD_STRENGTH()
,将根据所有策略检查密码,包括 STRONG
,因此强度评估包括字典检查,无论 validate_password_policy
值如何。validate_password_dictionary_file
可以在运行时设置并分配一个值会导致在不重新启动服务器的情况下读取命名文件。
validate_password_length
命令行格式 |
|
---|---|
系统变量 |
|
范围 |
全局的 |
动态的 |
是的 |
类型 |
整数 |
默认值 |
|
最小值 |
|
validate_password
需要密码 的最少字符数 。validate_password
除非已安装 ,否则此变量不可用 。validate_password_length
最小值是几个其他相关系统变量的函数 。 该值不能设置为小于此表达式的值:
validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)
如果 由于前面的约束而 validate_password
调整 的值 ,它会在错误日志中写入一条消息。validate_password_length
validate_password_mixed_case_count
命令行格式 | --validate-password-mixed-case-count=# |
---|---|
系统变量 | validate_password_mixed_case_count |
范围 | 全局的 |
动态的 | 是的 |
类型 | 整数 |
默认值 | 1 |
最小值 | 0 |
validate_password
如果密码策略更强或更高,则要求密码具有 的最小小写和大写字符数MEDIUM
。validate_password
除非已安装 ,否则此变量不可用。
对于给定的 validate_password_mixed_case_count
值,密码必须有那么多小写字符和那么多大写字符。
validate_password_number_count
命令行格式 | --validate-password-number-count=# |
---|---|
系统变量 | validate_password_number_count |
范围 | 全局的 |
动态的 | 是的 |
类型 | 整数 |
默认值 | 1 |
最小值 | 0 |
validate_password
如果密码策略更强或更高,则要求密码具有 的最小数字(数字)字符数 MEDIUM
。validate_password
除非已安装 ,否则此变量不可用 。
validate_password_policy
命令行格式 | --validate-password-policy=value |
---|---|
系统变量 | validate_password_policy |
范围 | 全局的 |
动态的 | 是的 |
类型 | 枚举 |
默认值 | 1 |
有效值 |
|
由 强制执行的密码策略 validate_password
。validate_password
除非已安装 ,否则此变量不可用。
validate_password_policy
影响如何validate_password
使用其其他策略设置系统变量,除了根据用户名检查密码,这由 validate_password_check_user_name
.
validate_password_policy
可以使用数值 0、1、2 或相应的符号值LOW
、 MEDIUM
、来指定 该 值STRONG
。下表描述了为每个策略执行的测试。对于长度测试,所需的长度是 validate_password_length
系统变量的值。同样,其他测试所需的值由其他 变量给出。 validate_password_
xxx
政策 | 进行的测试 |
---|---|
0 要么LOW
|
长度 |
1 要么MEDIUM
|
长度; 数字、小写/大写和特殊字符 |
2 要么STRONG
|
长度; 数字、小写/大写和特殊字符;字典文件 |
validate_password_special_char_count
命令行格式 | --validate-password-special-char-count=# |
---|---|
系统变量 | validate_password_special_char_count |
范围 | 全局的 |
动态的 | 是的 |
类型 | 整数 |
默认值 | 1 |
最小值 | 0 |
validate_password
如果密码策略更强或更高,则要求密码具有的最小非字母数字字符数 MEDIUM
。validate_password
除非已安装 ,否则此变量不可用 。
密码验证插件状态变量
如果validate_password
启用了插件,它会公开提供操作信息的状态变量: