Static enforceability
- f XPath-based access
control policies
James Cheney University of Edinburgh DBPL 2013 August 30, 2013
Static enforceability of XPath-based access control policies James - - PowerPoint PPT Presentation
Static enforceability of XPath-based access control policies James Cheney University of Edinburgh DBPL 2013 August 30, 2013 Background Access control for XML databases Read-only security views [Stoica & Farkas 2002, Fan
James Cheney University of Edinburgh DBPL 2013 August 30, 2013
maintaining annotations
Nurse($wn, $uid): R1 : +insert(//patient//∗, ∗) R2 : +update(//patient[@wardNo = $wn]/∗, ∗) R3 : +update(//nurse[@id = $uid]/phone/∗, text()) R4 : −insert(//∗, treatment) R5 : −update(//treatment, ∗)
hospital patients nurses doctors patient ... nurse ... doctor ... name @wardNo=42 treatment
penicillin
name @id=42 phone 123-4567 n1 n2 n3 n4
T
n17
Nurse($wn, $uid): R1 : +insert(//patient//∗, ∗) R2 : +update(//patient[@wardNo = $wn]/∗, ∗) R3 : +update(//nurse[@id = $uid]/phone/∗, text()) R4 : −insert(//∗, treatment) R5 : −update(//treatment, ∗)
hospital patients nurses doctors patient ... nurse ... doctor ... name @wardNo=42 treatment
penicillin
name @id=42 phone 123-4567 n1 n2 n3 n4
n17
555-1212
Nurse($wn, $uid): R1 : +insert(//patient//∗, ∗) R2 : +update(//patient[@wardNo = $wn]/∗, ∗) R3 : +update(//nurse[@id = $uid]/phone/∗, text()) R4 : −insert(//∗, treatment) R5 : −update(//treatment, ∗)
hospital patients nurses doctors patient ... nurse ... doctor ... name @wardNo=42 treatment
penicillin
name @id=42 phone 123-4567 n1 n2 n3 n4
insert(/patients/patient,T)?
T
n17
Nurse($wn, $uid): R1 : +insert(//patient//∗, ∗) R2 : +update(//patient[@wardNo = $wn]/∗, ∗) R3 : +update(//nurse[@id = $uid]/phone/∗, text()) R4 : −insert(//∗, treatment) R5 : −update(//treatment, ∗)
hospital patients nurses doctors patient ... nurse ... doctor ... name @wardNo=42 treatment
penicillin
name @id=42 phone 123-4567 n1 n2 n3 n4
update(/hospital/nurses/nurse/ phone[text()='123-4567'],...)?
n17
555-1212
Nurse($wn, $uid): R1 : +insert(//patient//∗, ∗) R2 : +update(//patient[@wardNo = $wn]/∗, ∗) R3 : +update(//nurse[@id = $uid]/phone/∗, text()) R4 : −insert(//∗, treatment) R5 : −update(//treatment, ∗)
hospital patients nurses doctors patient ... nurse ... doctor ... name @wardNo=42 treatment
penicillin
name @id=42 phone 123-4567 n1 n2 n3 n4
update(/hospital/nurses/nurse/nurse[@id=42]/ phone[text()='123-4567'],...)?
n17
555-1212
complete ?
default semantics
Fairness fails if there is a point s.t. every covering update request also goes outside P
Paths p ::= α :: φ | p/p0 | p[q] Filters q ::= p | q and q | @f = d | true Axes α ::= self | child | descendant | attribute Node tests φ ::= l | ⇤ | f | text()
u ::= insert(n, T 0) | update(n, T 0) | delete(n)
U ::= insert(p, φ) | update(p, φ) | delete(p)
node n
edges
T
n
A D D D
P
P U
P U
P U
(T,u) in ⟪U⟫ ⊆ ⟪P⟫
they do for all examples we care about)
coNP-complete
linear path sets (basic open sets)
(T,n)'s, hence all open sets are also closed
LP(self :: φ) = {self :: l | l 2 [ [φ] ]} LP(child :: φ) = {child :: l | l 2 [ [φ] ]} LP(descendant :: φ) = LP(child :: ⇤)⇤ · LP(child :: φ) LP(p/p0) = LP(p) · LP(p0) S
FP(ax :: φ) = LP(ax :: φ) FP(p/p0) = FP(p) · FP(p0) FP(p[q]) = {p0[q0] | p0 2 FP(p), q0 2 FPQ(q)} FPQ(p) = FP(p) FPQ(q1 and q2) = {q0
1 and q0 2 | q0 1 2 FPQ(q), q0 2 2 FPQ(q0)}
FPQ(true) = {true}
path sets to be open)
homomorphisms, and /a - /a[b] is not
make containment much harder.)
containment (Miklau & Suciu 2004)
has a small (polynomial size) counterexample
XPath containment [Miklau & Suciu 2004]
and homomorphism)
witness property
solving
a bounded number of // steps
steps (which is reasonable).
account
(cf. negation) but increases complexity of static analysis
expensive to enforce dynamically
interesting connection between topology