该validate_password
组件用于测试用户指定的密码并提高安全性。该组件公开一组系统变量,使您能够定义密码策略。
该组件实现了两个功能:
在分配作为明文值提供的密码的语句中,组件根据当前密码策略检查密码,如果密码较弱则拒绝密码。这会影响
ALTER USER
、CREATE USER
和SET PASSWORD
语句。VALIDATE_PASSWORD_STRENGTH()
SQL 函数评估潜在密码的强度 。 该函数接受一个密码参数并返回一个从 0(弱)到 100(强)的整数。
该validate_password
组件提供三个级别的密码检查:LOW
、
MEDIUM
和STRONG
。默认是MEDIUM
; 由
validate_password.policy
系统变量控制。这些政策实施越来越严格的密码测试。
该
LOW
策略仅测试密码长度。密码长度必须至少为 8 个字符。要更改此长度,请修改validate_password.length
.该
MEDIUM
策略添加了密码必须包含至少 1 个数字字符、1 个小写字符、1 个大写字符和 1 个特殊(非字母数字)字符的条件。要更改这些值,请修改validate_password.number_count
、validate_password.mixed_case_count
和validate_password.special_char_count
。该
STRONG
策略添加了一个条件,即长度为 4 或更长的密码子字符串不得与字典文件中的单词匹配(如果已指定的话)。要指定字典文件,请修改validate_password.dictionary_file
.
此外,该validate_password
组件可以拒绝与当前会话的有效用户帐户的用户名部分相匹配的密码,正向或反向。为了提供对此功能的控制,
validate_password
公开了一个
validate_password.check_user_name
默认启用的系统变量。
安装和配置密码验证组件:
-
确保
validate_password
组件库文件位于 MySQL 插件目录中。$> cd /path/to/mysql/lib/plugin/ $> ls component_v* component_validate_password.so
确保
plugin_dir
设置为服务器的 MySQL 插件目录。mysql> SELECT @@plugin_dir; +--------------------------------------------+ | @@plugin_dir | +--------------------------------------------+ | /path/to/mysql/lib/plugin/ | +--------------------------------------------+
使用语句 安装
validate_password
组件:INSTALL COMPONENT
mysql> INSTALL COMPONENT 'file://component_validate_password';
组件安装是一次性操作,不需要在每次服务器启动时都完成。
INSTALL COMPONENT
加载组件,并将其注册到mysql.component
系统表中,以便在后续服务器启动期间加载它。 -
[mysqld]
在 MySQL 配置文件 ( ) 的选项组下添加这些选项,/etc/my.cnf
以便您可以根据需要进行调整。此部署中使用默认值。validate_password.policy=1 validate_password.length=8 validate_password.number_count=1 validate_password.mixed_case_count=1 validate_password.special_char_count=1 validate_password.check_user_name=1
-
validate_password.policy=1
由 强制执行的密码策略
validate_password
。值为 1 是MEDIUM
。默认情况下,MEDIUM
策略指定密码长度必须至少为 8 个字符,至少包含 1 个数字字符、1 个小写字符、1 个大写字符和 1 个特殊(非字母数字)字符。1 (MEDIUM
) 是默认设置。 -
validate_password.length=8
validate_password
要求密码具有 的最少字符数 。 -
validate_password.number_count=1
validate_password
如果密码策略为MEDIUM
或更强 ,则要求密码具有 的最小小写和大写字符数。 -
validate_password.mixed_case_count=1
validate_password
如果密码策略为MEDIUM
或更强 ,则要求密码具有 的最小数字(数字)字符数 。 -
validate_password.special_char_count=1
validate_password
如果密码策略为MEDIUM
或更强 ,则要求密码具有 的最小非字母数字字符数 。 -
validate_password.check_user_name=1
拒绝与当前会话的有效用户帐户的用户名部分相匹配的密码,正向或反向。
笔记validate_password.dictionary_file
未在此部署中使用。默认情况下,此变量具有空值并且不执行字典检查。对于密码检查时要使用的字典文件,密码策略必须设置为2(STRONG);有关详细信息,请参阅validate_password.policy
系统变量的描述。 -
-
要验证组件安装,请查询
mysql.component
表:$> cd /usr/local/mysql $> bin/mysqladmin -u root -p version Enter password: (enter root password here)
mysql> SELECT * FROM mysql.component; +--------------+--------------------+------------------------------------+ | component_id | component_group_id | component_urn | +--------------+--------------------+------------------------------------+ | 1 | 1 | file://component_validate_password | +--------------+--------------------+------------------------------------+
-
要验证密码验证组件是否有效,请尝试使用不合规的密码创建用户:
mysql> CREATE USER 'bob.smith'@'localhost' IDENTIFIED BY 'abc'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
组件实施的策略validate_password
对生成的密码没有影响。策略的目的validate_password
是帮助人们创建更好的密码。
有关该
validate_password
组件的更多信息,请参阅
密码验证组件。