
Bài th c hành s 11ự ố
ORACLE LABEL SECURITY (4)
Tóm t t n i dung:ắ ộ
Che d u c t thông tin chính sáchấ ộ
S d ng hàm gán nhãnử ụ
Các view c a OLSủ
I. M t s k thu t nâng cao trong OLSộ ố ỹ ậ
A. Lý thuy tế
1. Che d u c t thông tin nhãn d li uấ ộ ữ ệ
Đ tránh vi c hi n th c t ch a thông tin chính sách, ng i qu n tr có th thi tể ệ ể ị ộ ứ ườ ả ị ể ế
l p tùy ch n HIDE khi gán chính sách cho b ng.ậ ọ ả
M t khi chính sách đã đc áp d ng, tr ng thái n/Không n c a c t khôngộ ượ ụ ạ Ẩ Ẩ ủ ộ
th đc thay đi tr khi ta remove chính sách kh i b ng v i tham sể ượ ổ ừ ỏ ả ớ ố
DROP_COLUMN b ng TRUE. Sau đó chính sách có th đc áp d ng l i v iằ ể ượ ụ ạ ớ
tr ng thái m i.ạ ớ
Khi ng i dùng INSERT d li u vào b ng có tr ng thái n c t chính sách, giáườ ữ ệ ả ạ ẩ ộ
tr c a c t ch a nhãn s không b yêu c u ph i insert.ị ủ ộ ứ ẽ ị ầ ả
Câu l nh SELECT * s không t đng tr v giá tr c a c t n, tr khi nóệ ẽ ự ộ ả ề ị ủ ộ ẩ ừ
đc truy xu t tr c ti p.ượ ấ ự ế
Câu l nh DESCRIBE cũng s không hi n th thông tin c t n.ệ ẽ ể ị ộ ẩ
2. Hàm gán nhãn
Có nh ng b ng d li u l n, ta không th ng i gán nhãn cho t ng tr ng h p.ữ ả ữ ệ ớ ể ồ ừ ườ ợ
OLS cung c p cho ta m t cách gán nhãn khác. Đó là s d ng m t hàm (function)ấ ộ ử ụ ộ
do mình hi n th c đ OLS s t đng gán nhãn m i khi có hàng m i đc insertệ ự ể ẽ ự ộ ỗ ớ ượ
Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

vào b ng d li u đc b o v . Xem ph n th c hành đ hi u rõ h n v cáchả ữ ệ ượ ả ệ ầ ự ể ể ơ ề
th c làm vi c này.ứ ệ
Hàm gán nhãn s override 2 tùy ch n LABEL_DEFAULT vàẽ ọ
LABEL_UPDATE.
B. Th c hànhự
1. Che d u c t thông tin chính sáchấ ộ
Do trong bài lab tr c, ta đã áp d ng chính sách cho b ng mà không có tùy ch nướ ụ ả ọ
HIDE nên trong b i lab này ta ph i remove chính sách (xóa luôn c t thông tin),ả ả ộ
th c hi n l i đo n code gán nhãn trong bài lab tr c và gán l i chính sách.ự ệ ạ ạ ướ ạ
CONN sec_admin/secadmin;
BEGIN
sa_policy_admin.remove_table_policy
(policy_name => 'ACCESS_LOCATIONS',
schema_name => 'HR',
table_name => 'LOCATIONS',
drop_column => true);
END;
/
SELECT * FROM hr.locations;
Ta nh n th y lúc này c t OLS_COLUMN v n ch a b xóa dù Oracle báo th cậ ấ ộ ẫ ư ị ự
hi n thành công th t c. Lý do là khi remove chính sách, ta s xóa c tệ ủ ụ ẽ ộ
OLS_COLUMN, t c là đã thay đi b ng Locations. Do v y ta c n c p thêmứ ổ ả ậ ầ ấ
quy n ALTER trên b ng Locations cho sec_admin đ c t OLS_COLUMN th tề ả ể ộ ậ
s b xóa. Bây gi ta gán l i chính sách trên đ th y s thay đi sau khiự ị ờ ạ ể ấ ự ổ
sec_admin đc gán quy n.ượ ề
CONN sec_admin/secadmin;
BEGIN
sa_policy_admin.apply_table_policy
(policy_name => 'ACCESS_LOCATIONS',
schema_name => 'HR',
table_name => 'LOCATIONS',
table_options => 'NO_CONTROL');
Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

END;
/
CONN system/system;
GRANT alter ON hr.locations TO sec_admin;
CONN sec_admin/secadmin;
BEGIN
sa_policy_admin.remove_table_policy
(policy_name => 'ACCESS_LOCATIONS',
schema_name => 'HR',
table_name => 'LOCATIONS',
drop_column => true);
END;
/
SELECT * FROM hr.locations;
Ta nh n th y bây gi c t OLS_COLUMN đã th t s đc xóa.ậ ấ ờ ộ ậ ự ượ
Gán l i chính sách cho b ng v i NO_CONTROL và HIDE:ạ ả ớ
CONN sec_admin/secadmin;
BEGIN
sa_policy_admin.apply_table_policy
(policy_name => 'ACCESS_LOCATIONS',
schema_name => 'HR',
table_name => 'LOCATIONS',
table_options => 'HIDE,NO_CONTROL');
END;
/
Gán l i nhãn cho d li u trong b ng (do lúc remove đã xóa m t c t ch a thôngạ ữ ệ ả ấ ộ ứ
tin chính sách):
CONN sec_admin/secadmin;
UPDATE hr.locations SET ols_column = char_to_label
('ACCESS_LOCATIONS', 'CONF');
Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

UPDATE hr.locations SET ols_column = char_to_label
('ACCESS_LOCATIONS', 'CONF::US')
WHERE country_id = 'US';
UPDATE hr.locations SET ols_column = char_to_label
('ACCESS_LOCATIONS', 'CONF::UK')
WHERE country_id = 'UK';
UPDATE hr.locations SET ols_column = char_to_label
('ACCESS_LOCATIONS', 'CONF::CA')
WHERE country_id = 'CA';
UPDATE hr.locations SET ols_column = char_to_label
('ACCESS_LOCATIONS', 'CONF:SM:UK,CA')
WHERE (country_id = 'CA' and city = 'Toronto')
or (country_id = 'UK' and city = 'Oxford');
UPDATE hr.locations SET ols_column = char_to_label
('ACCESS_LOCATIONS', 'CONF:HR:UK')
WHERE country_id = 'UK' and city = 'London';
UPDATE hr.locations SET ols_column = char_to_label
('ACCESS_LOCATIONS', 'SENS:HR,SM,FIN:CORP')
WHERE country_id = 'CH' and city = 'Geneva';
COMMIT ;
Ti p theo ta c n gán l i chính sách v i tùy ch n HIDE và READ_CONTROL:ế ầ ạ ớ ọ
Chương Trình Đào Tạo Từ Xa KH & KT Máy Tính – Đại học Bách Khoa TP.HCM

CONN sec_admin/secadmin;
BEGIN
sa_policy_admin.remove_table_policy
(policy_name => 'ACCESS_LOCATIONS',
schema_name => 'HR',
table_name => 'LOCATIONS');
sa_policy_admin.apply_table_policy
(policy_name => 'ACCESS_LOCATIONS',
schema_name => 'HR',
table_name => 'LOCATIONS',
table_options =>
'HIDE,READ_CONTROL,WRITE_CONTROL,CHECK_CONTROL');
END;
/
Bây gi ta th truy xu t b ng Locations:ờ ử ấ ả
CONN sec_admin/secadmin;
SELECT * FROM hr.locations;
DESCRIBE hr.locations;
K t qu c a dòng code SELECT là “no rows selected”. Ch có câu l nhế ả ủ ỉ ệ
DESCRIBE có tr v k t qu . Nguyên nhân là do bây gi b ng này đã đc b oả ề ế ả ờ ả ượ ả
v , ch nh ng ng i đc c p quy n OLS c th m i có th truy xu t. Ta log inệ ỉ ữ ườ ượ ấ ề ụ ể ớ ể ấ
l i b ng user SKING:ạ ằ
CONN sking/sking;
SELECT * FROM hr.locations;
SELECT label_to_char (ols_column) as label, locations.*
FROM hr.locations;
Ta th y trong câu l nh SELECT th 2, ta có ch đnh rõ c t ols_column nên c tấ ệ ứ ỉ ị ộ ộ
này m i xu t hi n. Trong k t qu truy v n c a câu SELECT th nh t không cóớ ấ ệ ế ả ấ ủ ứ ấ
c t thông tin chính sách 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