授权图是一种可视化权限流动的工具 。它可以帮助我们理解权限是如何从拥有者一级一级地授予其他用户,以及回收权限时会产生什么影响 。

授权图的组成 :

  1. 节点(Nodes): 图中的每个节点代表一个用户(授权 ID)拥有某个特定的权限。节点通常表示为 AP,其中 A 是授权 ID,P 是权限。
    • AP:用户 A 拥有权限 P
    • AP*:用户 A 拥有权限 P,并且拥有将此权限授予他人的能力(带有 GRANT OPTION)。
    • AP**:权限 P 的来源,通常表示拥有对象的用户(即对象的拥有者)。拥有者默认拥有所有权限并带有 GRANT OPTION 。** 节点是权限的起点。
  2. 边(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 的子权限),则边会指向 BQBQ*

如何查看授权图 :

要确定用户 C 是否拥有某个权限 Q,需要查看授权图中是否存在一条从任何 XQ** 节点(表示权限 Q 的来源)到 CQCQ*CQ** 节点(在实际图中通常只出现 CQCQ*)的路径 。只要存在这样一条路径,并且路径上的所有边都有效,用户 C 就拥有该权限 。这里的 PQ 的一个超权限,也就是说,授予的权限 P 需要包含 Q

回收权限 (REVOKE) 对授权图的影响 :

当用户 A 使用 REVOKE P ON R FROM B; 回收权限时,会删除从 APAP* 节点到 BPBP* 节点的对应边 。然后,系统会检查图中每个节点是否仍然可以从一个 ** 节点(拥有者)通过有效路径到达。如果某个节点无法从 ** 节点到达,则该节点所代表的权限被视为已回收,并从图中删除 。

  • 使用 CASCADE 选项回收时,任何通过被回收权限(BPBP*)授予出去的权限也会被一并回收(删除相应的边和不可达的节点) 。
  • 使用 RESTRICT 选项回收时,如果通过被回收权限(BPBP*)授予出去的权限仍然存在(即存在从 BPBP* 到其他节点的边),则回收操作会失败,以警告用户存在依赖的权限 。

通过理解节点类型、边的含义以及回收操作对图结构的影响,就可以分析权限如何在用户之间传播和回收了。