Bài th c hành s 6
VIRTUAL PRIVATE DATABASE (1)
Tóm t t n i dung:
Gi i thi u v Virtual Private Database
Row-level security
K thu t làm vi c v i policy function
I. Gi i thi u chung
Trong nhi u năm dài, vi c áp d ng các chính sách b o m t cho d li u n m trong các
b ng CSDL đc hi n th c b ng vi c s d ng view cùng v i các function. Tuy nhiên ượ
cách hi n th c này nhi u khi không th là m t gi i pháp th c t cho m c đích trên, đc ế
bi t khi c n th c hi n b o m t m c đ “dòng d li u” (row-level security). Th y
đc nhu c u ngày càng cao c a ng i dùng, t Oracle Database 8.1.5, Oracle đã gi iượ ườ
thi u m t công ngh m i r t hi u qu là Virtual Private Database (t đây g i t t là
VPD).
VPD là s k t h p c a 2 k thu t: ế
Fine-grained access control (FGAC): cho phép ng i qu n tr dùng các function đườ
hi n th c các chính sách b o m t và liên k t các chính sách b o m t đó v i các table, ế
view ho c synonym. Vi c gán các chính sách nh v y khi n cho nh ng ng i dùng ư ế ườ
v i quy n h n khác nhau s th y đc nh ng “khung nhìn” khác nhau đi v i đi ượ
t ng đc b o v . Vi c gi i h n khung nhìn này s trong su t đi v i m i ng iượ ượ ườ
dùng. Đng th i chính sách b o m t đó s đc áp d ng cho b t k user nào truy ượ
xu t đn table đó mà không c n ng i qu n tr ph i gán chính sách cho t ng user. ế ườ
Đi u này khi n các chính sách b o m t đc hi n th c b ng FGAC d qu n lý h n ế ượ ơ
khi hi n th c b ng view.
Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
Application Context: cung c p m t n i l u tr b o m t cho nh ng giá tr ng c nh ơ ư
ng d ng. S d ng Application Context s nâng cao hi u qu th c hi n c a FGAC
(trong ch ng trình chúng ta không h c v Application-context).ươ
L u ýư : b i vì đây là 1 ph ng pháp hi u qu và ph bi n đ hi n th c vi c b o m t ươ ế
m c dòng d li u trong Oracle, nên ng i ta th ng dùng thu t ng ườ ườ Row-level security
(RLS) đ thay cho Fine-grained access control ho c Virtual Private Database.
II. Row-level Security
A. Lý thuy tế
1. Row-level Security
Row-level security (RLS) cho phép gi i h n vi c truy xu t các hàng (record)
d a trên m t chính sách b o m t (security policy) đc hi n th c b ng PL/SQL. ượ
M t chính sách b o m t mô t các quy đnh qu n lý vi c truy xu t các dòng d
li u.
2. C ch th c hi nơ ế
Đ th c hi n RLS, đu tiên ta t o 1 hàm PL/SQL (PL/SQL function) tr v
m t chu i (string). Chu i string này ch a các đi u ki n c a chính sách b o m t
mà ta mu n hi n th c.
Hàm PL/SQL v a đc t o trên sau đó đc đăng ký cho các table, view mà ượ ượ
ta mu n b o v b ng cách dùng package PL/SQL DBMS_RLS.
Khi có m t câu truy v n c a b t k user nào trên đi t ng đc b o v , ượ ượ
Oracle s n i chu i đc tr v t hàm nêu trên vào m nh đ WHERE c a câu ượ
l nh SQL ban đu (n u trong câu l nh SQL ban đu không có m nh đ WHERE ế
thì Oracle s t đng t o thêm m nh đ WHERE đ đa chu i đi u ki n vào), ư
nh đó s l c đc các hàng d li u theo các đi u ki n c a chính sách b o m t. ượ
Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
3. Các l u ý khi làm vi c v i RLSư
Các hàm PL/SQL đc đăng ký cho các table, view hay synonym b ng cách g iượ
th t c DBMS_RLS.ADD_POLICY.
Th t c ADD_POLICY đòi h i ít nh t ph i có 3 tham s nh p vào:
object_name, policy_name, policy_function. (Mô t chi ti t c a package ế
DBMS_RLS đc ch a trong fileượ
th _m c_cài_đt_Oracle\Oracle\RDBMS\ADMIN\dbmsrlsa.sql).ư
S k t h p c a object_schema, object_name, và policy_name ph i là duy nh t. ế
M c đnh, policy s đc áp d ng cho t t c các l nh DML. Ng i qu n tr có ượ ườ
th dùng tham s STATEMENT_TYPES đ ch ra policy áp d ng cho lo i câu
l nh nào.
B t c khi nào 1 user truy xu t m t cách tr c ti p hay gián ti p vào đi t ng ế ế ượ
đc b o v , RLS engine s đc g i m t cách trong su t, hàm PL/SQL đã đăngượ ượ
ký s đc th c thi, và r i l nh SQL c a user s đc ch nh s a và th c thi. ượ ượ
Tuy nhiên, account SYS không b nh h ng b i b t k chính sách b o m t ưở
nào.
Nhi u policy cũng có th áp d ng cho cùng 1 đi t ng. Khi đó CSDL s k t ượ ế
h p t t c các policy đó l i v i nhau theo phép AND.
Quy n s d ng package DBMS_RLS không đc gán cho m i ng i dùng. ượ ườ
Nh ng ng i qu n tr c n đc gán quy n EXECUTE ON DBMS_RLS đ có ườ ượ
th s d ng đc nó. ượ
T t c các policy function mà ta t o ra đu ph i có đúng 2 tham s truy n vào.
Tham s đu tiên là tên c a schema s h u đi t ng mà chính sách RLS đó b o ượ
v . Tham s th hai là tên c a đi t ng đc b o v . Hai tham s này r t h u ượ ượ
ích vì 1 policy function có th đc áp d ng cho nhi u đi t ng khác nhau trong ượ ượ
nhi u schema khác nhau. Tên c a các tham s có th đc đt tho i mái nh ng ượ ư
th t c a 2 tham s ph i tuân th theo th t trên. Các tham s s đc dùng ượ
đ xác đnh đi t ng nào mà chính sách đó đc g i cho nó. Ki u c a 2 tham ượ ượ
s truy n vào và c a giá tr tr v ph i là ki u VARCHAR2.
Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
Policy function c n đc t o ra trong schema c a ng i qu n tr b o m t. ượ ườ
Đi u này quan tr ng vì vi c truy xu t vào các policy function c n đc b o v . ượ
Các user khác không nên có quy n th c thi hay quy n alter ho c quy n drop trên
các policy function này.
Đ hi n th c đc các chính sách b o m t ph c t p m t cách hi u qu , thông ượ
th ng ng i ta s d ng k t h p RLS v i Application Context. Nh đó các chínhườ ườ ế
sách b o m t s đc áp d ng theo các đi u ki n linh ho t h n (ví d : áp d ng ượ ơ
chính sách b o m t nào là d a trên ng i dùng thu c Department s m y). Trong ườ
ch ng trình th c hành c a chúng ta không h c v Application Context, sinh viênươ
t tìm hi u thêm v v n đ này.
Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
B. Th c hành
Gi s ta có m t chính sách b o m t (security policy) quy đnh không m t
ng i dùng nào đc truy xu t đn các record thu c Department có deptno là 10ườ ượ ế
trong b ng EMP thu c schema c a user SCOTT. Đ chính sách này có th áp d ng
cho CSDL, đu tiên ta c n t o 1 PL/SQL function có chu i tr v là đi u ki n c a
chính sách b o m t trên:
sec_mgr@KNOX10g> CREATE OR REPLACE FUNCTION no_dept10 (
p_schema IN VARCHAR2,
p_object IN VARCHAR2)
RETURN VARCHAR2
AS
BEGIN
RETURN 'deptno != 10';
END;
/
Function created.
Sau khi t o function hi n th c chính sách b o m t, ta c n đăng ký function đó
cho đi t ng mà chính sách đó mu n b o v b ng cách dùng th t c ượ
ADD_POLICY trong package DBMS_RLS.
sec_mgr@KNOX10g> BEGIN
DBMS_RLS.add_policy
(object_schema => 'SCOTT',
object_name => 'EMP',
policy_name => 'quickstart',
policy_function => 'no_dept10');
END;
/
PL/SQL procedure successfully completed.
Hai b c hi n th c chính sách b o m t v a trình bày trên nên đc th cướ ượ
hi n b i account ch u trách nhi m v qu n lý b o m t (trong ví d này và c các ví
d khác trong bài lab, account ch u trách nhi m qu n lý b o m t là sec_mgr).
Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM