分布式查询处理中的授权视图与安全查询规划
1. 授权视图相关概念
在分布式查询处理中,确定一个关系配置文件的发布是否被授权是一个关键问题。我们可以通过对权限集进行安全组合来扩展权限,从而得到权限的闭包。
1.1 权限闭包
权限闭包是通过对权限集中的权限进行安全组合,不断扩展权限集而得到的。例如,对于图 5.7 中的权限集,其闭包为 (P^{\otimes}={p_1, p_2, p_3, p_4, p_5, p_1\otimes p_2, p_1\otimes p_4, p_2\otimes p_4, p_1\otimes p_2\otimes p_4})。权限闭包代表了一个主体可用权限的最大表示,它能帮助我们全面确定一个特定的关系配置文件是否被主体授权。
1.2 授权发布的定义
给定适用于关系配置文件 ([R_{\pi},R_{\triangleleft \triangleright},R_{\sigma}]) 的权限集 (P),当且仅当存在 (p \in P^{\otimes}) 使得 (p) 授权 (R)(根据定义 5.9)时,(P) 授权 (R)。
2. 权限组合闭包的计算算法
计算权限组合的闭包可能是一个代价高昂的过程。为了避免计算组合闭包中的所有可能权限,同时确保控制的完整性,我们引入了一个高效的算法。
2.1 权限蕴含定理
定理 5.1(权限蕴含):给定两个权限 (p_i=[Att_i,Rels_i]),(p_j=[Att_j,Rels_j] \in P) 且 (p_j \to p_i),对于所有 (p_k=[Att_k,Rels_k] \in P) 有:
1. (p_j \to p_k \Rightarrow (p_i\otimes p_j) \to p_k);
2. (p_k \to p_j \Rightarrow p_k \to (p_i\otimes p_j))。
证明过程如下:
1. 设 (p_i\otimes p_j=[Att_{i,j},Rels_{i,j}])。(Att_j \cap Att_k) 中的属性也会出现在 (Att_{i,j}) 和 (Att_k) 的交集中。因此,从对应于 (Att_j \cap Att_k) 中某些属性的节点到 (G_{p_k}) 中的每个黑色节点存在仅由有向黑色弧组成的路径。
2. 从假设可知,从对应于 (Att_j \cap Att_k) 中某些属性的节点到 (G_{p_j}) 中的每个黑色节点存在仅由有向黑色弧组成的路径。同时,从对应于 (Att_i \cap Att_j) 中某些属性的节点到 (G_{p_i}) 中的每个黑色节点也存在仅由有向黑色弧组成的路径。通过组合这些路径,可以得出 (p_k \to p_i),进而 (p_k \to (p_i\otimes p_j))。
这个定理意味着可以从集合 (P) 中移除权限 (p_j) 而不影响组合过程。
2.2 授权检查函数
以下是用于检查发布是否被授权的函数
AUTHORIZED
:
AUTHORIZED(GR,S)
Let Applicable be the set of permissions [Att, Rels]→Si such that:
{n∈Np:λp(n)=black∨white}⊆{n∈NR :λR(n)=black∨white} ∧Si=S
/* check individual permissions */
for each p∈Applicable do
if GR≼NGp then return(true)
/* compose permissions */
maxid := |Applicable|
counter := 1
for each p∈Applicable do
p.id := counter
p.maxcfr := counter
counter := counter + 1
idmini := 1
repeat
Let pi be the permission with pi.id=idmini
idminj := Min({p.id:p∈Applicable∧pi.maxcfr<p.id})
Let pj be the permission with pj.id=idminj
dominated := NULL
if (Gpi≁NEGpj ) ∧(Gpj ≁NEGpi) then
if pj→pi then dominated := dominated ∪{pj}
if pi→pj then dominated := dominated ∪{pi}
pi.maxcfr := pj.id
if dominated≁NULL then
maxid := maxid + 1
pmaxid := Compose(G,pi,pj)
pmaxid.id := maxid
pmaxid.maxcfr := maxid
Applicable := Applicable −dominated ∪{pmaxid}
idmini := Min({p.id:p∈Applicable∧p.maxcfr<maxid})
until idmini=NULL
/* check resulting permissions */
for each p∈Applicable do
if GR≼NGp then return(true)
return(false)
该函数的工作流程如下:
1. 确定适用于主体 (S) 的权限集
Applicable
。
2. 检查单个权限:遍历
Applicable
中的每个权限 (p),如果 (G_R \preceq N_{G_p}),则返回
true
。
3. 组合权限:
- 为每个权限分配一个唯一的标识符
id
和最大比较标识符
maxcfr
。
- 重复以下步骤,直到
idmini
为
NULL
:
- 选择具有最小
id
的权限 (p_i)。
- 选择
id
大于 (p_i.maxcfr) 的最小
id
的权限 (p_j)。
- 检查 (p_i) 和 (p_j) 是否可以组合,如果可以,将被支配的权限移除,并添加组合后的权限。
4. 检查组合后的权限:遍历
Applicable
中的每个权限 (p),如果 (G_R \preceq N_{G_p}),则返回
true
,否则返回
false
。
2.3 算法的正确性和复杂度
-
定理 5.2(正确性)
:给定关系配置文件 (R=[R_{\pi},R_{\triangleleft \triangleright},R_{\sigma}]) 和适用权限集
Applicable,函数Authorized终止并返回true当且仅当Applicable^{\otimes}授权 (R) 的发布。 -
定理 5.3(复杂度)
:给定关系配置文件 (R=[R_{\pi},R_{\triangleleft \triangleright},R_{\sigma}]) 和 (n) 个适用权限的集合
Applicable,函数Authorized的时间复杂度为 (O(n^3))。
3. 算法执行示例
考虑图 5.5 中的模式图、图 5.7 中的权限集以及图 5.8 中查询 (Q_1) 计算的关系 (R_1)。从视图图中可以看出,所有五个权限都适用于 (Q_1) 结果的关系配置文件。图 5.12 展示了函数
Authorized
在 (G_{Q_1}) 上的逐步执行过程,报告了原始权限和组合权限的
p.maxcfr
变量的演变。
| id | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| p1 p2 p3 p4 p5 | ||||||||
| 初始化 | 1 | 2 | 3 | 4 | 5 | |||
| p2→p1 | 1 | 2 | 3 | 4 | 5 | p1⊗p2 | ||
| p1≁p3 | 2 | 3 | 4 | 5 | 6 | |||
| p1↔p4 | 3 | 3 | 4 | 5 | 6 | p1⊗p4 | ||
| p3≁p5 | 3 | 5 | 6 | 7 | ||||
| p3≁(p1⊗p2) | 5 | 5 | 6 | 7 | ||||
| p5≁(p1⊗p2) | 6 | 5 | 6 | 7 | ||||
| p3≁(p1⊗p4) | 6 | 6 | 6 | 7 | ||||
| p5≁(p1⊗p4) | 7 | 6 | 6 | 7 | ||||
| (p1⊗p2)→(p1⊗p4) | 7 | 7 | 6 | 7 | p1⊗p2⊗p4 | |||
| p3≁(p1⊗p2⊗p4) | 7 | 7 | 7 | 8 | ||||
| p5≁(p1⊗p2⊗p4) | 8 | 7 | 7 | 8 | ||||
| (G_{p_1\otimes p_4} \preceq N_{G_{p_1\otimes p_2\otimes p_4}}) | 8 | 8 | 7 | 8 | ||||
| 8 | 8 | 8 | 8 |
从这个示例可以得出,查询 (Q_1) 评估结果的关系可以发布给 Alice,因为 (p_1\otimes p_2\otimes p_4) 授权了它。
以下是函数
AUTHORIZED
的执行流程 mermaid 图:
graph TD;
A[确定Applicable权限集] --> B[检查单个权限];
B --> C{是否有匹配权限};
C -- 是 --> D[返回true];
C -- 否 --> E[组合权限];
E --> F{是否继续组合};
F -- 是 --> E;
F -- 否 --> G[检查组合后权限];
G --> H{是否有匹配权限};
H -- 是 --> D;
H -- 否 --> I[返回false];
通过以上步骤和算法,我们可以在分布式查询处理中高效地确定关系配置文件的发布是否被授权。
4. 安全查询规划
为了确定一个查询能否在分布式系统上执行以及如何执行,我们需要先确定执行过程中涉及的数据发布情况,确保只有授权的发布才能进行。
4.1 操作与视图
在分布式查询处理中,不同的操作需要不同的视图和数据交换。以下是一些常见操作及其所需视图和关系配置文件的总结:
| 操作 | [m, s] | 视图(Sl) | 视图(Sr) | 视图配置文件 |
| — | — | — | — | — |
| πX(Rl) | [Sl, NULL] | Sl: πX(Rl) | | [Sl, NULL] |
| σX(Rl) | [Sl, NULL] | Sl: σX(Rl) | | [Sl, NULL] |
| Rl◃▹JlrRr | [Sl, NULL] | Sl: Rl◃▹Rr | Sr: Rr→Sl | [Rπr, R◃▹r, Rσr] |
| | [Sr, NULL] | Sl: Rl→Sr | Sr: Rl◃▹Rr | [Rπl, R◃▹l, Rσl] |
| | [Sl, Sr] | Sl: RJl := πJ(Rl)
Sl: RJl →Sr | Sr: RJlr := RJl ◃▹Rr
Sr: RJlr →Sl | [J, R◃▹l, Rσl]
[Rπr, R◃▹l ∪ R◃▹r, Rσl ∪ Rσr] |
| | [Sr, Sl] | Sr: RJr := πJ(Rr)
Sr: RJr →Sl | Sl: RlJr := Rl◃▹RJr
Sl: RlJr →Sr | [J, R◃▹r, Rσr]
[Rπl, R◃▹l ∪ R◃▹r, Rσl ∪ Rσr] |
对于连接操作,有常规连接和半连接两种方式。半连接通常更高效,因为它可以减少通信量,从而提高安全性。例如,在一个查询中,如果连接操作以半连接方式执行,服务器只需发送参与连接的元组,而不是整个关系。
4.2 执行器分配函数
为了将查询计划中的操作分配给不同的服务器,我们引入了执行器分配函数 (ε_T)。
定义 5.15(执行器分配)
:给定一个查询树计划 (T(N_T, E_T)),执行器分配函数 (ε_T : N_T → S × {S ∪ NULL}) 是将服务器对分配给节点的函数,满足以下条件:
1. 每个叶节点(对应于一个关系 (R))分配为 ([S, NULL]),其中 (S) 是存储 (R) 的服务器。
2. 每个非叶节点 (n),对应于对服务器 (Sl) 上操作数 (Rl) 的一元操作 (op),分配为 ([Sl, NULL])。
3. 每个非叶节点 (n),对应于对服务器 (Sl) 上操作数 (Rl) 和服务器 (Sr) 上操作数 (Rr) 的连接操作,分配为 ([master, slave]),其中 (master \in {Sl, Sr}),(slave \in {Sl, Sr, NULL}),且 (master \neq slave)。
4.3 安全分配与可行查询计划
为了确保查询执行过程中的数据发布是授权的,我们定义了安全分配和可行查询计划。
定义 5.16(安全分配)
:给定一个查询树计划 (T(N_T, E_T)) 和执行器分配函数 (ε_T),当满足以下条件之一时,(ε_T(n)) 被认为是安全的:
1. (n) 是叶节点。
2. (n) 对应于一元操作。
3. (n) 对应于连接操作,且分配所产生的所有发布都是授权的。
如果对于所有 (n \in N_T),(ε_T(n)) 都是安全的,则 (ε_T) 被认为是安全的。
定义 5.17(可行查询计划) :一个查询计划 (T(N_T, E_T)) 被认为是可行的,当且仅当存在一个在 (T) 上的执行器分配函数 (ε_T),使得 (ε_T) 是安全的。
以下是不同连接操作执行策略的表格,展示了在有第三方介入时的情况:
| [m, s] | 操作/流 | 视图(Sl) | 视图(Sr) | 视图(St) | 视图配置文件 |
| — | — | — | — | — | — |
| [St, NULL] | Sl: Rl→St
Sr: Rr→St
St: Rl◃▹Rr | Rl | Rr | | [Rπl, R◃▹l, Rσl]
[Rπr, R◃▹r, Rσr] |
| [St, Sr] | Sl: Rl→St
St: RJl := πJ(Rl)
St: RJl →Sr
Sr: RJlr := RJl ◃▹Rr
Sr: RJlr →St
St: RJlr◃▹Rl | Rl | | | [Rπl, R◃▹l, Rσl]
[J, R◃▹l, Rσl]
[Rπr, R◃▹l ∪ R◃▹r, Rσl ∪ Rσr] |
| [St, Sl] | Sr: Rr→St
St: RJr := πJ(Rr)
St: RJr →Sl
Sl: RJrl := Rl◃▹RJr
Sl: RJrl →St
St: RJrl◃▹Rr | | Rr | | [Rπr, R◃▹r, Rσr]
[J, R◃▹r, Rσr]
[Rπl, R◃▹l ∪ R◃▹r, Rσl ∪ Rσr] |
| [Sl, St] | Sl: RJl := πJ(Rl)
Sl: RJl →St
Sr: Rr→St
St: RJlr := RJl ◃▹Rr
St: RJlr →Sl
Sl: RJlr ◃▹Rl | | Rr | | [J, R◃▹l, Rσl]
[Rπr, R◃▹l ∪ R◃▹r, Rσl ∪ Rσr] |
| [Sr, St] | Sr: RJr := πJ(Rr)
Sr: RJr →St
Sl: Rl→St
St: RJrl := Rl◃▹RJr
St: RJrl →Sr
Sr: RJrl ◃▹Rr | Rl | | | [J, R◃▹r, Rσr]
[Rπl, R◃▹l ∪ R◃▹r, Rσl ∪ Rσr] |
| [St, SlSr] | Sl: RJl := πJ(Rl)
Sr: RJr := πJ(Rr)
Sl: RJl →St
Sr: RJr →St
St: RJlJr := RJl ◃▹RJr
St: RJlJr →Sl
St: RJlJr →Sr
Sl: RJlrl := Rl◃▹RJlJr
Sr: RJlrr := RJlJr ◃▹Rr
Sl: RJlrl →St
Sr: RJlrr →St
St: RJlrl ◃▹RJlrr | | | | [J, R◃▹l, Rσl]
[J, R◃▹r, Rσr]
[J, R◃▹l ∪ R◃▹r, Rσl ∪ Rσr]
[Rπl, R◃▹l ∪ R◃▹r, Rσl ∪ Rσr]
[Rπr, R◃▹l ∪ R◃▹r, Rσl ∪ Rσr] |
以下是安全查询规划的流程 mermaid 图:
graph TD;
A[确定查询树计划T] --> B[定义执行器分配函数εT];
B --> C{εT(n)是否安全};
C -- 是 --> D[查询计划可行];
C -- 否 --> E[调整执行器分配];
E --> B;
通过以上的授权视图检查和安全查询规划,我们可以在分布式查询处理中确保数据的安全发布和查询的有效执行。在实际应用中,我们可以按照以下步骤进行操作:
1. 确定查询的关系配置文件和适用的权限集。
2. 使用
AUTHORIZED
函数检查查询发布是否被授权。
3. 根据查询树计划,使用执行器分配函数将操作分配给不同的服务器。
4. 检查执行器分配是否安全,如果不安全则进行调整。
5. 执行查询,确保只有授权的数据发布发生。
这样,我们就可以在分布式系统中安全、高效地处理查询。
超级会员免费看
5万+

被折叠的 条评论
为什么被折叠?



