当前课程知识点:MySQL数据库案例教程 > 第7章 用户与权限 > 7.2 权限管理 > 7.2 权限管理 视频
同学们好
欢迎来到MySQL数据库案例教程
今天我们学习第7章用户与权限
本次课的学习内容是
权限管理
主要从权限管理概述
用户权限管理和用户角色管理
三个方面进行讲解
大家都知道
数据库有个典型的特点就是数据共享
比如银行存储的数据
客户档案信息等
那么这些数据
可以无条件共享和增删改查吗
显然是不可以的
为了数据的安全
MySQL对数据库
进行了一些系列的权限管理
首先来看权限管理概述
MySQL服务器通过权限表来控制用户
对数据库的访问
权限表存放在mysql数据库中
由mysql_install_db脚本初始化
其中user表是最重要的一个权限表
它记录了允许连接到服务器的账号信息
里面的权限是全局性的
数据库作用范围权限
主要可以分为以下6大类
全局权限
全局权限是作用在
提供mysql服务的实例下的所有数据库
记录在mysql数据库的user数据表中
接下来还有数据库权限
表权限 列权限
分别记录在mysql数据库的不同数据表中
最后还有存储过程权限
分别作用在存储过程和函数中
代理用户权限
是一个用户成为另一个用户的代理
下面我们来学习用户权限管理
首先是查看权限
语法比较简单
需要注意的是如果查看的
是当前用户的权限
可直接使用show grants
后面的for和用户名省略不写
切换到SQLyog中进行案例1的演示
当前登录的用户是root
所以
查询root用户权限可以直接用show grants
执行SQL语句
在结果中可以看见root用户的权限
包含了所有权限
表明这个是超级用户
接着查询普通用户zhangs的权限
zhangs的权限都是usage
表明当前zhangs无任何权限
二、权限授予
使用GRANT进行授权
在语法中权限列表可以是all
表示所有权限
也可以是select update等权限
当有多个权限时
关键字之间用逗号分开
dbname表示数据库名
tablename指定表名
identified by用于指定用户的登录密码
可以省略不写
最后的with grant option
表示该用户
可以将自己拥有的权限授权给别人
这里需要告诉大家
MySQL数据库有一个很重要的特点
就是权限传递
如果在用户授权的时候
没有加with grant option参数
则权限不能传递
该用户在为其他用户授权时就会提示错误
注意
用户权限的授予可以叠加
比如先给一个用户添加一个select权限
然后又给用户添加一个insert权限
那么该用户就同时拥有select和insert权限
权限控制主要是出于安全因素
因此需要遵循一下几个经验原则
1.只授予能满足需要的最小权限
防止用户误操作改变数据信息
比如用户只是需要查询
那就只给select权限就可以了
不要给用户赋予其他的权限
2.创建用户的时候限制用户的登录主机
在实际开发中一般是限制成指定IP
或者内网IP段
3.初始化数据库的时候
删除没有密码的用户
安装完数据库的时候会自动创建一些用户
这些用户默认没有密码
4.为每个用户设置满足密码复杂度的密码
5.定期清理不需要的用户
可以回收权限或者删除用户
下面通过案例2对用户授权进行实践操作
案例2要求对用户zhangs进行三次授权
并且每次授权之后都要查看一下权限
切换到SQLYog
当前用户zhangs没有任何权限
先授权select
这里*.*指所有数据库
用SHOW GRANTS语句查看结果
此时zhangs的select权限授权成功
继续授权insert
执行查看权限语句
或者通过select语句查询user数据表
我们发现zhangs的select权限字段值
和insert权限字段值都变成Y了
其他权限字段依旧是N
最后进行所有权限授权
执行查看权限语句
此时lis已经具备了超级用户的所有权限了
在MySQL中
为了保证数据库的安全性
需要将用户不必要的权限收回
为了实现这种功能
MySQL提供了
REVOKE语句用来撤销用户的权限
revoke命令语法跟grant命令差不多
只需把关键字to换成from即可
并且不需要设置密码
REVOKE可以收回所有权限
也可以收回部分权限
当收回所有权限时
权限列表用关键词ALL
当收回部分权限时
多个权限名用逗号隔开
下面我们来对案例3进行测试
打开SQLYog窗口
输入REVOKE语句
为了便于直观查看
使用SELECT语句
查询用户zhangs的相关权限字段值
从user表中可以看出
select和insert权限值已经变成N
撤销成功
接下来我们一起学习本次课的第三部分内容
用户角色管理
MySQL8.0新增了角色的概念
使账号权限的管理更加灵活方便
所谓角色就是一些权限的集合
可以为一组具有相同权限的用户创建一个角色
我们在实际开发中授权权限往往是某一批账户
因为账号会绑定IP
不同的IP 虽然账号名相同
但是被视为不同账号
当我们需要对这些账号减少或增加权限时
只需要修改权限集合即可
不用单个账号多次修改
从而大大提高了开发的效率
我们可以将某个角色赋予某个用户
然后这个用户就拥有了这个角色下的所有权限
这种方法使得我们可以定义
不同的角色来分配给不同的用户
例如我们可以定义"开发者角色"
"只读角色","读写角色"等等
不同的角色对应不同的权限
这样对于开发人员
我们只需要将"开发者角色"
授予他们的个人账号即可
对于某些查询用户
只需要授予"只读角色"
对于业务账号
要授予数据库的"读写角色"
为了对角色管理加深理解
我们从以下几个步骤来学习
一是创建角色
用CREATE ROLE语句创建
角色的命名和用户是一样的
由双主键来决定
二是对创建的角色授权
从语法上可以看出
对角色的授权于对用户授权的语句一样
三是将角色授权于用户
与上一个语法不同的地方
在于没有关键字ON了
四是查看用户角色权限
将角色授权给用户后
如果要查看该用户的角色权限
需要在SHOW GRANTS后面
加上USING角色名
五是激活用户角色
这条语句在用户角色管理中常常容易被忽略
导致用户登录数据库后权限无效
激活用户角色有两种方法
可以用SET语句手动激活
在MySQL8.0中还提供了一个参数
用来自动激活用户角色
六是从用户中撤销角色
这个语法跟撤销用户权限一样
都是使用REVOKE语句
最后是删除角色
删除角色
会从授权它的每个用户中撤销该角色
以上是对用户角色管理的简单介绍
接下来通过一个案例对角色管理进行实践
本案例以使用数据库stu为例
打开SQLYog
首先创建用户和角色
创建完成后
可以用select语句查看一下user数据表
我们发现user表中不仅有普通用户user1
还有role_rw也作为用户名出现了
然后对角色进行授权
将这4个权限授权后
再将角色role_rw授权给用户user1
查看用户角色权限
注意这时如果只是SHOW GRANTS语句
查到的结果只有角色role_rw
并且没有显示角色中的权限
所以我们要在后面加上关键字USING
这样就可以看到结果中有select
insert、update和delete四个权限了
第五步激活角色
从上一步来看
用户user1
已经对数据库stu具有查询功能了
现在让用户user1登录MySQL服务器
发现并没有数据库stu
其中的原因就是用户的角色没有激活
现在使用SET语句手动激活角色
然后再次让用户user1登录MySQL
此时发现数据库stu出现了
说明激活成功
所以在给用户授权角色之后
一定不要忘了激活
否则角色中的权限无效
接着看第6步
撤销用户的角色
执行撤销语句
然后用查看用户user1的权限
注意这时不能在查看语句后面
用USING关键字了
因为角色已经不存在了
从查询结果中可以看出
user1变成了无权限
最后删除角色role_rw
执行DROP语句
然后查询user表发现
用户字段中不再有角色role_rw
说明删除成功
现在请大家思考一个问题
在案例4中新建的用户和角色
都添加在mysql数据库的user表中
并且都在同一列中出现
那么当一个角色只授权给一个用户时
这个用户是不是可以当做角色
再授权给其他用户呢?
最后我们来总结一下本节课所学内容
本节课主要介绍了用户权限的分类
用户权限的查看、授予和撤销
以及角色管理
在MySQL8.0相对于以前的版本
有了很大变化
角色管理就是一个新增知识
同学们需要不断学习和测试
对新知识要有强烈的求知探索精神
才能更好的运维MySQL数据库
本次课就讲到这里
谢谢
再见
-1.1 数据库基础知识
-1.2 MySQL的安装与运行
-第1章 测试
-2.1 数据库的基本操作
-2.2 表的基本操作
-2.3 MySQL数据类型
-2.4 约束设置
-2.5 索引
--2-5索引视频
--2-5索引课件
--2-5索引实训
-第2章测试
-3.1 插入记录
-3.2 修改记录
-3.3 删除记录
--3.3删除记录
-第3章 测试
-4.1 select语句
-4.2 单表查询
-4.3 多表查询
-4.4 子查询
--4-4子查询课件
--4-4子查询实训
-4.5 外键
--4-5外键视频
--4-5外键课件
--4-5外键实训
-4.6 视图
--4-6视图视频1
--4-6视图视频2
--4-6视图课件
--4-6视图实训
-第4章测试
-5.1 函数
--5-1系统函数
--5-1函数课件
--5-1 函数实训
-5.2 流程控制语句
-5.3 事务与游标
-5.4 存储过程
-5.5 触发器
--5-5触发器视频
--5-5触发器课件
--5-5触发器实训
-第5章测试
-6.1 数据库备份与还原
-6.2 异构数据源导入导出
-第6章测试
-7.1 用户管理
-7.2 权限管理
-7.3 应用实例开发
-第7章测试