Error number: 3639; Symbol: ER_WARNING_PASSWORD_HISTORY_CLAUSES_VOID; SQLSTATE: HY000
Message: Non-zero password history clauses ignored for user ‘%s’@’%s’ as its authentication plugin %s does not support password history
错误说明
ER_WARNING_PASSWORD_HISTORY_CLAUSES_VOID(3639)错误表示Mysql检测到无效的口令历史子句。它可能是由于全局或会话级变量“validate_password_number_count”被设置到0造成的,这会禁用所有数据库级别的验证,因此加入到口令历史的子句也是无效的。
常见案例
错误ER_WARNING_PASSWORD_HISTORY_CLAUSES_VOID可能会在使用 ALTER USER语句并加入PASSWORD HISTORY子句时出现,或者在执行SET GLOBAL 或SET SESSION操作并将全局和会话级变量“validate_password_number_count”设置为0时可能会出现。
解决方法
1. 使用有效的口令历史子句:在此之前,您需要先验证口令历史子句是否有效,有效就可以执行ALTER USER语句来加入它。
2. 将变量validate_password_number_count设置为非零值:若变量validate_password_number_count被设置为0,就需要将其恢复到正常的非零数值。此时可以使用如下的SET指令来设置:
SET GLOBAL validate_password_number_count=1;
SET SESSION validate_password_number_count=1;
3. 使用新的ALTER USER语句:如果口令历史子句仍不起作用,就可以切换到新的ALTER USER语句(用于MYSQL 8+的版本),该指令会帮助用户修改用户名以及密码历史:
ALTER USER USER()
IDENTIFIED WITH mysql_native_password BY ‘password’
PASSWORD EXPIRE [ INTERVAL { ‘string’ | number } ]
PASSWORD HISTORY [ NUMBER number ] NO [REUSE PASSWORD];
4. 显式地干预管理:建议用户显式地进行管理,在使用ALTER USER指令时禁用口令历史,能够显著减少用户受到的错误ER_WARNING_PASSWORD_HISTORY_CLAUSES_VOID的影响。