由于U5前面只被授予了sc表插入的权限,所以只能看见mydb1下sc表
GRANT INSERT ON TABLE sc TO 'U6'@'localhost';
在root用户下查看U6的权限:
SHOW GRANTS FOR 'U6'@'localhost';
由于U5没有给U6转授权限的权限,所以U6只能使用权限,不能授予其他用户权限。
6. REVOKE
REVOKE 权限 [,权限] ... ON 对象类型 对象名 [,对象类型 对象名 ] ... FROM 用户 [, 用户] [CASCADE | RESTRICT];
[例4.8]把用户U4修改学生学号的权限收回。
REVOKE UPDATE(Sno) ON TABLE student FROM 'U4'@'localhost'; SHOW GRANTS FOR 'U4'@'localhost';
[例4.9]收回所有用户对表SC的查询权限。
REVOKE SELECT ON TABLE sc FROM PUBLIC;
mysql不支持
[例4.10]把用户U5对SC表的INSERT权限收回。
级联收回U6,mysql不支持cascade | restrict
mysql默认不会级联收回
REVOKE INSERT ON TABLE sc FROM 'U5'@'localhost'; SHOW GRANTS FOR 'U5'@'localhost'; SHOW GRANTS FOR 'U6'@'localhost';
用户可以 “自主”地决定 将数据的存取权限授予何人、决定是否也将“授权”的权限授予别人。因此称这样的存取控制是 自主存取控制。
7. 创建数据库模式的权限
CREATE USER username [WITH] [DBA | RESOURCE | CONNECT]
mysql不支持
- 新创建的数据库用户有三种权限: CONNECT、 RESOURCE和DBA。
- 默认该用户拥有CONNECT权限。拥有CONNECT权限的用户不能创建新用户,不能创建模式,也不能创建基本表,只能登录数据库。
- 拥有RESOURCE权限的用户能创建基本表和视图,成为所创建对象的属主,但不能创建模式,不能创建新的用户。
- 拥有DBA权限的用户是系统中的超级用户,可以创建新的用户、创建模式、创建基本表和视图等: DBA拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户。
8. MySQL授予创建权限:
- 创建数据库权限,但是无删除权限:
GRANT CREATE ON *.* TO 'U2'@'%'; SHOW GRANTS FOR 'U2'@'%';
第一个 * 表示数据库,第二个 * 表示表格
- 授予用户最高权限:
GRANT ALL PRIVILEGES ON *.* TO 'U3'@'localhost'; SHOW GRANTS FOR 'U3'@'localhost';
4.2.5 数据库角色
mysql8.0 以上才支持角色
mysql用户被授予角色还要激活(授予角色的授予者进行激活)
`set default role all to 用户
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。
可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。
在SQL中首先用CREATE ROLE语句创建角色,然后用GRANT语句给角色授权,用REVOKE语句收回授予角色的权限。
1. 角色的创建
创建角色的SQL语句格式是:
CREATE ROLE 角色名;
刚刚创建的角色是空的,没有任何内容。
CREATE ROLE r1; SHOW GRANTS FOR r1;
2. 给角色授权
数据库管理员和用户可以利用GRANT语句将权限授予某一个或几个角色。
GRANT 权限 ON 对象类型 对象名 TO 角色;
CREATE ROLE r2; GRANT SELECT ON TABLE mydb1.sc TO r1, r2; SHOW GRANTS FOR r2;
3. 将一个角色授予其他的角色或用户
GRANT 角色 TO 角色 | 用户 WITH ADMIN OPTION;
- 该语句把角色授予某用户,或授予另一个角色。
- 一个角色所拥有的权限就是授予它的全部角色所包含的权限的总和。
- 授予者或者是角色的创建者,或者是拥有在这个角色上的ADMIN OPTION。
- 如果指定了WITH ADMIN OPTION子句,则获得某种权限的角色或用户还可以把这种权限再授予其他的角色。
- 一个角色包含的权限包括直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限。
GRANT r1 TO 'U1'@'localhost' WITH ADMIN OPTION ; SHOW GRANTS FOR 'U1'@'localhost';
mysql8.0 以上才支持角色
mysql用户被授予角色还要激活(授予角色的授予者进行激活)
`set default role all to 用户
4. 角色权限的收回
REVOKE 权限 [, 权限] ON 对象类型 对象名 FROM 角色 [, 角色];
用户可以收回角色的权限,从而修改角色拥有的权限。
REVOKE 的执行者是角色的创建者或拥有这个角色上ADMIN OPTION
例:通过角色来实现一组权限授予一个用户
创建角色role1
CREATE ROLE role1;
给角色role1授予Student表的查询、更新、插入权限
GRANT SELECT, UPDATE, INSERT ON TABLE Student TO role1;
将role1授予U3,U5
GRANT role1 TO 'U3'@'localhost', 'U5'@'localhost';
收回U3的role1角色
REVOKE role1 FROM 'U3'@'localhost';
修改role1的权限
GRANT DELETE ON TABLE Student TO role1; REVOKE SELECT ON TABLE student FROM role1; SHOW GRANTS FOR role1;
4.3 视图机制
可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内。
也就是说,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护。
视图机制间接地实现支持存取谓词的用户权限定义。
[例4.14] 建立计算机系学生的视图,把对该视图的SELECT 权限授予王平,把该视图上的所有操作权限授予张明。
CREATE VIEW CS_stu AS SELECT * FROM student WHERE Sdept = 'CS';
CREATE USER '王平'@'%' IDENTIFIED BY '123456'; CREATE USER '张明'@'%' IDENTIFIED BY '123456'; GRANT SELECT ON TABLE CS_stu TO '王平'@'%'; GRANT ALL ON CS_stu TO '张明'@'%'; SHOW GRANTS FOR '王平'@'%'; SHOW GRANTS FOR '张明'@'%';
4.4 审计
审计功能把用户对数据库的所有操作自动记录下来放入审计日志中。
审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
4.5 数据加密
数据加密主要包括:
- 存储加密
- 传输加密
4.6 其他安全保护
- 推理控制
- 隐蔽信道