连接服务器密码显示过期,mysql8 参考手册--过期密码的服务器处理

当MySQL服务器的密码过期,它可能会断开客户端连接或将其限制在沙盒模式下,允许用户通过ALTER USER或SET PASSWORD重置密码。在非交互式客户端中,可以使用--connect-expired-password选项保持连接。服务器的disconnect_on_expired_password变量控制是断开连接还是进入沙盒模式。客户端需要能够处理过期密码的模式才能进行密码更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

过期密码的服务器处理

MySQL提供了密码过期功能,该功能使数据库管理员可以要求用户重置密码。密码可以根据自动过期策略手动过期(请参见 第6.2.15节“密码管理”)。

ALTER USER语句启用帐户密码到期。例如:

ALTER USER 'myuser'@'localhost' PASSWORD EXPIRE;

对于每个使用具有过期密码的帐户的连接,服务器要么断开客户端的连接,要么将客户端限制为“ 沙箱模式 ”,在该模式下,服务器允许客户端仅执行重置过期密码所需的那些操作。服务器采取哪种操作取决于客户端和服务器设置,这将在后面讨论。

如果服务器断开客户端的连接,则返回 ER_MUST_CHANGE_PASSWORD_LOGIN 错误:

shell> mysql -u myuser -p

Password: ******

ERROR 1862 (HY000): Your password has expired. To log in you must

change it using a client that supports expired passwords.

如果服务器将客户端限制为沙盒模式,则在客户端会话中允许以下操作:

客户可以使用ALTER USER或 重置帐户密码 SET PASSWORD。完成此操作后,服务器将恢复会话以及使用该帐户的后续连接的正常访问。

注意

尽管可以通过将过期的密码设置为当前值来“ 重置 ”它,但出于良好的政策考虑,最好选择其他密码。DBA可以通过建立适当的密码重用策略来强制不重用。请参阅 密码重用策略。

客户端可以使用该 SET 语句。

对于会话中不允许的任何操作,服务器将返回ER_MUST_CHANGE_PASSWORD 错误:

mysql> USE performance_schema;

ERROR 1820 (HY000): You must reset your password using ALTER USER

statement before executing this statement.

mysql> SELECT 1;

ERROR 1820 (HY000): You must reset your password using ALTER USER

statement before executing this statement.

这就是mysql客户端交互调用通常发生的情况, 因为默认情况下,此类调用处于沙盒模式。要恢复正常运行,请选择一个新密码。

对于mysql 客户端的非交互式调用(例如,以批处理方式),如果密码过期,则服务器通常会断开与客户端的连接。要允许非交互式mysql调用保持连接状态,以便可以更改密码(使用沙箱模式中允许的语句),请--connect-expired-password在mysql命令中添加该 选项。

如前所述,服务器是否断开密码过期的客户端或将其限制为沙盒模式取决于客户端和服务器设置的组合。以下讨论描述了相关设置及其交互方式。

注意

此讨论仅适用于密码过期的帐户。如果客户端使用未过期的密码进行连接,则服务器将正常处理该客户端。

在客户端,给定的客户端指示它是否可以处理过期密码的沙箱模式。对于使用C客户端库的客户端,有两种方法可以执行此操作:

在连接之前 将MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS标志传递 mysql_options()给:

bool arg = 1;

mysql_options(mysql,

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);

if (!mysql_real_connect(&mysql,

host, user, password, db,

port, unix_socket,

CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS))

{

... handle error ...

}

其他MySQL连接器具有自己的约定,以指示准备处理沙箱模式。请参阅您感兴趣的连接器的文档。

在服务器端,如果客户端指示它可以处理过期的密码,则服务器会将其置于沙盒模式。

如果客户端未指示它可以处理过期的密码(或使用客户端库无法指示的旧版本),则服务器操作取决于disconnect_on_expired_password 系统变量的值 :

如果 disconnect_on_expired_password 启用(默认值),则服务器会断开连接,并显示 ER_MUST_CHANGE_PASSWORD_LOGIN 错误消息。

如果 disconnect_on_expired_password 禁用此选项,则服务器会将客户端置于沙盒模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值