一、了解用户表结构
1.代码演示(按顺序执行)
bash
#1.root用户登录客户端
mysql -u root -p'你的root用户登录密码' #(这里默认采用本地登录)
show databases; #查看所有数据库
# 结果:默认会有mysql用户
use mysql; #使用该数据库
show tables; #展示所有的数据表
# 结果:发现会有一张user用户表
select * from user \G;
# 结果: 会出现很多用户信息(包括主机名,用户名,各种权限等),效果也见下图(只截取一部分)
select user,host,authentication_string from user; #重点查看这几个比较关键的字段,效果也见下图
2.结果演示与解释说明

Host :表示登录主机,这里是localhost表示本地登录
User :表示登陆用户名
Select_priv : 表示是否有select权限,即是否能够使用select,为Y表示可以,N表示不可以。(其他相似字段也是类似的,这里不做过多解释)
authentication_string :表示的是密码加密后的形式

每行的值我就不展示了,可以发现其实就是一张数据表,也就意味着,我们直接对该表进行修改,添加和删除等操作,也可以达到创建用户,修改用户,删除用户等操作,但这里我们不建议这么做,因为MySQL有相应的SQL语句来进行操作。
二、创建用户
bash
create user '用户名'@'登录主机/ip' identified by '你想设置的密码';
# 注意这里不能把密码设置的太简单,如123456,不然会报错,至于为什么,我将放在内容后面讲
成功创建用户,就会在user表中新增该用户的相关信息,也就是在上一个图中新增一行记录。
三、修改用户密码
方式一:使用你创建好的用户登录MySQL客户端,自己修改自己的密码
bash
set password=password('修改的新密码'); #password()用于加密,返回加密后的密码字符串
方式二:使用你root用户登录MySQL客户端,修改任意用户的密码
bash
set password for '用户名'@'登录主机/ip'=password('修改的新密码');
以上两种方式都可以修改密码,可以对比查看authentication_string字段,会发现发生了改变,说明密码修改成功,退出客户端重新登录便需要修改后的新密码
四、删除用户
bash
drop user '用户名'@'登录主机/ip';
对应就会发现,其所在的行记录,便会被删除,再使用该用户登录MySQL客户端便会失败
五、设置用户权限
当你使用刚创建好的用户进行登录时,会发现数据库只有一个information_schema,与root登录时你创建了很多数据库相比,就差很多,这再正常不过了。没有权限啥也做不了,普通用户的权限由超级用户root授予。
bash
grant 权限列表 on 数据库名.对象名 to '用户名'@'登录主机/ip' [identified by '密码'];
权限列表 :若有多个,需用逗号隔开,*表示所有的意思,如 *.*,表示对该用户赋予超级用户root下的所有数据库的所有对象均有权限列表中的权限,便可以执行相关的操作
对象名:可以是表,视图,存储过程等
identified by :可选 ,如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户
例:grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
具体有哪些权限,可见如下:

当用户权限设置好了之后(被修改后),记得刷新一下权限:
bash
flush privileges;
此时再让该用户执行show databases,便发现多了你指定的数据库和数据库对象,便可对它执行相应被赋予的权限的操作,没得授予的权限操作是不会成功的,会报错。
六、查看权限
bash
show grants for '用户名'@'登录主机/ip';
便可以看到该用户被授予的什么权限在哪个数据库的哪张数据表等。
七、回收权限
bash
revoke 权限列表 on 数据库.对象名 from '用户名'@'登录主机/ip';
指定的权限一旦被回收,便不可执行相应的权限操作
注意:授予权限和回收权限都是root登录用户来做的
八、远程登录
如果我们创建的普通用户的登录主机是本地登录localhost的话,是无法进行远端登录的(如用Windows系统下的命令行黑窗口登录MySQL客户端)
若想进行远程登录,可以把登录主机写成%,这样就允许任意的远端的登录啦,但这种操作是十分不推荐的,不安全。
bash
#举个例子
create user 'xxx'@'%' identified by '123456';
如何远程连接
bash
mysql -h 登录主机 -P 端口号 -u 登录用户 -p '密码';
九、密码设置管理
前面说了在创建普通登录用户设置密码时,不能设置的太简单,原因是MySQL会有密码策略。
报错如下:

执行命令及效果如下:

注意:validate_passqword后面要带%这个后缀,不然检索不到
| 全局变量 | 作用 | 最低 | 中等(默认) | 最高 |
|---|---|---|---|---|
| validate_password_check_user_name | 是否检查密码是否包含用户名(防止用户用用户名当做密码) | OFF | OFF | ON |
| validate_password_dictionary_file | 指定一个字典文件路径,密码不能包含该文件中的单词 | ON | ||
| validate_password_length | 密码最小长度 | 8 | 8 | 8 |
| validate_password_mixed_case_count | 密码中必须包含的大写+小写字母的最小数量(混合大小写) | 1 | 1 | 1 |
| validate_password_number_count | 密码中必须包含的数字字符最少数量 | 1 | 1 | 1 |
| validate_password_policy | 密码策略级别,决定校验强度 | LOW | MEDIUM | STRONG |
| validate_password_special_char_count | 密码中必须包含的特殊字符最少数量 | 1 | 1 | 1 |
解释与说明:
1.LOW=仅检查密码长度
2.MEDIUM=LOW+检查数字个数、大小写混合、特殊字符个数
3.STRONG=MEDIUM+字典文件+检查密码是否用户名
4.MySQL默认使用的是MEDIUM策略,对应的其他值也是随着其默认设置的
5.LOW策略的值其他值和MEDIUM策略的其他值是一致的,但是其中只有validate_password_length会生效,其他虽然有值,但MySQL不会去管他,也就是说LOW策略只会有密码长度这一个限制;STRONG策略也是一样的,只是字典文件需要你手动指定和检查密码是否用户名需要手动设置为ON
6.需要注意的最小值限制,例在MEDIUM策略下,修改后的值不能低于策略的最低要求,如果降低标准过度,MySQL可能会报错或者自动调整
7.字典文件不要太大,否则会影响性能(每次设置密码都会逐行匹配),且字典文件必须对MySQL进程可读
安全建议:
1.LOW策略仅适用于测试环境或对安全要求极低的场景
2.生产环境建议使用MEDIUM或STRONG,避免弱密码被轻易破解
总结:

十、自动义设置密码要求(不能自定义密码策略)
临时设置:
bash
# set global 以上全局变量任意一种都行=你想设置的值
set global validate_password_policy=LOW; #把默认的MEDIUM改为LOW
这个方式修改只是临时的,若重启MySQL服务之后,便又会恢复MEDIUM的相关设置
永久设置 :
可以通过修改 /etc/my.cnf 文件,在文件中添加如下一行即可:
bash
set global validate_password_policy=LOW; #其它的也就类似
这个方式设置后,不管MySQL重启多少次,都会是LOW的相关设置,不再是MEDIUM的了
总结:

若有哪里描述不清楚的,欢迎在评论区留言,博主会帮助大家解答。感谢大家的支持!!!