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