Bài th c hành s 7ự ố VIRTUAL PRIVATE DATABASE (2) Tóm t t n i dung ắ ộ � Quy n ề EXEMPT ACCESS POLICY � Giám sát quy n ề EXEMPT ACCESS POLICY � X lý các Exception v Policy Functionử ề � Column Sensi[.]
Trang 1Bài th c hành s 7 ự ố
VIRTUAL PRIVATE DATABASE (2)
Tóm t t n i dung: ắ ộ
Quy n ề EXEMPT ACCESS POLICY Giám sát quy n ề EXEMPT ACCESS POLICY
X lý các Exception v Policy Function ử ề 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 ủ RLS:
system@KNOX10g> CONN system/manager Connected
Trang 2system@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 ạ ầ ọ ề
Trang 3B 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: ệ
Trang 4sec_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, ụ ẽ ể ề ồ ờ ỗ ụ ệ
ta cũng c n ki m tra xem vi c audit đã đ ầ ể ệ ượ c th c hi n nh mình nghĩ ch a ự ệ ư ư 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
Trang 5FOR 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.
Trang 6III 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 ạ ỗ ạ ứ ấ ể ấ ố ủ xem ví d d ụ ướ i đây:
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;
Trang 7scott@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');
PL/SQL procedure successfully completed
Ta nh n th y m i th ban đ u đ u làm vi c t t: ậ ấ ọ ứ ầ ề ệ ố
sec_mgr@KNOX10g> CONN scott/tiger Connected
scott@KNOX10g> SELECT COUNT(*) FROM emp;
COUNT(*)
14
Tuy nhiên, n u b ng T b xóa đi thì s có l i sinh ra: ế ả ị ẽ ỗ
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