授权和收权

一、授权

SQL提供了grant语句以允许一个用户将权限给另一个用户。第一个用户仍然保留着原有的权限,因此grant 可以理解为一种“对权限的复制”。但授权和复制二者之间有一个重要的区别:每一个权限都有一个相关的授权选项即grant option,这个在授权过程中是需要格外注意的。

假设A有p权限,并且有【将p权限授权给他人】的权限,那么grant p to B with grant option和grant p to C的效果是不一样的,B不仅获得了p权限,也获得了【将p权限授权给他人】的权限;而C仅仅获得了p权限。

由于授权的复杂过程以及授权产生的重叠权限让人眼花缭乱,常常我们用授权图表示复杂的授权过程。

下图是我们在授权图中常用的节点样式:

第一个表示A拥有p权限,并且是因为A作为元素的创建者或者属主而拥有的权限,并不是因为别处的授权,我把他理解为“皇帝”,所以理所当然的A拥有p权限,也拥有【将p权限授权给他人】的权限

第二个表示B拥有p权限,并且是因为别处的授权获得,我把他理解为“皇亲国戚”。值得注意的是一颗*表示B拥有p权限,也拥有【将p权限授权给他人】的权限。

第三个表示C拥有p权限,并且是因为别处的授权获得,我把他理解为“普通大臣”。值得注意的是,与B不同,C仅仅只有p权限。

通过一个例子我们理解一下授权图的画法:

假设A是权限p的属主

步骤

经由

操作

1

A

grant p to B with grant option

2

A

grant p to C

3

B

grant p to D with grant option

4

D

grant p to B,C,E with grant option

5

B

revoke p from D cascade

6

A

revoke p from C cascade

 前四步画的下图:

授权一次,在相应节点之间画一条对应的弧线,值得注意的是:强度不同的授权 是 完全不同的授权,必须画出不同的节点,即使是对于同一用户而言也要如此,比如下图C。

 

二、收权

被授予的权限随时可以收回,我们用revoke语句来回收,我们常用的有这两种:

1.revoke p from D

从用户D回收p权限和【将p权限授权给他人】的权限

2.revoke grant option for p from D

从用户D回收【将p权限授权给他人】的权限,保留p权限

实际中我们在回收的时候,语句结束的地方可以有两种形式表示回收的两种模式:

【在不同的数据库系统中,默认的模式往往不同,所以现式的表明出究竟是哪种模式是最好的选择】

1.cascade(级联)

回收指定权限时,也要回收那些由于要回收的权限而被授予的权限。

例如revoke p from B cascade或者revoke grant option for p from B cascade  在授权图中体现为:假设A有q权限,经由A回收B的权限p时候,那么在授权图中删去由节点A/q到B/p的弧。然后那些从属主节点(**)不能到达的节点也被删去。

2.restrict(限制)

若在cascade 情况下,由于要回收的权限被传递给其他人而造成了级联回收,那么restrict的时候,这个收权语句是不执行的。

举个例子:

如果用户1 赋予了用户2的权限带着 WITH GRANT OPTION ,然后用户2 给了用户3,则用户1可以使用 CASCADE 关键字废除用户2和3的权限.
如果用户1给予用户2权限带着WITH GRANT OPTION,然后用户2又把它给予了用户3,则如果用户1 试图带着 RESTRICT 关键字废除这个权限就会失败。用户1,2,3的权限仍然如故。

如果用户1给予用户2权限带着WITH GRANT OPTION,然后用户2又把它给予了用户3,则如果用户2 试图带着 RESTRICT 关键字废除这个权限,那么用户3的权限会被废除。

猜你喜欢

转载自blog.csdn.net/william_munch/article/details/88371049