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

一、授权:授予与回收
1.GRANT
GRANT <权限>[,<权限>]…
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]…
[WITH GRANT OPTION];

WITH GRANT OPTION子句:
指定:可以再授予
没有指定:不能传播
[例4.1] 把查询Student表权限授给用户U1

GRANT   SELECT 
  ON   TABLE   Student 
  TO   U1;

数据库作业11:SQL练习7 - GRANT/ REVOKE / AUDIT_第1张图片
数据库作业11:SQL练习7 - GRANT/ REVOKE / AUDIT_第2张图片
[例4.2] 把对Student表和Course表的全部权限授予用户U2和U3

GRANT ALL PRIVILIGES 
      ON TABLE Student,Course 
      TO U2,U3;

这条语句在Oracle上是能运行的,但MS SQL是不支持这种写法,教材上的写法是SQL的标准写法。
on的后面只能接一个对象,也就是说只能分别对U2和U3进行授权。

GRANT ALL PRIVILIGES 
  ON  Student
  TO U2,U3
  GRANT ALL PRIVILIGES 
  ON Course 
  TO U2,U3

[例4.4] 把查询Student表和修改学生学号的权限授给用户U4

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

数据库作业11:SQL练习7 - GRANT/ REVOKE / AUDIT_第3张图片
查询结果如下:
在这里插入图片描述
对属性列的授权时必须明确指出相应属性列名
[例4.5] 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户

  GRANT INSERT 
    ON TABLE SC 
    TO U5
    WITH GRANT OPTION;

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

 GRANT INSERT 
             ON TABLE SC 
             TO U6
             WITH GRANT OPTION;

同样,U6还可以将此权限授予U7:
[例4.7]

GRANT INSERT 
	         ON TABLE SC 
             TO U7;

但U7不能再传播此权限。
执行了例4.1~例4.7语句后学生-课程数据库中的用户权限定义表
数据库作业11:SQL练习7 - GRANT/ REVOKE / AUDIT_第4张图片
2.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权限收回的时候应该使用CASCADE,否则拒绝执行该语句 ;
如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限
执行例4.8~4.10语句后学生-课程数据库中的用户权限定义表
数据库作业11:SQL练习7 - GRANT/ REVOKE / AUDIT_第5张图片
3、数据库角色
角色(ROLE):
被命名的一组与数据库操作相关的权限
角色是权限的集合。可以为一组具有相同权限的用户创建一个角色。
优点:简化授权的过程
1.角色的创建
CREATE ROLE <角色名>

2.给角色授权
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…

3.将一个角色授予其他的角色或用户
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]

一个角色的权限:直接授予这个角色的全部权限加上其他角色
授予这个角色的全部权限
4.角色权限的收回
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…

[例4.11] 通过角色来实现将一组权限授予一个用户
步骤如下:
(1)首先创建一个角色 R1

 CREATE  ROLE  R1;

(2)然后使用GRANT语句,使角色R1拥有Student表的

SELECTUPDATEINSERT权限
       GRANT SELECT, UPDATE, INSERT 
    	 ON TABLE Student 
    	 TO R1;

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

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

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

REVOKE  R1 
     	  FROM 王平;

[例4.12] 角色的权限修改

GRANT DELETE 
    ON TABLE Student
    TO R1;
   

通过改变角色改变上述学生的权限,简化了授权的过程。

[例4.12] 角色的权限修改

 GRANT DELETE 
    ON TABLE Student
    TO R1;

[例4.13]

REVOKE SELECT 
        ON TABLE Student
        FROM  R1;

通过这次实验,明白了以前的问题一定要及时解决,这次花费了半个小时的时间解决数据库连接不上的问题,而且这次实验省略了登录名和用户的建立,在刚开始建立U1的时候出现了
数据库作业11:SQL练习7 - GRANT/ REVOKE / AUDIT_第6张图片
后来解决了,而且测试的时候Windows和其他用户的切换我感觉有点麻烦,有的就省去了,而且!!!这个博客我写了两遍,是因为第一遍忘了!!!保存,所以不多说了,我先发表了

你可能感兴趣的:(数据库作业11:SQL练习7 - GRANT/ REVOKE / AUDIT)