MySQL提供密码过期功能,允许数据库管理员要求用户重置密码。密码可以手动过期,也可以根据策略自动过期(请参阅章节6.2.11“密码管理”).
的改变用户
语句启用帐户密码过期。例如:
修改用户myuser @ localhost
对于每个使用密码过期的帐户的连接,服务器要么断开客户端连接,要么将客户端限制为”沙盒模式,”其中,服务器只允许客户端执行重置过期密码所需的操作。服务器采取的操作取决于客户机和服务器设置,稍后将讨论。
如果服务器断开客户端连接,它将返回一个ER_MUST_CHANGE_PASSWORD_LOGIN
错误:
$> mysql -u myuser -p Password: ****** ERROR 1862 (HY000): Your Password has expired。要登录,必须使用支持过期密码的客户端进行更改。
如果服务器将客户端限制为沙盒模式,则在客户端会话中允许这些操作:
对于会话中不允许的任何操作,服务器返回一个ER_MUST_CHANGE_PASSWORD
错误:
使用performance_schema;错误1820 (HY000):在执行此语句之前,您必须使用ALTER USER语句重置密码。mysql> SELECT 1;错误1820 (HY000):在执行此语句之前,您必须使用ALTER USER语句重置密码。
类的交互调用通常会发生这种情况mysql客户端,因为默认情况下,这样的调用被放在沙盒模式中。要恢复正常功能,请选择新密码。
类的非交互式调用mysql客户端(例如批处理模式),如果密码过期,服务器通常会断开客户端连接。允许非交互mysql调用以保持连接以便可以更改密码(使用沙箱模式中允许的语句),则添加——connect-expired-password
选项。mysql命令。
如前所述,服务器断开密码过期的客户端连接还是将其限制为沙箱模式取决于客户端和服务器设置的组合。下面的讨论描述了相关设置以及它们如何交互。
本讨论仅适用于密码过期的帐户。如果客户端使用未过期的密码连接,服务器将正常处理该客户端。
在客户端,给定的客户端指示它是否可以处理过期密码的沙盒模式。对于使用C客户端库的客户端,有两种方法:
通过
MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS
旗帜mysql_options ()
连接之前:My_bool arg = 1;mysql_options(MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, &arg);
这是在mysql客户端,它启用
MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS
方法进行交互调用或使用——connect-expired-password
选择。通过
CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS
旗帜mysql_real_connect ()
在连接时间:MYSQL MYSQL;mysql_init (mysql);如果(!mysql_real_connect(&mysql,主机,用户,密码,db,端口,unix_socket, CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS){…处理错误…}
其他MySQL连接器有自己的约定来指示准备好处理沙箱模式。请参阅您感兴趣的10bet官方网站连接器的文档。
在服务器端,如果客户端表明它可以处理过期的密码,服务器将其置于沙箱模式。
属性的值,则服务器操作将取决于disconnect_on_expired_password
系统变量:
如果
disconnect_on_expired_password
启用时(默认值),服务器将使用ER_MUST_CHANGE_PASSWORD_LOGIN
错误。如果
disconnect_on_expired_password
禁用时,服务器将客户端置于沙箱模式。