- 一、授权与收回
- 二、角色
- 三、视图
- 四、审计
一、授权与收回
1.授权:GRANT
其语义为将对指定操作对象的指定操作权限授予指定的用户
实验开始前我们要新建几个用户,直接在数据库,安全性,用户下右击新建即可,注意用户类型选择不带登录名的用户即可
例4.1 把查询Student表的权限授给用户U1
GRANT select
on table Student
to U1;
但是却显示关键字 ‘to’ 附近有语法错误。
原因是T-SQL中是不需要写TABLE的
执行以下代码
GRANT select
on Student
to U1;
没有出现错误
可在U1用户处点击属性查看有选择权限
例4.2把对Student表和Course表的全部操作权限授予用户U2和U3
GRANT ALL PRIVILEGES
ON Student,Course
TO U2,U3;
这次把TABLE去掉后仍然出现了错误,原因是不能对两个表同时授予权限,分开授权后
GRANT ALL PRIVILEGES
ON Student
TO U2,U3;
GRANT ALL PRIVILEGES
ON Course
TO U2,U3;
这次虽然没有出现错误,但是却出现了提示ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。
例4.3把对表SC的查询权限授予所有用户
GRANT SELECT
ON SC
TO PUBLIC;
例4.4 把查询Student表和修改学生学号的权限授给用户U4
GRANT UPDATE(Sno),SELECT/*对属性列授权时必须明确指出相应的属性列名*/
ON Student
TO U4;
例4.5把对表SC的INSERT权限授予U5用户,并允许将此权限再授予其他用户
GRANT INSERT
ON SC
TO U5
WITH GRANT OPTION;
指定了WITH GRANT OPTION 子句,则获得某种权限的用户还可以把这种权限再授予其他的用户,但要注意不能再把权限再授回给授权者或其祖先
例4.6 从U5给U6权限
GRANT INSERT
ON TABLE SC
TO U6
WITH GRANT OPTION;
例4.7U6给U7权限
GRANT INSERT
ON TABLE SC
TO U7
由于U6未给U7传播的权限,因此U7不能再传播此权限
2.收回 revoke
例4.8 把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON Student
FROM U4;
例4.9 收回所有用户对表SC的查询权限
REVOKE SELECT
ON SC
FROM PUBLIC;
例4.10 把用户U5对SC表的INSERT权限收回
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE
在这里命令执行成功了,但是在以往的例子中CASCADE并没有什么作用,用了级联后,U6和U7的权限也一并取消。
二、角色
1.角色的创建
CREATE ROLE<角色名>
刚刚创建的角色是空的,没有任何内容,可以用GRANT 为角色授权
2.给角色授权
GRANT <权限>[,<权限>]...
ON <对象类型>对象名
TO <角色>[,<角色>]...
3.将一个角色授予其他的角色或用户
GRANT<角色1>,[<角色2>]...
TO <角色3>,[<用户1>]...
[WITH ADMIN OPTION]
该语句把角色授予某用户,或授予另一个角色。这样,一个角色(例如角色3)所拥有的权限就是授予它的全部角色(角色1和角色2)所包含的权限的总和。
如果指定了WITH ADMIN OPTION 子句,则获得某种权限的角色或用户还可以把这种权限再赋予其它的角色。
4.角色权限的收回
REVOKE <权限>[,<权限>]...
ON <对象类型><对象名>
FROM <角色>[,<角色>]...
例4.11 通过角色来实现将一组权限授予一个用户
(1)首先创建一个角色R1
CREATE ROLE R1;
(2)然后使用GRANT语句,使角色R1拥有Student表的SELECT ,UPDATE,INSERT权限
GRANT SELECT,UPDATE,INSERT
ON Student
TO R1;
(3)接着给U1,U2,U3赋予角色
GRANT R1
TO U1,U2,U3;
但是却出现了语法错误
原因是在T-SQL中只能使用以下语句实现
EXEC sp_addrolemember 'R1','U1'
EXEC sp_addrolemember 'R1','U2'
EXEC sp_addrolemember 'R1','U3'
(4)收回U1权限
REVOKE R1
FROM U1
仍然出现语法错误,需用以下语句
EXEC sp_droprolemember 'R1','U1'
例4.12使角色R1在原来的基础上增加了Student表的DELETE权限
GRANT delete
on Student
to R1;
例4.13使R1减少了SELECT权限
REVOKE SELECT
ON Student
from R1;
三、视图
建立计算机系学生的视图,把对该视图的SELECT 权限授予U1,把该视图上的所有操作权限授予U2。
先要创建视图
CREATE VIEW CS_Student
AS
SELECT *
FROM Student
WHERE Sdept='CS';
接着把SELECT权限赋予U1
GRANT SELECT
ON CS_Student
TO 王平;
然后把所有的权限赋给U2
GRANT ALL PRIVILEGES
ON CS_Student
TO U2;
四、审计
例4.15 对修改SC表结构或修改SC表结构数据的操作进行审计
AUDIT ALTER UPDATE
ON SC;
例 4.16 取消对SC表的一切审计
NOAUDIT ALTER UPDATE
ON SC;
要注意的是这两条语句在T-SQL中并不适用,具体方法还有点复杂,就先不写了
第四章的例题就到此结束了,总的来说跟第三章相比要记的东西少了很多,要注意的地方就是授权和角色两部分了。