文章目录
- 一、用户管理
- 1.1 登录Mysql服务器
- 1.2 创建用户
- 1.3 删除用户
- 1.4 修改用户密码
- 1.4.1 修改自己的密码
- 1.4.2 修改别人的密码
- 1.5 密码过期策略
- 1.5.1 密码过期策略
- 1.5.2 密码重用策略
- 二、权限管理
- 2.1 权限列表
- 2.2 授予权限的原则
- 2.3 授予权限
- 2.4 查看权限
- 2.5 收回权限
- 三、权限表
- 四、角色管理
- 角色的理解
- 创建角色
- 查看权限
- 回收权限
- 删除角色
- 给用户某个权限
- 激活角色
- 设置角色默认激活
- 查看已激活角色
- 撤销用户角色
一、用户管理
Mysql用户可分为普通用户和root用户。root用户是超级管理员,所拥有的权限,包括创建、删除、修改密码等所有权限
而普通用户只拥有被授予的各种权限。
1.1 登录Mysql服务器
# 登录完整命令
mysql -h hostname|hostIP -P prot -u username -p password DatabaseName -e sql语句
- -h : 主机名或者ip
- -P : 端口
- -u : 用户名
- -p : 密码
- DatabaseName : 指明登录到哪个数据库
- -e : sql语句
1.2 创建用户
# 创建用户 ttst 只允许本地连接(把@''去掉 默认为所有ip都可访问) 密码为 abc123 创建下后权限只有登录权限
create user 'ttst'@'localhost' identified by 'abc123';
修改用户用户信息直接修改user表就行
1.3 删除用户
drop
# 可同时删除多个也可以删除单个默认Host是%
drop user username1,username2,username3....
# 如果用户的host字段是localhost需要使用以下命令
drop user username@'localhost'
也可以使用delete(不推荐)
delete from mysql.user where host='hostname' and user='username';
不推荐使用 delete 进行删除,系统会有残留信息。drop会将user的对应的权限也删除,但delete不会。
1.4 修改用户密码
1.4.1 修改自己的密码
alter (推荐)
alter user user() identified by '123456'
set
set password = '123456'
1.4.2 修改别人的密码
alter (推荐)
alter user 'username'@'%' identified by '123456'
set
set password for 'username'@'%' = '123456'
1.5 密码过期策略
- 密码过期:要求定期修改密码
- 密码重用限制:不允许使用旧密码
- 密码强度评估:要求使用高强度密码
1.5.1 密码过期策略
- 在MySQL中,数据库管理员可以
手动设置
账号密码过期,也可建立一个自动
密码过期策略 - 过期策略可以是
全局的
,也可以是为每个账号
设置单独的过期策略
手动设置立马过期
alter user user password expire;
密码过期后仍可以进入数据库,但无法查询。只有当用户自行设置新密码才可以正常使用.
手动设置指定时间过期方式:全局
如果密码使用的时间大于允许时间,服务器会自动设置为过期,不需要手动设置。
MySql使用default_password_lifetime
系统变量建立全局密码过期策略。
- 默认值为0,表示禁用自动密码过期。
- 它允许的值是整数N,表示密码生存期。密码必须
每隔N天
进行修改。
set persist default_password_lifetime = 180; # 建立全局策略,每隔180天过期
手动设置指定时间过期方式:单独
# 创建时90天过期
create user 'username' password expire interval 90 day;
1.5.2 密码重用策略
MySQL限制使用已用过的密码。重用限制策略基于密码更改的数量
和使用时间
。重用策略可以是全局
的,也可以为每个账号设置单独的策略
- 账号的历史密码包含过去该账号所使用的密码,Mysql基于以下规则来限制密码重用:
- 如果账号的密码限制
基于密码修改的数量
,那么新密码不能从最近限制的密码数量中选择。例如,如果密码更改的最小值为3,那么新密码不能与最近3个密码中任何一个相同 - 如果账号密码限制
基于时间
,那么新密码不能从规定时间内选择。例如,如果密码重用周期为60天,那么新密码不能从最近60天内使用的密码中选择。
- MySql使用password_history和password_reuse_interval系统变量设置密码重用策略。
-
password_history
:规定密码重用的数量 -
password_reuse_interval
:规定密码重用周期
- 这两个值可在
服务器的配置文件
中进行维护,也可以在运行期间使用SQL语句更改
该变量的值并持久化。
手动设置密码重用方式:全局
命令
# 设置不能使用最近使用过的6个密码
set persist password_history = 6;
# 设置不能选择最近一年内的密码
set persist password_reuse_interval = 365;
配置
[mysqld]
password_history=6
password_reuse_interval=365
手动设置密码重用方式:单独
create user 'username' password history 5;
create user 'username' password reuse interval 365 day;
二、权限管理
2.1 权限列表
展示所有权限
show privileges ;
权限分布 | 可能设置的权限 |
表权限 | select insert update delete create drop grant references index alter |
列权限 | select insert update references |
过程权限 | execute alter routine grant |
2.2 授予权限的原则
权限控制主要是出于安全因素,因此要遵循以下几个经验原则
:
- 只能授予
满足需要的最小权限
。 - 创建用户时
限制用户的登陆主机
一般是限制成指定ip或者内网。 - 为每个用户
设置满足密码复杂度的密码
。 -
定期清理不需要的用户
,回收权限或删除用户
2.3 授予权限
给用户授权的方式有2种,分别是通过把角色赋予用户给用户授权
、直接给用户授权
。
grant 权限1,权限2,...权限N on 数据库名.表名称 to 用户名@用户地址;
2.4 查看权限
查看当前权限
# 这仨都行
show grants;
show grants for current_user;
show grants for current_user();
查看某用户全部权限
show grants for 'username'@'地址';
2.5 收回权限
revoke 权限1,权限2,...权限N on 数据库名.表名称 from 用户名@用户地址;
三、权限表
Mysql服务通过 权限表
来 控制用户对数据库的访问,
权限表存放在 mysql数据库
中。MySQL数据库系统会根据这些权限表的内容为每个用户赋予相应的权限。
这些表中最重要的是 user表
db表
除此之外还有 table_priv表
column_priv表
proc_priv表
等
在MySQL启动时,服务器将这些数据库表中权限信息的内容读入内存
四、角色管理
角色的理解
角色是在Mysql8.0中引入的新功能。在mysql中, 角色是权限的集合
,可以为角色添加或移除权限。用户可以被赋予角色,同事也被授予角色包含的权限。对角色进行操作需要较高的权限,并且像用户账户一样,角色可以拥有授予和撤销的权限。
引入角色的目的是 方便管理拥有相同权限的用户
。恰当的权限设定,可以确保数据的安全性,这是至关重要的。
创建角色
# 创建角色 manager 角色
create role 'manager'@'%'
# 授予 manager角色 dbtest1数据库中所有表的查询更新的权限
grant select,update on dbtest1.* to 'manager';
# 授予 boss角色 所有权限(boss角色需要自行创建)
grant all privileges on *.* to 'boss';
查看权限
# 查看某个角色的权限
show grants for 'manager'@'%'
回收权限
revoke privileges on tablename from 'rolename';
删除角色
drop role 'rolename';
给用户某个权限
# 将manager角色 给到 lisi用户
grant 'manager'@'%' to 'lisi'@'%';
激活角色
set default 'manager'@'%' all to 'lisi'@'%';
设置角色默认激活
set global activate_all_roles_on_login=ON;
查看已激活角色
select current_role();
撤销用户角色
revoke role from user;