授权图是一种可视化权限流动的工具 。它可以帮助我们理解权限是如何从拥有者一级一级地授予其他用户,以及回收权限时会产生什么影响 。
授权图的组成 :
- 节点(Nodes): 图中的每个节点代表一个用户(授权 ID)拥有某个特定的权限。节点通常表示为
AP
,其中A
是授权 ID,P
是权限。AP
:用户A
拥有权限P
。AP*
:用户A
拥有权限P
,并且拥有将此权限授予他人的能力(带有 GRANT OPTION)。AP**
:权限P
的来源,通常表示拥有对象的用户(即对象的拥有者)。拥有者默认拥有所有权限并带有 GRANT OPTION 。**
节点是权限的起点。
- 边(Edges): 图中的边表示权限的授予过程。从节点
X
到节点Y
的边X -> Y
表示节点X
所代表的权限被用来授予了节点Y
所代表的权限 。- 例如,如果用户
A
拥有权限P*
(带有 GRANT OPTION)或P**
(作为拥有者),并执行了GRANT P ON R TO B;
,则会从AP*
或AP**
到BP
绘制一条边。 - 如果授予时带了
WITH GRANT OPTION
(GRANT P ON R TO B WITH GRANT OPTION;
),则会从AP*
或AP**
到BP*
绘制一条边。 - 如果授予的是
P
的子权限Q
(例如UPDATE(a)
是UPDATE
的子权限),则边会指向BQ
或BQ*
。
- 例如,如果用户
如何查看授权图 :
要确定用户 C
是否拥有某个权限 Q
,需要查看授权图中是否存在一条从任何 XQ**
节点(表示权限 Q
的来源)到 CQ
、CQ*
或 CQ**
节点(在实际图中通常只出现 CQ
和 CQ*
)的路径 。只要存在这样一条路径,并且路径上的所有边都有效,用户 C
就拥有该权限 。这里的 P
是 Q
的一个超权限,也就是说,授予的权限 P
需要包含 Q
。
回收权限 (REVOKE) 对授权图的影响 :
当用户 A
使用 REVOKE P ON R FROM B;
回收权限时,会删除从 AP
或 AP*
节点到 BP
或 BP*
节点的对应边 。然后,系统会检查图中每个节点是否仍然可以从一个 **
节点(拥有者)通过有效路径到达。如果某个节点无法从 **
节点到达,则该节点所代表的权限被视为已回收,并从图中删除 。
- 使用
CASCADE
选项回收时,任何通过被回收权限(BP
或BP*
)授予出去的权限也会被一并回收(删除相应的边和不可达的节点) 。 - 使用
RESTRICT
选项回收时,如果通过被回收权限(BP
或BP*
)授予出去的权限仍然存在(即存在从BP
或BP*
到其他节点的边),则回收操作会失败,以警告用户存在依赖的权限 。
通过理解节点类型、边的含义以及回收操作对图结构的影响,就可以分析权限如何在用户之间传播和回收了。