Bài th c hành s  7

VIRTUAL PRIVATE DATABASE (2)

ắ ộ

 Tóm t

t n i dung:

(cid:0) Quy n ề EXEMPT ACCESS POLICY

(cid:0) Giám sát quy n ề EXEMPT ACCESS POLICY

(cid:0) ử ề X  lý các Exception v  Policy Function

(cid:0) Column Sensitive VPD

I. Quy n EXEMPT ACCESS POLICY

A. Lý thuy tế

ậ ấ ố ậ ả ấ ư ế ẫ ộ ỹ Tuy RLS cung c p m t k  thu t b o m t r t t t, nh ng nó cũng d n đ n m t s ộ ự

ữ ệ ự ụ ụ ụ ệ ả ị ị khó ch u khi th c hi n các tác v  qu n tr  CSDL (ví d : tác v  backup d  li u). Nh ư

ế ả ườ ủ ủ ố ượ ể đã bi t, ngay c  các DBA và ng i ch  c a các đ i t ng đó cũng không th  tránh

ượ ế ả ậ ườ ộ ả ủ ủ ặ ộ đ c các chính sách b o m t. N u ng i ch  c a m t b ng nào đó ho c m t DBA

ữ ệ ủ ả ự ệ ả ậ ẫ   th c hi n backup d  li u c a b ng đó trong khi các chính sách b o m t trên nó v n

ữ ệ ụ ể ẽ ế ấ ộ   có tác d ng, r t có th  file backup s  không có d  li u nào h t. Vì lý do này (và m t

ữ ề ấ ố s  lý do khác n a), Oracle cung c p quy n EXEMPT ACCESS POLICY. Ng ườ   i

ượ ẽ ượ ấ ỏ ấ ả ễ ườ đ ề c c p quy n này s  đ c mi n kh i t t c  các function RLS. Ng ả i qu n tr ị

ả ằ ụ ự ể ả ệ ệ ề ầ ấ ả CSDL có nhi m v  th c hi n backup c n có quy n này đ  đ m b o r ng t t c  các

ạ ữ ệ ẽ ượ d  li u s  đ c backup l i.

ự B. Th c hành

 Ví d  sau s  minh h a vi c c p quy n này và  nh h

ệ ấ ụ ẽ ề ả ọ ưở ủ ng c a nó trên các function

system@KNOX10g> CONN system/manager

Connected.

RLS:

Chương Trình Đào Tạo Từ Xa

KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

system@KNOX10g> -- SYSTEM bị ảnh hưởng bởi các policy function

system@KNOX10g> -- Nên không có record nào được delete

system@KNOX10g> DELETE FROM scott.emp;

0 rows deleted.

system@KNOX10g> -- Cấp quyền để SYSTEM kg bị ảnh hưởng bởi

policy function

system@KNOX10g> GRANT EXEMPT ACCESS POLICY TO SYSTEM;

Grant succeeded.

system@KNOX10g> -- SYSTEM không còn bị ảnh hưởng bởi các policy

function

system@KNOX10g> -- Tất cả các record bị xóa

system@KNOX10g> DELETE FROM scott.emp;

14 rows deleted.

system@KNOX10g> ROLLBACK;

II. Giám sát quy n EXEMPT ACCESS POLICY

A. Lý thuy tế

ụ ể ộ ề ấ ạ ỉ ị  Do đây là quy n r t m nh, không ch  đ nh trên c  th  m t schema hay object nào nên

ệ ầ ẩ ả ọ ượ ắ ữ ề ta c n c n tr ng trong vi c qu n lý xem ai đ c phép n m gi ặ    quy n này. M c

ữ ề ẽ ề ị đ nh, nh ng user có các quy n SYSDBA s  có quy n này (account SYS)

ể ả ượ ấ ệ ạ ụ ề ề ỏ Ta không th  ngăn c n các user đ c c p quy n kh i vi c l m d ng quy n đ ượ   c

ể ề ọ ớ ỉ ượ ấ ấ c p. Ta ch  có th  theo dõi xem h  làm gì v i quy n đ ộ   c c p đó. Auditing là m t

ả ể ả ệ ề ễ ả ừ ỏ cách hi u qu  đ  đ m b o quy n mi n tr ị ạ    kh i các chính sách RLS không b  l m

ẽ ượ ỹ ơ ề ụ d ng. Auditing s  đ c trình bày k  h n trong các bài lab v  Auditing sau này. Trong

ẽ ặ ầ ế ể ề ị ph n này s  m c đ nh là sinh viên đã bi ể ọ   t và hi u v  auditing. Sinh viên có th  đ c

ọ ề ầ ạ l i ph n này sau khi h c v  Auditing.

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

ể ể ượ ề ấ ằ Ta có th  ki m tra xem ai đ c c p quy n EXEMPT ACCESS POLICY b ng câu

ệ l nh sau:

Chương Trình Đào Tạo Từ Xa

KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

sec_mgr@KNOX10g> SELECT grantee

FROM dba_sys_privs

WHERE PRIVILEGE = 'EXEMPT ACCESS POLICY';

GRANTEE

------------------------------

SYSTEM

ụ ụ ẽ ể ệ ồ ờ ỗ ề  Ví d  sau s  trình bày cách đ  audit quy n này. Đ ng th i m i khi áp d ng vi c này,

sec_mgr@KNOX10g> -- Audit quyền EXEMPT ACCESS POLICY

sec_mgr@KNOX10g> AUDIT EXEMPT ACCESS POLICY BY ACCESS;

Audit succeeded.

sec_mgr@KNOX10g> -- Kiểm tra việc audit bằng cách thực hiện tác

sec_mgr@KNOX10g> -- vụ trong account người được cấp quyền

sec_mgr@KNOX10g> CONN system/manager

Connected.

system@KNOX10g> DELETE FROM scott.emp;

14 rows deleted.

system@KNOX10g> -- Rollback để undo lệnh delete

system@KNOX10g> -- Lệnh Rollback sẽ không xóa được audit record

mà Oracle

system@KNOX10g> -- vừa tạo ra khi SYSTEM thực hiện lệnh DELETE

system@KNOX10g> ROLLBACK ;

Rollback complete.

system@KNOX10g> CONN sec_mgr/oracle10g

Connected.

sec_mgr@KNOX10g> -- Hiển thị tác vụ vừa được audit

sec_mgr@KNOX10g>

BEGIN

ệ ể ầ ượ ự ư ệ ta cũng c n ki m tra xem vi c audit đã đ ư c th c hi n nh  mình nghĩ ch a.

Chương Trình Đào Tạo Từ Xa

KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

FOR rec IN (SELECT * FROM dba_audit_trail)

LOOP

DBMS_OUTPUT.put_line ('-------------------------');

DBMS_OUTPUT.put_line ('Who: ' || rec.username);

DBMS_OUTPUT.put_line ('What: ' || rec.action_name

|| ' on ' || rec.owner

|| '.' || rec.obj_name);

DBMS_OUTPUT.put_line ('When: '

|| TO_CHAR(rec.TIMESTAMP,'MM/DD HH24:MI'));

DBMS_OUTPUT.put_line ('How: "'|| rec.sql_text || '"');

DBMS_OUTPUT.put_line ('Using: ' || rec.priv_used);

END LOOP;

END;

/

-------------------------

Who: SYSTEM

What: DELETE on SCOTT.EMP

When: 04/04 14:22

How: "DELETE FROM scott.emp"

Using: DELETE ANY TABLE

-------------------------

Who: SYSTEM

What: DELETE on SCOTT.EMP

When: 04/04 14:22

How: "DELETE FROM scott.emp"

Using: EXEMPT ACCESS POLICY

PL/SQL procedure successfully completed.

ử ụ ự ể ề ở ị ệ ệ    Audit trail hi n th  2 record b i vì SYSTEM đã s  d ng 2 quy n khi th c hi n l nh

ứ ề ề ấ DELETE. Quy n th  nh t là quy n DELETE ANY TABLE cho phép delete trên t ấ   t

ứ ề ề ả ả c  các b ng. Quy n th  hai là quy n EXEMPT ACCESS POLICY cho phép không b ị

ả ưở ậ ượ ả ờ ặ ả nh h ng b i chính sách b o m t đ c áp đ t cho b ng EMP.

Chương Trình Đào Tạo Từ Xa

KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

III. X  lý các Exception v  Policy Function

A. Lý thuy tế

ị ấ ạ ể ạ ộ ế  Nói chung có 2 lo i error có th  khi n cho m t chính sách RLS b  th t b i:

 Policy function không h p l

ợ ệ ượ ự cho nên nó không đ ụ   c recompile và th c thi. Ví d ,

ẽ ả ồ ạ ế ấ ộ ỗ ề ỗ l i này s  x y ra khi policy truy v n đ n m t table không t n t i. L i v  chính

ể ả ồ ạ ế ệ ườ sách cũng có th  x y ra n u policy function không t n t i (vi c này th ng do

ặ ượ ị policy function đã b  drop ho c nó đã đ ủ ụ   c đăng ký không đúng trong th  t c

ADD_POLICY).

 Chu i tr  v  c a policy function khi đ

ỗ ả ề ủ ượ ệ ấ c thêm vào câu l nh SQL truy v n trên

ượ ả ỗ ợ ệ ệ ề ấ ố ượ đ i t ng đ ệ c b o v  gây ra l i câu l nh SQL không h p l . Có r t nhi u lý do

ế ả ệ khi n cho vi c này x y ra.

ự B. Th c hành

ạ ỗ ố ủ ứ ể ạ ấ Trong 2 lo i l ấ i trên, lo i th  nh t có th  làm m t đi tính trong su t c a VPD. Ta

scott@KNOX10g> -- Tạo ra table sẽ được gọi bởi policy function

scott@KNOX10g> CREATE TABLE t AS SELECT * FROM DUAL;

Table created.

scott@KNOX10g> -- Tạo ra policy function phụ thuộc vào table t

scott@KNOX10g> CREATE OR REPLACE FUNCTION pred_function (

p_schema IN VARCHAR2 DEFAULT NULL,

p_object IN VARCHAR2 DEFAULT NULL)

RETURN VARCHAR2

AS

l_total_recs NUMBER;

BEGIN

SELECT COUNT (*) INTO l_total_recs

FROM t;

RETURN '1 <= ' || l_total_recs;

END;

/

Function created.

ụ ướ xem ví d  d i đây:

Chương Trình Đào Tạo Từ Xa

KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

scott@KNOX10g> CONN sec_mgr/oracle10g

Connected.

sec_mgr@KNOX10g> -- Gán policy function trên cho bảng EMP;

sec_mgr@KNOX10g> BEGIN

DBMS_RLS.add_policy

(object_schema => 'SCOTT',

object_name => 'EMP',

policy_name => 'debug',

function_schema => 'SCOTT',

policy_function => 'pred_function');

END;

/

PL/SQL procedure successfully completed.

sec_mgr@KNOX10g> CONN scott/tiger

Connected.

scott@KNOX10g> SELECT COUNT(*) FROM emp;

COUNT(*)

----------

14

ệ ố ứ ề ậ ầ ấ ọ Ta nh n th y m i th  ban đ u đ u làm vi c t t:

scott@KNOX10g> DROP TABLE t;

Table dropped.

scott@KNOX10g> -- Policy function không hợp lệ và không được

recompile

scott@KNOX10g> SELECT COUNT(*) FROM emp;

SELECT COUNT(*) FROM emp

*

ERROR at line 1:

ORA-28110:policy function/package SCOTT.PRED_FUNCTION has error

ế ẽ ả ị ỗ Tuy nhiên, n u b ng T b  xóa đi thì s  có l i sinh ra:

Chương Trình Đào Tạo Từ Xa

KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

 Đ  s a l

ể ử ỗ ạ ệ ả ằ ỉ ầ i trên ta ch  c n recover l ệ i vi c xóa b ng b ng l nh Flashback Drop. Khi

scott@KNOX10g> -- Phục hồi bảng

scott@KNOX10g> FLASHBACK TABLE t TO BEFORE DROP;

Flashback complete.

scott@KNOX10g> SELECT COUNT(*) FROM emp;

COUNT(*)

----------

14

ẽ ượ ự ủ ệ ả ậ ụ ồ đó vi c th c thi c a chính sách b o m t cũng s  đ c ph c h i:

ụ ề ấ ấ ượ Tuy nhiên, trong ví d  trên, v n đ  chúng ta quan tâm là khi câu truy v n đ ự   c th c

ệ ả ị ướ ụ ồ ả ệ ượ ự ệ hi n sau khi b ng T b  xóa và tr c khi vi c ph c h i b ng T đ c th c hi n. Khi

ẽ ư ỗ ỉ ạ ị ỗ ấ đó CSDL s  đ a ra l i và có ch  ra chính xác t i sao câu truy v n b  l i. Thông báo

ể ấ ư ạ ộ tuy r t có ích đ  ta bi ế ượ ỗ ả c l i x y ra do đâu nh ng nó l t đ i làm l ạ    2 thông tin nh y

ườ ườ ế ứ ấ ằ ỉ ả c m mà ng i dùng bình th ng không nên bi ộ   t. Th  nh t là nó ch  ra r ng có m t

ứ ả ậ ế ủ ả chính sách b o m t trên table đó. Th  hai nó cho bi ậ   t tên c a chính sách b o m t

ệ ả b o v  table đó.

ừ ệ ể ấ ầ ấ T  đó xu t hi n nhu c u che d u các exception do policy function gây ra đ  không

ạ ả ể ị ườ ế ậ ố ấ ấ hi n th  các thông tin nh y c m cho ng i dùng th y. Cách ti p c n t t nh t cho yêu

ử ụ ấ ộ ộ ố   ầ c u này là s  d ng 1 câu SQL đ ng (dynnamic SQL) che d u các ràng bu c trên đ i

ẽ ẫ ệ ả ộ ị ượ t ng CSDL. Policy function s  v n ph i return ra m t giá tr  vì vi c return null s ẽ

ể ẫ ớ ệ ườ ấ ế ấ ả có th  d n t i vi c cho phép ng i dùng truy xu t đ n t t c  các record. Function

ử ế ỗ ả ượ ả ề ụ ầ c n x  lý sao cho n u có l i x y ra thì không có record nào đ c tr  v . Ví d  sau

ọ minh h a cho cách làm 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

scott@KNOX10g> CREATE OR REPLACE FUNCTION pred_function (

p_schema IN VARCHAR2 DEFAULT NULL,

p_object IN VARCHAR2 DEFAULT NULL)

RETURN VARCHAR2

AS

l_total_recs NUMBER;

BEGIN

-- Câu SQL động để che dấu sự phụ thuộc trên T

EXECUTE IMMEDIATE 'SELECT COUNT (*) FROM t'

INTO l_total_recs;

RETURN '1 <= ' || l_total_recs;

EXCEPTION

WHEN OTHERS THEN

-- Loại bỏ tất các record khi chính sách bảo mật không

-- thực hiện được

RETURN '1=0';

END;

/

Function created.

scott@KNOX10g> SELECT COUNT(*) FROM emp;

COUNT(*)

----------

14

scott@KNOX10g> DROP TABLE t;

Table dropped.

scott@KNOX10g> -- Chính sách bảo mật bị lỗi. Không có record nào

scott@KNOX10g> -- được trả về và không có thông báo lỗi nào được

scott@KNOX10g> -- đưa ra cho user

scott@KNOX10g> SELECT COUNT(*) FROM emp;

COUNT(*)

----------

0

Chương Trình Đào Tạo Từ Xa

KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

IV.

Column Sensitive VPD

A.

Lý thuy tế

 Oracle Database 10g cung c p thêm 1 tính năng m i cho VPD g i là Column Sensitive

ấ ớ ọ

ụ ủ ự ệ ả ậ ộ ầ   VPD. M c đích c a tính năng này là  th c hi n các chính sách b o m t khi c t c n

ệ ượ ả ả b o v  đ c tham kh o.

B.

Th c hành

 Gi

ả ử ủ ệ ả ả ộ ộ ị s  ta có m t chính sách b o v  trên b ng EMP c a SCOTT quy đ nh m t user có

ể ấ ấ ả ạ ừ ươ ủ ữ th  th y t t c  các thông tin c a nh ng nhân viên khác ngo i tr  l ủ ọ ng c a h . Khi

ỉ ượ ự ệ ầ ậ ả ộ ị đó ta c n hi n th c 1 chính sách b o m t trên EMP quy đ nh m t user ch  đ c truy

ấ ế ủ ả ườ ệ ế ấ xu t đ n record c a b n thân ng ả   i đó n u trong câu l nh truy xu t có tham kh o

sec_mgr@KNOX10g> CREATE OR REPLACE FUNCTION user_only (

p_schema IN VARCHAR2 DEFAULT NULL,

p_object IN VARCHAR2 DEFAULT NULL)

RETURN VARCHAR2

AS

BEGIN

-- Giả sử username của các account

-- chính là username được lưu trong bảng EMP

RETURN 'username = user’;

END;

/

Function created.

ế ộ đ n c t salary:

Chương Trình Đào Tạo Từ Xa

KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

sec_mgr@KNOX10g> BEGIN

DBMS_RLS.add_policy

(object_schema => 'SCOTT',

object_name => 'EMP',

policy_name => 'people_sel_sal',

function_schema => 'SEC_MGR',

policy_function => 'user_only',

statement_types => 'SELECT',

sec_relevant_cols => 'SALARY');

END;

/

PL/SQL procedure successfully completed.

scott@KNOX10g> -- Người dùng có thể thấy tất cả các record khi

scott@KNOX10g> -- salary không được truy vấn.

scott@KNOX10g> -- Câu lệnh sau chỉ xuất 5 record đầu tiên

scott@KNOX10g> SELECT username FROM emp

WHERE ROWNUM <= 5;

USERNAME

----------

SMITH

ALLEN

WARD

JONES

MARTIN

scott@KNOX10g> -- Thêm cột salary vào câu truy vấn, chính sách

scott@KNOX10g> -- bảo mật được áp dụng

scott@KNOX10g> SELECT username, salary FROM emp;

USERNAME SALARY

---------- ----------

SCOTT 3000

ạ ụ ệ ể  Ki m tra l i vi c áp d ng chính sách trên:

Chương Trình Đào Tạo Từ Xa

KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

 Có m t nhu c u th c t

ự ế ầ ộ ườ ả ố ị ườ là ng i qu n tr  mong mu n cho dù ng i dùng có tham

ế ộ ượ ả ả ả ề ẽ ứ ầ ủ ệ ế ư ả ố kh o đ n c t đ c b o v , k t qu  tr  v  s  ch a đ y đ  các record gi ng nh  khi

ị ủ ộ ế ộ ả ở ữ ượ ả không có tham kh o đ n c t đó và các giá tr  c a c t đó nh ng record đ c b o v ệ

ữ ệ ả ề ề ị ỉ ườ ẽ s  có giá tr  null. Đi u này không ch  giúp cho d  li u tr  v  cho ng i dùng đ ượ   c

ố ố ớ ậ ở ủ ườ ả ầ đ y đ  mà còn giúp cho chính sách b o m t tr  nên trong su t đ i v i ng i dùng.

ượ ọ ế ậ Cách ti p c n này đ c g i là “column masking”.

ụ ế ề ấ ả ợ ế ộ    Xét ti p ví d  trên. Đi u ta mong đ i là khi trong câu truy v n có tham kh o đ n c t

ấ ả ề ấ ỏ ượ ả ề ị ạ ộ salary, t t c  các record th a câu truy v n đ u đ c tr  v  và giá tr  t i c t salary

sec_mgr@KNOX10g> BEGIN

-- Xóa chính sách hiện tại

DBMS_RLS.drop_policy

(object_schema => 'SCOTT',

object_name => 'EMP',

policy_name

=> 'people_sel_sal');

-- Thêm lại chính sách với thay đổi ở

-- tham số SEC_RELEVANT_COLS_OPT

DBMS_RLS.add_policy

(object_schema

=> 'SCOTT',

object_name

=> 'EMP',

policy_name

=> 'people_sel_sal',

function_schema => 'SEC_MGR',

policy_function => 'user_only',

statement_types => 'SELECT',

sec_relevant_cols => 'SALARY',

sec_relevant_cols_opt

=>

DBMS_RLS.all_rows);

END;

/

PL/SQL procedure successfully completed.

scott@KNOX10g> SELECT username, salary FROM emp

WHERE deptno = 20;

ữ ủ ẽ ị ủ c a nh ng record c a các user khác s  có giá tr  null.

Chương Trình Đào Tạo Từ Xa

KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

USERNAME SALARY

----------

----------

SMITH

JONES

SCOTT 3000

ADAMS

FORD

ụ ư ể ệ ố ỉ L u ý: tham s  sec_relevant_cols_opt ch  có th  áp d ng cho câu l nh select.

V. Bài t pậ

1.

ậ ở ệ ả ự ố Hoàn thi n chính sách b o m t ể ả    bài th c hành s  6 (HolidayControl) đ  đ m

ộ ộ ẽ ạ ả ả ả ả b o khi exception x y ra s  không b c l ậ   ủ  thông tin nh y c m c a chính sách b o m t

2.

này.

ử ạ ỉ ậ ở ả ượ Ch nh s a l i chính sách b o m t câu 1, cho phép Annu xem đ c các thông

3.

ư ả ỉ ượ ỉ ủ tin trong b ng Holiday nh ng ch  xem đ c ngày ngh  c a chính mình.

ừ ở ế ậ ề ả ưở T  chính sách HolidayControl câu 2, thi t l p quy n không  nh h ng và

ả ự ố ớ ộ ố ự ả đ m b o s  giám sát đ i v i chính sách này cho user Hann. Th c thi m t s  thay đ i d ổ ữ

ệ ế ả li u và xem k t qu .

Chương Trình Đào Tạo Từ Xa

KH & KT Máy Tính – Đại học Bách Khoa TP.HCM