痛苦的领悟:这是第二遍写,第一遍从七点半写到了九点四十,马上就要写完的时候文章卡住空白了,按以前来说,一般刷新完都会有草稿,但是。。。我居然开始没写标题,所以草稿也就不存在,所以劝大家,写博客之前一定要先写上标题啊,还要不时地保存一下草稿。现在就是贼后悔…还有就是优快云的bug好明显啊,为什么一复制比较长的代码整篇文章就卡住了呢
授权
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
[4.1]把查询Student表权限授给用户U1
grant select
on student
to u1;
[4.2]把对Student表和Course表的全部权限授予用户U2和U3
需要说明的是sqlsever中不支持对多个table进行同时操作。
grant all privileges
on student
to u2,u3;
grant all privileges
on course
to u2,u3;
[4.3]把对表SC的查询权限授予所有用户
grant select
on sc
to public;
[4.4]把查询Student表和修改学生学号的权限授给用户U4
grant select,update(sno)
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;
此时的授权者明显是dbo,不是U5,但目前网络上对该问题的解答不是很多,查了很多资料还未解决。
[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 sc
from u5;
角色
角色是 权限的集合。可以为一组具有相同权限的用户创建一个角色。
[4.11]通过角色来实现将一组权限授予一个用户。
创建角色:
create role a1;
授权:
grant select,update,insert
on student
to a1;
把角色权限授予给用户:
grant a1
to U1,U2,U3;
将用户权限收回:
revoke a1
from U1,U2;
//标准SQL但在SQLSEVER中不可用,等价于:
exec sp_droprolemember 'a1','U1'
exec sp_droprolemember 'a1','U2'
[4.12]角色的权限修改。
grant delete
on student
to a1;
[4.13]使a1减少了SELECT权限
revoke select
on student
from a1;
通过以上两个例子我们可以看出来,对角色的授权或更改和用户大体上是相同的。
强制存取控制规则
规则:
(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读相应的客体
(2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体
个人理解:领导只负责检查不负责修改,下属只负责修改自己的部分,等于客体密级的用户为项目负责人,进行总揽全局。
[4.14]建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明
create view cs_s
as
select *
from student
where sdept='cs';
//创建视图
grant select
on cs_s
to 王平;
//在视图的基础上进行授权
grant all
on cs_s
to 张明;
审计
审计日志:将用户对数据库的所有操作记录在上面
有点类似会计核对账本,审计就是通过对各个权限用户的操作记录找出违规的用户或操作。
[4.15]对修改SC表结构或修改SC表数据的操作进行审计
audit alter,update
on sc;
//标准sql,但会报错:
//消息 102,级别 15,状态 1,第 1 行
//“,”附近有语法错误。
查询了一些相关问题的回答,没看明白,而且我看audit在sqlsever中是没有颜色的,我的猜想是sql sever中不存在audit这个语法,或许是有其他的语法…
[4.16]取消对SC表的一切审计
onaudit alter,update
on sc;
该语句与上题是相同错误。
总的来说,第二遍没有第一遍写的那么有耐心了,很多细节方面也有点懒得写了,主要是因为和第一遍写的时候的感觉不同了。第一次写用了将近两个小时,对于一些语法有点生疏,很多问题查资料花费的时间很多。但第二遍再写的时候基本上就算一气呵成,看着题,代码直接就很流畅的写出来了。对于一些细节问题注意的也很到位。
另外就是,sql语句整体上不难,但需要主要的是很多语法是很相似的,因此刚开始学的时候对比着来学习效率更高一些,也以免后面会把一些语法弄串。