- 创建账户
- 更改密码
- 直接更改当前账户(非匿名)
- 命令行更改帐户密码
- 复制用户密码限制
- 密码过期
- 密码过期策略
- 要求每90天更改一次密码
- 禁用密码有效期
- 密码重用限制【8.0】
- 密码修改验证【8.0.13】
- 支持双密码【8.0.14】
- 生成随机密码【8.0.18】
- 登录失败跟踪和临时帐户锁定【8.0.19】
- 设置账户资源限制
账户密码管理
创建账户
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY '_password_';
更改密码
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY '_password_';
直接更改当前账户(非匿名)
ALTER USER USER() IDENTIFIED BY '_password_';
命令行更改帐户密码
mysqladmin
使用mysqladmin设置密码应该被认为是不安全的。
复制用户密码限制
使用MySQL复制,需要注意 CHANGE MASTER TO 语句限制 32 个字符;如果密码太长会被截断。
密码过期
# 手动使帐户密码失效
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
密码过期策略
default_password_lifetime = 180
默认为 0 ,永不过期
要求每90天更改一次密码
CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
禁用密码有效期
CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;
密码重用限制【8.0】
- 要禁止重复使用最近6个密码或365天以内的密码,请在服务器my.cnf文件中添加以下行 :
[mysqld]
password_history=6
password_reuse_interval=365
或
SET GLOBAL password_history = 6;
SET GLOBAL password_reuse_interval = 365;
- 在允许重复使用之前,至少需要更改5次密码:
CREATE USER 'jeffrey'@'localhost' PASSWORD HISTORY 5;
ALTER USER 'jeffrey'@'localhost' PASSWORD HISTORY 5;
- 要将两种类型的重用限制结合使用
CREATE USER 'jeffrey'@'localhost' PASSWORD HISTORY 5 PASSWORD REUSE INTERVAL 365 DAY;
ALTER USER 'jeffrey'@'localhost' PASSWORD HISTORY 5 PASSWORD REUSE INTERVAL 365 DAY;
密码修改验证【8.0.13】
可以设置在当前用户修改自己密码时候需要输入原密码,由参数 `password_require_current` 控制,默认不需要
# 修改方式
ALTER USER USER() IDENTIFIED BY '_auth_string_' REPLACE '_current_auth_string_';
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY '_auth_string_' REPLACE '_current_auth_string_';
支持双密码【8.0.14】
从MySQL 8.0.14开始,允许用户帐户具有双重密码,分别指定为主要和次要密码。
可以无缝的进行更改密码,而不用停止应用。
示例:
1.在主上修改帐号的密码,设置新密码
ALTER USER 'appuser1'@'host1.example.com' IDENTIFIED BY '_password_b_' RETAIN CURRENT PASSWORD;
2.等待密码复制到从库
3.修改应用程序的密码,使用新的密码进行连接
4.删除旧密码
ALTER USER 'appuser1'@'host1.example.com' DISCARD OLD PASSWORD;
RETAIN CURRENT PASSWORD : 保留帐户的当前密码作为其辅助密码。客户端使用新旧密码都可以连接。`如果使用 alter user 或 set password 设置新密码为空,则旧密码也会变为空`
设置辅助密码需要权限 `APPLICATION_PASSWORD_ADMIN`
生成随机密码【8.0.18】
mysql> CREATE USER 'y1'@'localhost' IDENTIFIED BY RANDOM PASSWORD,'y2'@'%' IDENTIFIED BY RANDOM PASSWORD;
+------+-----------+----------------------+
| user | host | generated password |
+------+-----------+----------------------+
| y1 | localhost | :ir5:D]*cbi}V3aP68/r |
| y2 | % | i2Zi/T+HpEw%MK:j{E5r |
+------+-----------+----------------------+
2 rows in set (0.01 sec)
# 修改为随机密码
mysql> ALTER USER 'y1'@'localhost' IDENTIFIED BY RANDOM PASSWORD, 'y2'@'%' IDENTIFIED BY RANDOM PASSWORD;
生成的密码长度默认为 20 ,长度由参数 `generated_random_password_length`控制[5 - 255]
登录失败跟踪和临时帐户锁定【8.0.19】
对账户设置登陆失败次数和锁定时间
CREATE USER 'u1'@'localhost' IDENTIFIED BY '_password_' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 3;
设置账户资源限制
可以对账户进行如下限制:
- 帐户每小时可发出的查询数量
- 帐户每小时可以发布的更新次数
- 帐户每小时可以连接到服务器的次数
- 帐户同时连接到服务器的数量
# 设置资源限制
CREATE USER 'francis'@'localhost' IDENTIFIED BY 'frank'
WITH MAX_QUERIES_PER_HOUR 20
MAX_UPDATES_PER_HOUR 10
MAX_CONNECTIONS_PER_HOUR 5
MAX_USER_CONNECTIONS 2;
# 修改
mysql> ALTER USER 'francis'@'localhost' WITH MAX_QUERIES_PER_HOUR 100;
# 删除限制
mysql> ALTER USER 'francis'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 0;