【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT

首先让我们创建几个用户,然后我发现,用户的登录名不能一样,不然会报错。

【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第1张图片
关系数据库系统中的存取权限
【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第2张图片

授权

GRANT <权限>[,<权限>]... 
ON <对象类型> <对象名>[,<对象类型> <对象名>]TO <用户>[,<用户>]...
[WITH GRANT OPTION];   /*指定:可以再授权。  没有指定:不能传播*/

语义:将对指定操作对象的指定操作权限授予指定的用户。

【例4.1】把查询Student表权限授给用户U1

GRANT SELECT 
ON Student 
TO U1;

应该是语法问题吧,一开始加TABLE他给我报错,查了一下,应该去掉。
【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第3张图片
【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第4张图片
【例4.2】把对Student表和Course表的全部权限授予用户U2和U3

GRANT ALL
ON Student 
TO U2,U3;

GRANT ALL
ON Course
TO U2,U3;

一开始的代码,他给我报错,说,附近有错误,我查了查是只能一次授权一个表。然后她又说PRIVILEGES附近有错,我去掉之后,成功运行了,但是他下边又说 ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。但是用户里边是授权了的。
【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第5张图片

[例4.3] 把对表SC的查询权限授予所有用户

GRANT SELECT 
ON SC 
TO PUBLIC;

就public角色那有,用户那没显示SC的权限。
【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第6张图片
【例4.4】把查询Student表和修改学生学号的权限授给用户U4

GRANT UPDATE(Sno),SELECT 
ON Student 
TO U4;

对属性列的授权时必须明确指出相应属性列名。
这个更新是黑块诶,别的是对勾。
【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第7张图片
【例4.5】把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户。

GRANT INSERT 
ON SC 
TO U5
WITH GRANT OPTION;

执行例4.5后,U5不仅拥有了对表SC的INSERT权限,还可以传播此权限:
【例4.6】

GRANT INSERT 
ON SC 
TO U6
WITH GRANT OPTION;

(不过我觉得这个也不是U5授权的阿,那不是前边授权都是这样的吗)
同样,U6还可以将此权限授予U7:
【例4.7】

GRANT INSERT 
ON SC 
TO U7;

但U7不能再传播此权限。
【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第8张图片
REVOKE回收授权⬇

REVOKE <权限>[,<权限>]... 
ON <对象类型> <对象名>[,<对象类型><对象名>]FROM <用户>[,<用户>]...[CASCADE | RESTRICT];

【例4.8】把用户U4修改学生学号的权限收回

REVOKE UPDATE(Sno)
ON Student 
FROM U4;

【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第9张图片
【例4.9】收回所有用户对表SC的查询权限

REVOKE SELECT 
ON SC 
FROM PUBLIC;

【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第10张图片
【例4.10】把用户U5对SC表的INSERT权限收回

REVOKE INSERT 
ON SC 
FROM U5 CASCADE ;

将用户U5的INSERT权限收回的时候应该使用CASCADE,否则拒绝执行该语句 。(感动数据库!!!CASCADE终于有用了)

如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限 。
不过我这U6还能用也能给别人授权,这又让我怀疑我刚刚给U6 授权的时候不是U5给的。
【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第11张图片

角色(ROLE)⬇
被命名的一组与数据库操作相关的权限。
· 角色是 权限的集合。可以为一组具有相同权限的用户创建一个角色。
· 优点:简化授权的过程。

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 <角色>[,<角色>]

用户可以回收角色的权限,从而修改角色拥有的权限
REVOKE执行者是:角色的创建者 / 拥有在这个(些)角色上的ADMIN OPTION。
【例4.11】通过角色来实现将一组权限授予一个用户。
步骤如下:
(1)首先创建一个角色 R1

CREATE ROLE R1;

(2)然后使用GRANT语句,使角色R1拥有Student表的 SELECT、UPDATE、INSERT权限

GRANT SELECT,UPDATE,INSERT 
ON Student 
TO R1;

(3)将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限

GRANT R1 
TO 王平,张明,赵玲;

(4) 可以一次性通过R1来回收王平的这3个权限

REVOKE R1 
FROM 王平;

应该还是语法问题,提示R1附近有错误。
我查了半天,还去老师那嚎,不过还是查到了。我怎么就忘了去T-SQL的那查呢,就干在百度和CSDN查,我好憨阿!!唉,查到一个语句之后才在老师博客的网站里看了一遍。
这是在角色里添加用户,但是添加之后的用户那里并没有角色拥有的权限

EXEC sp_addrolemember 'R1','U7'

EXEC sp_droprolemember 'R1','U7'

ALTER ROLE R1
ADD/DROP MEMBER U7   
 /*这是后来在老师发的博客里那个网站发现的,上一句也有,但是看起来用这个比较好,我自己试了试,成功了但是没截图*/

【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第12张图片

【例4.12】角色的权限修改。
使角色R1在原来的基础上增加了Student表的DELETE 权限。

GRANT DELETE 
ON Student
TO R1;

【例4.13】 使R1减少了SELECT权限

REVOKE SELECT 
ON Student
FROM R1;

【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第13张图片
上节课的例题做完了,总结一下:
1.ON后边不用加TABLE直接写名字就行.
2.ALL PRIVILIGES只写ALL就行。
3.给角色添加删除用户的时候跟书上不一样。
下边是要预习的内容


强制存取控制规则
(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读相应的客体
(2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
视图机制
把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
间接地实现支持存取谓词的用户权限定义

【例4.14】建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明

--先建立计算机系学生的视图CS_Student
CREATE VIEW CS_Student
AS 
SELECT *
FROM Student
WHERE Sdept='CS';

--在视图上进一步定义存取权限
GRANT SELECT
ON CS_Student  
TO U3;
     
GRANT ALL
ON CS_Student  
TO U2; 

【数据库作业11】SQL练习7 - GRANT/ REVOKE / AUDIT_第14张图片
审计
审计日志:将用户对数据库的所有操作记录在上面
审计员利用审计日志 监控数据库中的各种行为,找出非法存取数据的人、时间和内容。

AUDIT语句:设置审计功能
NOAUDIT语句:取消审计功能

【例4.15】对修改SC表结构或修改SC表数据的操作进行审计

AUDIT ALTER,UPDATE  
ON SC;

【例4.16】 取消对SC表的一切审计

NOAUDIT ALTER,UPDATE  
ON SC;

我看微软那边写的TSQL的审核功能有创建服务器//数据库审核规范对象啥的。看半天也没整明白

存取谓词相当于权限的条件(个人理解)
至于为什么不直接用基本表要用视图间接完成,练习题有一个是让每个职工可以查询自己的信息。

GRANT SELECT
ON 职工
WHEN USER()=NAME   /*这句就是存取谓词*/
TO ALL

在标准sql里是直接用的基本表完成要求的,
但是T-SQL不支持直接使用存取谓词,所以得用视图完成。
而且有的时候用视图更方便(比如练习题最后一题

CREATE VIEW MY
AS
SELECT*
FROM 职工
WHERE NAME=USER

GRANT SELECT
ON MY
TO ALL

你可能感兴趣的:(笔记)