第四章数据库的安全性

自主存取控制方法

关系数据库系统中的存取权限

在这里插入图片描述

授权:授予与收回

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的差别对实际操作造成了很大的阻碍,要明确他们的区别。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值