MySQL设置密码过期的3种方法(附带实例)
在 MySQL 中,数据库管理员可以手动设置密码过期,也可以建立一个自动密码过期策略。密码过期策略既可以是全局的,也可以为每个用户单独设置。
例如,将 zhang3 用户的密码设置为立即过期,具体 SQL 语句如下所示:
虽然上述语句将 zhang3 用户的密码设置为立即过期,但 zhang3 用户仍然可以登录 MySQL 服务器,进入数据库,只是无法执行查询操作。密码过期后,必须重新设置密码,否则会报如下错误信息:
MySQL 使用系统变量 default_password_lifetime 建立全局密码过期策略:
建立全局密码过期策略的方式有两种:
1) 使用 SET 语句更改系统变量 default_password_lifetime 的值并持久化。
2) 在 my.cnf 配置文件中进行维护:
在 CREATE USER 和 ALTER USER 语句中加入 PASSWORD EXPIRE 选项,即可实现单独用户密码过期策略设置。下面是一些语句示例:
设置密码立即过期
手动设置密码立即过期,可以使用如下 SQL 语句:mysql> ALTER USER user PASSWORD EXPIRE;
例如,将 zhang3 用户的密码设置为立即过期,具体 SQL 语句如下所示:
mysql> ALTER USER 'zhang3'@'localhost' PASSWORD EXPIRE;
虽然上述语句将 zhang3 用户的密码设置为立即过期,但 zhang3 用户仍然可以登录 MySQL 服务器,进入数据库,只是无法执行查询操作。密码过期后,必须重新设置密码,否则会报如下错误信息:
mysql> SHOW DATABASES; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
设置密码指定时间过期
如果密码使用时间长于允许时间,那么服务器会自动将其设置为过期,不需要手动设置。MySQL 使用系统变量 default_password_lifetime 建立全局密码过期策略:
- 该系统变量的默认值是 0,表示禁用自动密码过期策略;
- 该系统变量允许的值是正整数 N,表示允许的密码生存期。密码必须每隔 N 天进行一次修改。
建立全局密码过期策略的方式有两种:
1) 使用 SET 语句更改系统变量 default_password_lifetime 的值并持久化。
SET PERSIST default_password_lifetime = 180; #建立全局密码过期策略,设置密码每隔180天过期
2) 在 my.cnf 配置文件中进行维护:
[mysqld] default_password_lifetime=180 #建立全局密码过期策略,设置密码每隔180天过期
单个用户密码过期设置
每个用户既可以沿用全局密码过期策略,也可以单独设置密码过期策略。在 CREATE USER 和 ALTER USER 语句中加入 PASSWORD EXPIRE 选项,即可实现单独用户密码过期策略设置。下面是一些语句示例:
# 设置 zhang3 用户的密码每隔 90 天过期 CREATE USER 'zhang3'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY; ALTER USER 'zhang3'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY; # 设置密码永不过期 CREATE USER 'zhang3'@'localhost' PASSWORD EXPIRE NEVER; ALTER USER 'zhang3'@'localhost' PASSWORD EXPIRE NEVER; # 沿用全局密码过期策略 CREATE USER 'zhang3'@'localhost' PASSWORD EXPIRE DEFAULT; ALTER USER 'zhang3'@'localhost' PASSWORD EXPIRE DEFAULT;