语句的一般形式
GIVING <权限>[,<权限>]...
ON <对象类型> <对象名>,[,<对象类型><对象名>]...
TO <用户>[,<用户>]...
[WITH GIVING OPTION];
WITH GIVING OPTION子句:
指定:可以再授予
不指定:不能传播
语义:将对指定操作对象的指定操作权限授予给指定的用户
首先先创建一大串用户,方便以后使用
按照之前的方法创建,发现出现了的问题,一开始我还以为我的SQL Server坏了。。。呜呜呜,我就卸载重新装了一遍,后来发现还是这个问题,我就试着换其他的登录名尝试,发现在每个登录名下面只能新建一个用户。。没有办法解决,只好求助百度啦!
发现:
一个登录名可以和不同的库下的用户做映射,在同一个库下只能和一个用户做映射,并且一个用户名可以和多个登录名有映射关系。
使用下面的语句创建:
CREATE USER U1 WITHOUT LOGIN;
GIVING SELECT
ON TABLE Student
TO U1;
【例 4.2】把对Student表和Course表的全部权限授予用户U2和U3
GIVING ALL PRIVILIGES
ON TABLE Student,Course
TO U2,U3;
【例 4.3】把对表SC的查询权限授予给所有用户
GIVING SELECT
ON TABLE SC
TO PUBLIC;
【例 4.4】把查询Student表和修改学生学号 的权限给用户U4
SELECT UPDATE(Sno),SELECT
ON TABLE Student
TO U4;
因为只能修改学生学号,所以授权属性列时必须指出相应的属性名
【例 4.5】把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
GRANT INSERT
ON TABLE SC
TO U5
WITH U5
WITH GRANT OPTION;
执行例4.5之后,U5不仅有了对表SC的INSERT 权限,还可以传播此权限
【例 4.6】
GRANT INSERT
ON TABLE SC
TO U6
WITH GRANT OPTION;
此时,U6也有了对表的INSERT权限,并可以传播此权限
【例 4.7】
GRANT INSERT
ON TABLE SC
TO U7;
U7也有了对表的INSERT权限,但并不可以传播此权限
语句的一般形式
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;
因为用户U6,U7的INSERT权限是U5直接或间接授予的,所以当U5的权限被收回时,U6,U7的权限也被收回
将用户U5的INSERT权限收回的时候应该使用CASCADE,否则拒绝执行该语句
如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限
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执行者是:
(1)角色的创建者
(2)拥有在这个(些)角色上的ADMIN OPTION
【例 4.11】通过角色来实现将一组权限授予一个用户
(1)首先创建一个角色
CREATE ROLE R1;
(2)然后使用GIVING 语句,使角色R1拥有Student表的SELECT,UPDATE,INSERT 权限
GRANT SELECT,UPDATE,INSERT
ON TABLE Student
TO R1;
通过在网上查询,知道了去掉TABLE就可以啦!
GRANT SELECT,UPDATE,INSERT
ON Student
TO R1;
(3)将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限
GRANT R1
TO 王平,张明,赵玲;
(4)可以一次性通过R1来回收王平的这3个权限
REVOKE R1
FROM 王平;
【例 4.12】对角色权限修改
GRANT DELECT
ON TABLE Student
TO R1;
【例 4.13】使R1减少DELECT权限
REVOKE SELECT
ON TABLE Student
FROM R1;
自主存储控制的缺点:可能存在数据的“无意泄露”
原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
解决:对系统控制下的所有主客体实施强制存取控制策略
强制存取控制方法的敏感度标记:
敏感度标记分为若干级别:
~绝密(TS)
~机密(S)
~可信©
~公开§
TS >= S >= C >= P
强制存取控制规则:
(1)向上写
(2)向下读
视图机制
把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
间接地实现支持存取谓词的用户权限定义
【例 4.14】 建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明
(1)先建立视图
CREATE VIEW CS_Student
AS
SELECT *
FROM Student
WHERE Sdept = 'CS';
(2)在视图上进一步定义存取权限
GRANT SELECT
ON CS_Student
TO 王平;
GRANT ALL PRIVILIGES
ON CS_Student
TO 张明;
审计日志:将用户对数据库的所有操作记录在上面
审计员利用审计日志:监控数据库中的各种行为,找出非法存取数据的人、时间和内容。
审计
~很费时间、空间
~DBA可以打开或关闭审计功能
~主要用于安全性要求较高的部门
审计的语句
~AUDIT语句:设置审计功能
~NOAUDIT语句:取消审计功能
【例 4.15】对修改SC表结构或修改SC表数据的操作进行审计
AUDIT ALTER,UPDATE
ON SC;
【例 4.16】取消对SC表的一切审计
NOAUDIT ALTER,UPDATE
ON SC;
这次作业在创建用户那里消耗了不少时间,还需要提高效率!