创建用户
CREATE USER 创建用户
1
mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY 'aA1!bB2@';
GRANT 创建用户并赋予权限
1
mysql> GRANT ALL PRIVILEGES ON item TO 'test'@'localhost' IDENTIFIED BY 'aA1!bB2@';
PASSWORD() 会被自动应用在密码字段,用于对密码加密1
2
3
4
5
6mysql> select User, authentication_string from user where user = 'test';
+------+-------------------------------------------+
| User | authentication_string |
+------+-------------------------------------------+
| test | *D6FCEA391DD697FE52A83D74A44512FC26967FB7 |
+------+-------------------------------------------+
其中 *D6FCEA391DD697FE52A83D74A44512FC26967FB7 对应 ‘aA1!bB2@’ 加密后的字段1
2
3
4
5
6mysql> select password('aA1!bB2@');
+-------------------------------------------+
| password('aA1!bB2@') |
+-------------------------------------------+
| *D6FCEA391DD697FE52A83D74A44512FC26967FB7 |
+-------------------------------------------+
修改密码
修改密码方式有两种,通过alter命令或直接修改user表。
ALTER USER
1
mysql> ALTER USER 'test'@'localhost' IDENTIFIED BY 'aA1!bB2@';
SET PASSWORD
1
mysql> SET PASSWORD FOR 'test'@'localhost' = PASSWORD('aA1!bB2@');
UPDTE user
1
2
3mysql> UPDATE user SET authentication_string = PASSWORD('aA1!bB2@') where user = 'test';
mysql> FLUSH PRIVILEGES;
1 | 另一种使命令生效的方式 |
区别:
- UPDATE user 方式需要手动调用PASSWORD()方法
- UPDATE user 方式需要额外调用 FLUSH PRIVILEGES 使权限生效,若忽略,则修改无效
- SET PASSWORD 是否显示调用PASSWORD()方法均可
PASSWORD() 方法
MySQL内部默认对用户密码加密的函数。
- CREATE USER/GRANT/ALTER USER 命令中,均不需要显式调用 PASSWORD() 方法,若多此一举会报语法错误
- UPDATE user 方式直接修改密码时,需要手动调用(不推荐这种修改密码的方式)
密码策略限制
1 | # 当前版本 MySQL 8.0 |
在以上涉及到显式、隐式调用PASSWORD()时,若密码不满足MySQL系统设置的密码复杂度,会报错。
若将上面UPDATE user 命令改为1
mysql> UPDATE user SET authentication_string = 'aA1!bB2@' where user = 'test'
则不会报错。(此处只是用作例子,这种方式修改密码,将导致用户无法登陆)
由此可知系统密码复杂度是直接应用在PASSWORD()方法上。
注意
不同MySQL版本,处理可能略有不同,灵活处理,操作完记得验证一下