当前位置:主页 > 查看内容

数据库第七周【安全性+超多问题】

发布时间:2021-07-05 00:00| 位朋友查看

简介:目录 4.2.3 自主存取控制方法 1.GRANT [例4.1] 把查询Student表权限授给用户U1定操作权限授予指定的用户 [例4.2] 把对Student表和Course表的全部权限授予用户U2和U3 [例4.3] 把对表SC的查询权限授予所有用户 [例4.4] 把查询Student表和修改学生学号的权限授……

目录

4.2.3 自主存取控制方法

1.GRANT

[例4.1] 把查询Student表权限授给用户U1定操作权限授予指定的用户

[例4.2] 把对Student表和Course表的全部权限授予用户U2和U3

[例4.3] 把对表SC的查询权限授予所有用户

[例4.4] 把查询Student表和修改学生学号的权限授给用户U4

[例4.5] 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户

?[例4.6]

[例4.7]

2.REVOKE

[例4.8]把用户U4修改学生学号的权限收回

[例4.9] 收回所有用户对表SC的查询权限号的权限收回

[例4.10] 把用户U5对SC表的INSERT权限收回

4.2.5 数据库角色

[例4.11] 通过角色来实现将一组权限授予一个用户。

[例4.12] 角色的权限修改

[例4.13] 

心得



4.2.3 自主存取控制方法

关系数据库系统中存取控制对象

对象类型

对象

操 作 类 型

?

数据库

?

模式

模式

CREATE SCHEMA

基本表

CREATE TABLEALTER TABLE

视图

CREATE VIEW

索引

CREATE INDEX

?

?

?? 数据

基本表和视图

SELECTINSERTUPDATEDELETEREFERENCES

ALL PRIVILEGES

属性列

SELECTINSERTUPDATEREFERENCESALL PRIVILEGES

1.GRANT

WITH GRANT OPTION子句:

指定:可以再授予

没有指定:不能传播

语义:将对指定操作对象的指


以下需要建立很多的用户,但是问题就来了。

网络上这么说的:

同一数据库中,一个登录只能对应一个用户
一个登录,在不同的数据库中,允许对应不同的用户

!所以啊,选择不同的登录名建立以下的用户,对的,下面的题目要使用。

[例4.1] 把查询Student表权限授给用户U1定操作权限授予指定的用户

标准SQL是在SQLserve中是错误的。以下语句会报错,形式如下:

消息 156,级别 15,状态 1,第 6 行
关键字 'TO' 附近有语法错误。

grant select
on table Student
to U1;

?正确的写法为:

grant select
on Student
to U1;

如何查看是否将权限授予成功呢?

右击该用户,选择属性。

右下角可查看已有属性。

以上新建立的用户,默认都是无权限。

?

[例4.2] 把对Student表和Course表的全部权限授予用户U2和U3

grant all privileges
on Student,Course
to U2,U3;

错误如下:

消息 102,级别 15,状态 1,第 2 行
“,”附近有语法错误。

?原因:grant语句一次只能对一个对象进行赋权,不能同时对两个表进行赋权;但是我们可以同时赋给对象多个不同的权限。

?所以在我的SQLserve中,可以使用以下语句进行授权。

grant all privileges
on Student
to U2,U3;
grant all privileges
on Course
to U2,U3;

但是依旧会有以下的提示。。。?

?ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。
?ALL 权限已不再推荐使用,并且只保留用于兼容性目的。它并不表示对实体定义了 ALL 权限。

现在再次查看U2,U3到底有多少的权限,插入,更新,删除,选择,引用。?

?

[例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;

U5不仅拥有了对表SCINSERT权限,

?还可以传播此权限:

?[例4.6]

grant insert
on SC
to U6
with grant option;

同样,U6还可以将此权限授予U7?

[例4.7]

grant insert
on SC
to U7;

?

授权用户名

被授权用户名

数据库对象名

允许的操作类型

能否转授权

DBA

U1

关系Student

SELECT

不能

DBA

U2

关系Student

ALL

不能

DBA

U2

关系Course

ALL

不能

DBA

U3

关系Student

ALL

不能

DBA

U3

关系Course

ALL

不能

DBA

PUBLIC

关系SC

SELECT

不能

DBA

U4

关系Student

SELECT

不能

DBA

U4

属性列Student.Sno

UPDATE

不能

DBA

U5

关系SC

INSERT

U5

U6

关系SC

INSERT

U6

U7

关系SC

INSERT

不能

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 SC
from U5 cascade;

此时U5用户没有任何权限了。?

4.2.5 数据库角色

角色(ROLE):

?被命名的一组与数据库操作相关的权限

角色是权限的集合。可以为一组具有相同权限的用户创建一个角色。

优点:简化授权的过程。

[例4.11] 通过角色来实现将一组权限授予一个用户。

步骤如下:

(1)首先创建一个角色 R1

create role R1

?

(2)然后使用GRANT语句,使角色R1拥有Student表的? SELECT、UPDATE、INSERT权限

grant select,update,insert
on Student
to R1;

选择右上角的安全对象。可以查看R1的权限。?

(3)将这个角色授予王平,张明,赵玲。使他们具有角色R1所包含的全部权限

grant R1
to 王平,张明,赵玲;

错误。。【濒临崩溃的瞬间,昨天晚上写到这里的时候断电了,,,我裂开了,怎么这么多问题】

消息 102,级别 15,状态 1,第 9 行
“R1”附近有语法错误。

下面的语句是可以在SQLserve上面运行的。

alter role R1
add member 王平;
alter role R1
add member 张明;
alter role R1
add member 赵玲;

按照属性找到他的身份,以上三个用户就拥有R1角色的全部权限。

同样的,角色成员也可以找到。?

(4) 可以一次性通过R1来回收王平的这3个权限

revoke R1
to 王平;

有以下提示:

消息 102,级别 15,状态 1,第 8 行
“R1”附近有语法错误。?

正确的:

exec sp_droprolemember 'R1','王平';

已经成功收回王平的权限。

[例4.12] 角色的权限修改

grant delete
on Student
to R1;

使角色R1在原来的基础上增加了Student表的DELETE 权限

[例4.13] 

revoke select
on Student
from R1;

使R1减少了SELECT权限

?

心得

。又一次写了好久的博客,目前感到万分的心累,还有一个作业没有写啊~~~

T-SQL和标准SQL的差距其实还是蛮大的,起码在这篇博客涉及的方面有很大的不同,课上的代码都有大大小小的修改。

?

完结,撒花!

1

?

好想坐沙发。。。

沙发

?

?

;原文链接:https://blog.csdn.net/qq_45745322/article/details/115678465
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐