目录
自主存取控制方法
关系数据库系统中的存取权限
授权:授予与收回
1.GRANT
一般格式:
GRANT<权限>[<权限>]
ON<对象类型><对象名>[<对象类型><对象名>]
TO<用户>[<用户>]
[WITH GRANT OPTION]; --获得某种权限的用户还可以把这种权限授予其他用户
工欲善其事,先得利个器,建几个用户名用来进行下面的实验
对于一个用户名而言,只能使用一个独立的登录名,所以要建立多个登录名来给用户名使用,若使用同一个登录名,就会出现
这种情况,就先创建登录名,为了对应过去,选择名字一致
然后构建数据库用户
详细过程参考
例4.1 把查询Student表的权限授予用户U1
GRANT SELECT
ON TABLE Student
TO U1;
EMMMM,又是T-SQL和标准SQL的问题吗,我的参考,原来不用指代TABLE啊
GRANT SELECT
ON Student
TO U1;
点属性进行查询
对于未进行任何操作的用户其权限为空,授予之后就出现了如下的权限:
例4.2 把对Student表和Course表的全部操作权限授予用户U2和U3
GRANT ALL PRIVILEGES
ON Student,Course
TO U2,U3;
哦吼~这毛病挺多啊,CSDN后发现无法同时对两个表进行授权,但可以对多个用户进行多个权限的授予
正确代码为:
GRANT ALL PRIVILEGES
ON Student
TO U2,U3;
GRANT ALL PRIVILEGES
ON Course
TO U2,U3;
然后出现了:
还好没出错,T-SQL和标准SQL差距实在给我整怕了
发现授予的所有权限包括:插入、更新、删除、选择、引用
例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;
例4.6 将U5的权限授予U6
GRANT INSERT
ON SC
TO U6
WITH GRANT OPTION;
例4.7 U6也可以将其授予
GRANT INSERT
ON SC
TO U7;
2.REVOKE
一般格式:
REVOLE<>[<>]
ON<>[<>]
FROM<>[<>][DASCADE|RESTRICT]
例4.8 把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno)
ON Student
FROM U4;
例4.9 收回所有用户对表CS的查询权限
REVOKE SELECT
ON SC
FROM PUBLIC;
例4.10 把用户对SC表的INSERT权限收回
REVOKE INSERT
ON SC
FROM U5 CASCADE;
此时U5没有任何权限
数据库角色
1.角色的创建
格式语句为:
CREATE ROLE <角色名>;
2.给角色授权
GRANT <权限>[<权限>]
ON<对象类型>对象名
TO<角色>[<角色>]
3. 将一个角色授予其他的用户或用户
GRANT <角色1>[<角色2>]
TO<角色3>[<用户1>]
[WITH ADMIN OPTION]; --则获得某种权限的角色或用户还可以把这种权限授予其他角色
该语句时把角色授予某用户,再授予另一个角色,这样,一个角色(3)有的权限就是授予他的全部角色(1和2)所包含权限的总和。
4.角色权限的收回
REVOKE <权限>[<权限>]
ON<对象类型><对象名>
FROM<角色>[<角色>]
例4.11 通过角色来实现将一组权限授予一个用户
CREATE ROLE R1; --首先创建一个角色R1
GRANT SELECT,UPDATE,INSERT
ON Student
TO R1; -- 使用GRANT语句,使角色R1拥有Student表的SELECT、UPDATE、INSERT权限
然后使用最土的方法建立三个人的用户(不是建立角色,我在这卡了半小时,吐了)
执行下面的语句,为R1添加角色成员:
ALTER ROLE R1
ADD MEMBER 王平;
ALTER ROLE R1
ADD MEMBER 张明;
ALTER ROLE R1
ADD MEMBER 赵玲;
王平的属性:
R1的属性
也可以一次性的收回王平的三个权限:
REVOKE R1
FROM 王平;
T-SQL的正常操作罢了,我不难受,一点都步,呜~~~
正确语句:
exec sp_droprolemember 'R1','王平';
其余人员同理。。。
例4.12 角色权限的修改(在角色R1的基础上增加Student的DELETE权限
GRANT DELETE
ON Student
TO R1;
例4.13 使R1减少SELECT权限
REVOKE SELECT
ON Student
FROM R1;
视图机制
例4.14 建立计算机系学生的视图,把对该视图的SELECT权限授予王平,把该视图上的所有操作权限授予张明
CREATE VIEW CS_Student --先建立视图CS_Student
AS
SELECT *
FROM Student
WHERE Sdept='CS';
GRANT SELECT --王平老师只能检索计算机系学生的信息
ON CS_Student
TO 王平;
GRANT ALL --系主任具有检索和增删改计算机系学生信息的所有权限
ON CS_Student
TO 张明;
审计
例4.15 对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER,UPDATE
ON SC;
我找了很多东西,都没找到能审计的语句,SQL不支持也么的办法
例4.16 取消对SC表的一切审计
AUDIT ALTER,UPDATE
ON SC;
之前没建好审计,也就无法取消
总结:这次真的难,作业有点多,T-SQL和标准SQL的差别对实际操作造成了很大的阻碍,要明确他们的区别。。