该validate_password
插件通过要求帐户密码和启用潜在密码的强度测试来提高安全性。该插件公开了一组系统变量,使您能够配置密码策略。
该validate_password
插件实现了这些功能:
对于分配作为明文值提供的密码的 SQL 语句,
validate_password
根据当前密码策略检查密码,如果密码较弱(语句返回ER_NOT_VALID_PASSWORD
错误)则拒绝该密码。这适用于CREATE USER
、GRANT
和SET PASSWORD
语句,以及作为PASSWORD()
和OLD_PASSWORD()
函数的参数给出的密码。对于
CREATE USER
语句,validate_password
要求提供密码,并且它满足密码策略。validate_password
实现VALIDATE_PASSWORD_STRENGTH()
评估潜在密码强度的 SQL 函数。此函数接受一个密码参数并返回一个从 0(弱)到 100(强)的整数。
对于分配、修改或生成帐户密码的语句(CREATE USER
、
GRANT
和
SET PASSWORD
;使用
PASSWORD()
and
的语句OLD_PASSWORD()
),此处描述的
功能仅适用于使用在系统表(或
)validate_password
内部存储凭据的身份验证插件的帐户
。对于使用针对外部凭证系统执行身份验证的插件的帐户,密码管理也必须针对该系统在外部进行处理。
mysql.user
mysql_native_password
sha256_password
上述限制不适用于该
VALIDATE_PASSWORD_STRENGTH()
功能的使用,因为它不直接影响帐户。
例子:
validate_password
检查以下语句中的明文密码。在要求密码长度至少为 8 个字符的默认密码策略下,密码很弱,语句会产生错误:mysql> SET PASSWORD = PASSWORD('abc'); ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
不检查指定为散列值的密码,因为原始密码值不可用于检查:
mysql> SET PASSWORD = '*0D3CED9BEC10A777AEC23CCC353A8C08A633045E'; Query OK, 0 rows affected (0.01 sec)
要检查密码,请使用以下
VALIDATE_PASSWORD_STRENGTH()
函数:mysql> SELECT VALIDATE_PASSWORD_STRENGTH('weak'); +------------------------------------+ | VALIDATE_PASSWORD_STRENGTH('weak') | +------------------------------------+ | 25 | +------------------------------------+ mysql> SELECT VALIDATE_PASSWORD_STRENGTH('lessweak$_@123'); +----------------------------------------------+ | VALIDATE_PASSWORD_STRENGTH('lessweak$_@123') | +----------------------------------------------+ | 50 | +----------------------------------------------+ mysql> SELECT VALIDATE_PASSWORD_STRENGTH('N0Tweak$_@123!'); +----------------------------------------------+ | VALIDATE_PASSWORD_STRENGTH('N0Tweak$_@123!') | +----------------------------------------------+ | 100 | +----------------------------------------------+
要配置密码检查,请修改具有以下形式名称的系统变量
;这些是控制密码策略的参数。请参阅
第 6.4.3.2 节,“密码验证插件选项和变量”。
validate_password_
xxx
如果validate_password
未安装,则
系统变量不可用,不检查语句中的密码,
函数始终返回 0。例如,在未安装插件的情况下,可以为帐户分配少于 8 个字符的密码,或者根本没有密码。
validate_password_
xxx
VALIDATE_PASSWORD_STRENGTH()
假设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
.