- 【例4.1】~【例4.13】
- 【例4.14】~【例4.16】可以下周讲完了再做,也可以提前预习、提前做。
1. 在SQLserver上运行,观察运行效果,并把代码写到作业中。
2. 写出自己的理解/收获/心得体会(部分比较复杂的例题,建议增加测试方法和测试数据,举一反三)。
作业原地址:作业
目录
4.2.4授权:授权与收回
1.GRANT
GRANT语句的一般格式:
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
注:如果指定了WITH GRANT OPTION 子句,则获得某种权限的用户还有把这种权限再授予其他用户。若没有指定WITH GRANT OPTION 子句,则获得某种权限的用户只能使用该权限,不能传播该权限。
【例4.1】把查询Student表的权限授给用户U1。
GRANT SELECT
ON TABLE Student
TO U1;
/*!!!错误!!!*/
这里了出现了错误。
插眼
百度了一下,没有找到具体原因,但是找到了改正方法,去掉TABLE就可以了。
GRANT SELECT
ON Student
TO U1;
【例4.2】把对Student表和Course表的全部操作权限授予用户U2和U3。
GRANT ALL PRIVILEGES
ON TABLE Student,Course
TO U2,U3;
既然上例加TABLE有报错,果然这个也有了报错。
【例4.3】把对表SC的查询权限授予所有用户。
GRANT SELECT
ON TABLE SC
TO PUBLIC;
【例4.4】把查询Student表和修改学生学号的权限授给用户U4。
GRANT UPDATE(Sno),SELECT
ON TABLE Student
TO U4;
【例4.5】把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户。
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
【例4.6】U5将对表SC的INSERT权限授予U6。
GRANT INSERT
ON TABLE SC
TO U6
WITH GRANT OPTION;
【例4.7】将上例权限授予U7。
GRANT INSERT
ON TABLE SC
TO U7;
注:因为U6未给U7传播的权限,因此U7不能再传播此权限。
2.REVOKE
授权用户的权限可以由数据库管理员或其他授权者用REVOKE语句收回,其一般格式:
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
【例4.8】把用户U4修改学生学号的权限收回。
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
【例4.9】收回所有用户对表SC的查询权限。
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
【例4.10】把用户U5对SC表的INSERT权限收回。
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;
注:将用户U5的INSERT权限收回的同时,级联收回了U6和U7的INSERT权限,否则系统将拒绝执行该命令。
这里的默认值为CASCADE。
3.创建数据库模式的权限
4.2.5数据库角色
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。
1.创建角色
CREATE ROLE <角色名
2.给角色授权
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…
3.讲一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]
该语句把角色授予某个用户,或授予另一个角色。一个角色所拥有的权限就是授予它的全部角色所包含的权限的总和。
授予者或者是角色的创建者,或者拥有在这个角色上的ADMIN OPTION。
如果指定了WITH ADMIN OPTION 子句,则获得某种权限的角色或用户还可以把这种权限再授予其他角色。
4.角色权限的收回
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
用户可以回收角色的权限,从而修改角色拥有的权限。
【例4.11】通过角色来实现将一组权限授予一个用户。
①首先创建一个角色R1。
CREATE ROLE R1;
②然后使用GRANT语句,使角色R1拥有Student表的 SELECT、UPDATE、INSERT权限。
GRANT SELECT,UPDATE,INSERT
ON TABLE Student
TO R1;
③将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限。
GRANT R1
TO 王平,张明,赵玲;
④也可以一次性通过R1来回收王平的这三个权限。
REVOKE R1
FROM 王平;
【例4.12】角色的权限修改。
GRANT DELETE
ON TABLE Student
TO R1;
【例4.13】使R1减少了SELECT权限
REVOKE SELECT
ON TABLE Student
FROM R1;
4.2.6强制存取控制方法
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类。
主体:是系统中的活动实体。
客体:是系统中的被动实体。
系统存取规则:
(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体。
(2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体。
4.3视图机制
可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内。
视图机制间接地实现支持存取谓词的用户权限定义。
【例4.14】建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明。
CREATE VIEW CS_Student /*先建立视图SC_Student*/
AS
SELECT *
FROM Student
WHERE Sdept='CS';
GRANT SELECT /*王平老师只能检索计算机系学生的信息*/
ON CS_Student
TO 王平;
GRANT ALL PRIVILEGES
ON CS_Student
TO 张明;
4.4审计
审计功能把用户对数据库的所有操作自动记录下来放入审计日志中。
审计员可以利用审计日志监控数据库中的各种行为,重视导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
【例4.15】对修改SC表结构或修改SC表数据的操作进行审计。
AUDIT ALTER,UPDATE
ON SC;
【例4.16】取消对SC表的一切审计。
NOAUDIT ALTER,UPDATE
ON SC;
总结
没什么大难度,就是最开始报的那个错,一直没有搞清楚,好像这些代码加了TABLE都会报错,貌似不加是正确的。
都挺好理解的,格式记住了应该就没什么问题了。
插眼传送:
完成时间:1h19min
以上
————(2020.4.5)