授权:授予与收回 和 数据库角色

4.2.4 授权:授予与收回

SQL中使用 GRANT和 REVOKE语句向用户授予或收回对数据的操作权限。 GRANT语句向用户授予权限, REVOKE语句收回己经授予用户的权限。

1.GRANT

GRANT语句的一般格式为:
GRANT<权限> [,<权限>]···
ON <对象类型> <对象名>[,<对象类型> <对象名>]···
TO<用户> [,<用户>]···
[WITH GRANT OPTION];

其语义为:将对指定操作对象的指定操作权限授予指定的用户。发出该 GRANT语句的可以是数据库管理员,也可以是该数据库对象创建者(即属主 owner),还可以是已经拥有该权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是 PUBLIC,即全体用户

如果指定了 WITH GRANT OPTION子句则获得某种权限的用户还可以把这种权限再授予其他的用户。如果没有指定 WITH GRANT OPTION子句,则获得某种权限的用户只能使用该权限,不能传播该权限。

SQL标准允许具有 WITH GRANT OPTION的用户把相应权限或其子集传递授予其他用户,但不允许循环授权,即被授权者不能把权限再授回给授权者或其祖先。

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

GRANT UPDATE(Sno),SELECT
ON TABLE Student
TO U4;

这里,实际上要授予U4用户的是对基本表 Student的 SELECT权限和对属性列Sno的 UPDATE权限。对属性列授权时必须明确指出相应的属性列名。

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

GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;

执行此SQL语句后,U5不仅拥有了对表SC的 INSERT权限,还可以传播此权限,即由U5用户发上述 GRANT命令给其他用户。例如U5可以将此权限授予U6(例4.6)

例 4.6

GRANT INSERT
ON TABLE SC
TO U6
WITH GRANT OPTION;

同样,U6还可以将此权限授予U7(例 4.7)

例 4.7

GRANT INSERT
ON TABLE SC
TO U7;

因为U6未给U7传播的权限,因此U7不能再传播此权限。

2.REVOKE
授予用户的权限可以由数据库管理员或其他授权者用 REVOKE语句收回, REVOKE语句的一般格式为

REVOKE <权限>[,<权限>]···
ON<对象类型><对象名>[,<对象类型><对象名
FROM<用户> [,<用户> ]··· [CASCADE|RESTRICT ];

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

REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;

将用户U5的 INSERT权限收回的同时,级联(CASCADE)收回了U6和U7的 INSERT权限,否则系统将拒绝执行该命令。因为在例4.6中,U5将对s表的 INSERT权限授予了U6,而U6又将其授予了U7(例4.7)

注意:这里默认值为CASCADE,有的数据库管理系统默认值为 RESTRICT,将自动执行级联操作。如果U6或U7还从其他用户处获得对C表 INSERT的权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限。

4.2.5 数据库角色

数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。因此,可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。

在SQL中首先用 CREATE ROLE语句创建角色,然后用 GRANT语句给角色授权,用 REVOKE语句收回授予角色的权限。

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

步骤如下:
(1)首先创建一个角色R1。

CREATE ROLE R1;

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

GRANT SELECT,UPDATE,INSERT
ON TABLE Student
TO R1;

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

 GRANT R1
TO 王平,张明,赵玲;

(4)当然,也可以一次性地通过R1来收回王平的这三个权限。

REVOKE R1
FROM 王平;

目前只明白怎么授权与收回,但具体让被授权的用户去实现被授权权限还没搞懂,搜也没搜到,这次只好对书上进行回顾,没有结果截图,下次课问问老师。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值