Bài thực hành Bảo mật hệ thống thông tin số 11: Oracle Label Security (4) có nội dung trình bày về một số kỹ thuật nâng cao trong OLS, 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,... Mời các bạn cùng tham khảo chi tiết nội dung tài liệu.
Trang 1Bà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
Trang 2và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');
Trang 3/
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');
Trang 4UPDATE 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:ế ầ ạ ớ ọ
Trang 5CONN 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.ộ
Trang 62 Dùng hàm gán nhãn
Trong ph n th c hành này, ta s dùng b ng Employees c a schem HR đ minhầ ự ẽ ả ủ ể
h a.ọ
C p các quy n c n thi t cho sec_admin trên b ng Employees:ấ ề ầ ế ả
CONN system/system;
GRANT select, insert, update, alter
ON hr.employees TO sec_admin;
GRANT create procedure TO sec_admin;
CONN lbacsys/lbacsys
GRANT execute ON to_lbac_data_label
TO sec_admin WITH GRANT OPTION;
Ti p theo ta vi t m t hàm gán nhãn d a trên đi u ki n c a thông tin nhân viên:ế ế ộ ự ề ệ ủ
CONN sec_admin/secadmin;
CREATE OR REPLACE FUNCTION sec_admin.gen_emp_label
(Job varchar2, Depto number, Sal number)
RETURN LBACSYS.LBAC_LABEL
AS
i_label varchar2(80);
BEGIN
/************* Xác định level *************/
IF Sal > 17000 THEN
i_label := 'SENS:';
ELSIF Sal > 10000 THEN
i_label := 'CONF:';
ELSE
i_label := 'PUB:';
END IF;
/************* Xác định compartment *************/
IF Job LIKE '%HR%' THEN i_label := i_label||'HR:';
ELSIF (Job LIKE '%MK%') OR (Job LIKE '%SA%') THEN i_label := i_label||'SM:';
Trang 7ELSIF Job LIKE '%FI%' THEN i_label := i_label||'FIN:';
ELSE i_label := i_label||':';
END IF;
/************* Xác định groups *************/
i_label := i_label||'CORP';
RETURN TO_LBAC_DATA_LABEL('ACCESS_LOCATIONS',i_label); END;
/
Ta c n gán cho LBACSYS quy n th c thi trên hàm gán nhãn v a đầ ề ự ừ ượ ạc t o:
CONN sec_admin/secadmin;
GRANT execute ON sec_admin.gen_emp_label TO lbacsys;
Ta ch đ nh th t c v a hi n th c làm hàm gán nhãnỉ ị ủ ụ ừ ệ ự cho bảng Employees: CONN sec_admin/secadmin;
BEGIN SA_POLICY_ADMIN.APPLY_TABLE_POLICY ( policy_name => 'ACCESS_LOCATIONS', schema_name => 'HR',
table_name => 'EMPLOYEES', table_options =>
'READ_CONTROL,WRITE_CONTROL,CHECK_CONTROL', label_function => 'sec_admin.gen_emp_label
(:new.job_id,:new.department_id,:new.salary)'); END;
/
II Các view thông tin c a OLS ủ
Các thông tin v các chính sách c a OLS đề ủ ượ ưc l u trong data dictionary. Ta có
th xem các thông tin này thông qua các view c a OLS.ể ủ
View DBA_SA_USERS: hi n th thông tin v t t c các chính sách có trongể ị ề ấ ả CSDL
Trang 8DBA_SA_USER_LEVELS: hi n th thông tin level c a m i ngể ị ủ ọ ười dùng.
DBA_SA_USER_COMPARTMENTS: hi n th thông tin compartment c a m iể ị ủ ọ
người dùng
DBA_SA_USER_GROUPS: hi n th thông tin group c a m i ngể ị ủ ọ ười dùng
Đ xem t t c các view trên c n log in vào tài kho n LBACSYS ho c để ấ ả ầ ả ặ ượ c
c p quy n SELECT t LBACSYS.ấ ề ừ
conn lbacsys/lbacsys;
select * from DBA_SA_USERS;
select * from DBA_SA_USER_LEVELS;
select * from DBA_SA_USER_COMPARTMENTS;
select * from DBA_SA_USER_GROUPS;
III Bài t p ậ
1. Vi t hàm gán nhãn GET_CUSTOMER_LABEL cho các khách hàng trong b ng ế ả
CUSTOMERS đã t o bài lab 9 theo đi u ki n sau:ạ ở ề ệ
Credit > 2000: level 3; 500 < credit <= 2000: level 2; còn l i level 1ạ
Cust_type = ‘Platinum’ thì compartment là Manager, còn l i là Employeeạ
Group gán theo region
2. Th c hi n các câu l nh c n thi t đ b ng trên đự ệ ệ ầ ế ể ả ược gán nhãn và được áp d ng chính ụ sách REGION_POLICY đã t o trong bài lab 8.ạ
3. Th c hi n m t s câu l nh đ ki m tra tác d ng c a chính sách.ự ệ ộ ố ệ ể ể ụ ủ