Thực hành An toàn cơ sở dữ liệu - Thực hành Oracle 9i
Tạo user
Tạo một user giống với user khác
Thay đổi thuộc tính của một user (trạng thái tài khoản, profile mặc định)
Thêm đặc quyền và role cho một user
Remove đặc quyền hay role từmột user
ần Minh Hà Nội Giám đốc Miền Bắc 5000 02 Lê Minh Hà Tây Kế hoạch Trưởng phòng Miền Bắc 3500 03 Vũ Văn Hiệp Bắc Giang Kế hoạch Trưởng phòng Miền Nam 3500 04 Nguyễn Văn Hoàng Hà Nội Maketing Nhân viên Miền Nam 3000 05 Lê Thị Vân Hải Phòng Maketing Nhân viên Miền Bắc 1500 06 Nguyễn Văn Hải Hải Dương Lập trình Trưởng phòng Miền Bắc 3500 07 Trần Văn Hoàng Nam Định Lập trình Nhân viên Miền Nam 2000 08 Nguyễn Hoàng Yến Hải Dương Kế hoạch Nhân viên Miền Nam 1500 09 Lê Văn Giang Nghệ An Kế hoạch Nhân viên Miền Bắc 2000 10 Nguyễn Hồng Kiên Hà Tây Giám đốc Miền Nam 5000 2.4.1 Tạo và thêm dữ liệu vào bảng TEST.NHANSU - Giả sử ta tạo một người dùng là TEST/123. Sau đó, ta tạo bảng NHANSU trong lược đồ TEST này, và thêm dữ liệu vào cho bảng đó. GV: Trần Thị Lượng – Khoa ATTT, Học viện KTMM 22 Tiếp theo chúng ta áp dụng chính sách đã tạo vào bảng TEST.NHANSU 2.4.2 Áp dụng chính sách ‘COMPANY’ Ta có thể chọn hai cách áp dụng sau: - Áp dụng chính sách với các tùy chọn trước, không giấu cột rowlabel: EXECUTE SA_POLICY_ADMIN.APPLY_TABLE_POLICY - ( policy_name => 'COMPANY' - ,schema_name => 'TEST' - GV: Trần Thị Lượng – Khoa ATTT, Học viện KTMM 23 ,table_name => 'NHANSU' - ,table_options => 'LABEL_DEFAULT,READ_CONTROL,WRITE_CONTROL'); - Áp dụng chính sách và che giấu đi cột rowlabel: EXECUTE SA_POLICY_ADMIN.APPLY_TABLE_POLICY - ( policy_name => 'COMPANY' - ,schema_name => 'TEST' - ,table_name => 'NHANSU' - ,table_options=> 'LABEL_DEFAULT,READ_CONTROL,WRITE_CONTROL,HIDE'); Giả sử ta chọn cách thứ nhất. Kết quả: - Sau bước này bảng TEST.NHANSU sẽ có thêm một cột là ROWLABEL, nhưng chưa có giá trị. Cần cập nhật các nhãn cho các hàng dữ liệu (các bản ghi) trong bảng NHANSU này. - Sau bước này, những user bình thường ko select được bảng nữa, chỉ có TEST (người tạo ra bảng), SYSTEM (admin).. mới select được, nhưng ko có dữ liệu. Do đó, ngay cả TEST ta cũng phải gán nhãn thì mới được quyền truy xuất dữ liệu trong bảng NHANSU. Tiếp theo chúng ta thực hiện việc cập nhật các nhãn cho các hàng dữ liệu GV: Trần Thị Lượng – Khoa ATTT, Học viện KTMM 24 2.4.3 Gán nhãn cho các hàng dữ liệu của bảng TEST.NHANSU Cập nhật các nhãn bằng các câu lệnh SQL như sau : - Gán nhãn cho các giám đốc: UPDATE test.nhansu SET ROWLABEL = char_to_label ('COMPANY', 'EXEC:KH,MK,LT:ALL') WHERE UPPER (CHUCVU) LIKE '%GIAM DOC%' AND UPPER(CHINHANH) LIKE '%ALL%'; UPDATE test.nhansu SET ROWLABEL = char_to_label ('COMPANY', 'EXEC:KH,MK,LT:MB') WHERE UPPER (CHUCVU) LIKE '%GIAM DOC%' AND UPPER(CHINHANH) LIKE '%MIEN BAC%'; UPDATE test.nhansu SET ROWLABEL = char_to_label ('COMPANY', 'EXEC:KH,MK,LT:MN') WHERE UPPER (CHUCVU) LIKE '%GIAM DOC%' AND UPPER(CHINHANH) LIKE '%MIEN NAM%'; - Gán nhãn cho các trưởng phòng: UPDATE test.nhansu SET ROWLABEL = char_to_label ('COMPANY', 'MGR:KH:MB') WHERE UPPER (CHUCVU) LIKE '%TRUONG PHONG%' AND UPPER(PHONG) LIKE '%KE HOACH%' AND UPPER(CHINHANH) LIKE '%MIEN BAC%'; UPDATE test.nhansu SET ROWLABEL = char_to_label ('COMPANY', 'MGR:KH:MN') WHERE UPPER (CHUCVU) LIKE '%TRUONG PHONG%' AND UPPER(PHONG) LIKE '%KE HOACH%' AND UPPER(CHINHANH) LIKE '%MIEN NAM%'; UPDATE test.nhansu GV: Trần Thị Lượng – Khoa ATTT, Học viện KTMM 25 SET ROWLABEL = char_to_label ('COMPANY', 'MGR:LT:MB') WHERE UPPER (CHUCVU) LIKE '%TRUONG PHONG%' AND UPPER(PHONG) LIKE '%LAP TRINH%' AND UPPER(CHINHANH) LIKE '%MIEN BAC%'; - Gán nhãn cho các nhân viên: UPDATE test.nhansu SET ROWLABEL = char_to_label ('COMPANY', 'OFF:LT:MB') WHERE UPPER (CHUCVU) LIKE '%NHAN VIEN%' AND UPPER(PHONG) LIKE '%LAP TRINH%' AND UPPER(CHINHANH) LIKE '%MIEN NAM%'; UPDATE test.nhansu SET ROWLABEL = char_to_label ('COMPANY', 'OFF:KH:MB') WHERE UPPER (CHUCVU) LIKE '%NHAN VIEN%' AND UPPER(PHONG) LIKE '%KE HOACH%' AND UPPER(CHINHANH) LIKE '%MIEN BAC%'; UPDATE test.nhansu SET ROWLABEL = char_to_label ('COMPANY', 'OFF:KH:MN') WHERE UPPER (CHUCVU) LIKE '%NHAN VIEN%' AND UPPER(PHONG) LIKE '%KE HOACH%' AND UPPER(CHINHANH) LIKE '%MIEN NAM%'; UPDATE test.nhansu SET ROWLABEL = char_to_label ('COMPANY', 'OFF:MK:MB') WHERE UPPER (CHUCVU) LIKE '%NHAN VIEN%' AND UPPER(PHONG) LIKE '%MAKETTING%' AND UPPER(CHINHANH) LIKE '%MIEN BAC%'; UPDATE test.nhansu SET ROWLABEL = char_to_label ('COMPANY', 'OFF:MK:MN') WHERE UPPER (CHUCVU) LIKE '%NHAN VIEN%' AND UPPER(PHONG) LIKE '%MAKETTING%' AND UPPER(CHINHANH) LIKE '%MIEN NAM%'; Tiếp theo ta thử tạo ra một số người dùng với chức danh và vị trí tương ứng và cấp quyền cho họ để kiểm tra. GV: Trần Thị Lượng – Khoa ATTT, Học viện KTMM 26 2.5 Bước 5 (Gán nhãn cho các user hay các ứng dụng): Bước này thực hiện gán nhãn phù hợp với từng người dùng. - Trước tiên chúng ta tạo một số người dùng (bằng công cụ Enterprise hoặc SQL) như: EXECUTIVE_MB, EXECUTIVE_MN MGR_KH_MB, MGR_KH_MN, OFF_KH_MB, OFF_KH_MN, OFF_MK_MN, OFF_LT_MN… (Khi chưa gán nhãn cho những người dùng này thì họ sẽ không thể đọc được dữ liệu gì trong bảng TEST.NHANSU, thậm chí cả người dùng TEST). - Tiến hành gán quyền DAC cho các user này vào table NHANSU như sau (Chú ý: chỉ có người dùng TEST mới được gán quyền này - người sở hữu bảng): EXECUTIVE_MB: SELECT, UPDATE, INSERT, DELETE EXECUTIVE_MN: SELECT, UPDATE, INSERT, DELETE MGR_KH_MB: SELECT, UPDATE, INSERT MGR_KH_MN: SELECT, UPDATE, INSERT OFF_KH_MB: SELECT OFF_KH_MN: SELECT OFF_MK_MN: SELECT OFF_LT_MN: SELECT GV: Trần Thị Lượng – Khoa ATTT, Học viện KTMM 27 - Tiếp theo, tiến hành gán các gán các nhãn-label cho các user với chức vụ tương ứng để họ có thể truy nhập vào những bản ghi phù hợp như đặc tả của bài toán. Gán nhãn user Ta gán nhãn tương ứng như sau: (chú ý người dùng TEST cũng cần được gán nhãn để có thể toàn quyền truy nhập vào bảng NHANSU): TEST label = EXEC: KH, MK, LT: ALL EXECUTIVE_MB label= EXEC: KH, MK, LT: MB EXECUTIVE_MN label= EXEC: KH, MK, LT: MN MGR_KH_MB label = MGR: KH: MB MGR_KH_MN label = MGR: KH: MN OFF_KH_MB label = OFF: KH: MB OFF_KH_MN label = OFF:KH:MN OFF_LT_MN label = OFF: LT: MN OFF_MK_MN label = OFF: MK: MN GV: Trần Thị Lượng – Khoa ATTT, Học viện KTMM 28 EXECUTE SA_USER_ADMIN.SET_USER_LABELS - ( policy_name => 'COMPANY' - ,user_name => 'TEST' - ,max_read_label => 'EXEC:KH,MK,LT:ALL' - ,max_write_label => 'EXEC:KH,MK,LT:ALL' - ,min_write_label => 'OFF' - ,def_label => 'EXEC:KH,MK,LT:ALL' - , row_label => 'OFF'); EXECUTE SA_USER_ADMIN.SET_USER_LABELS - ( policy_name => 'COMPANY' - ,user_name => 'EXECUTIVE_MB' - ,max_read_label => 'EXEC:KH,MK,LT:MB' - ,max_write_label => 'EXEC:KH,MK,LT:MB' - ,min_write_label => 'OFF' - ,def_label => 'EXEC:KH,MK,LT:MB' - , row_label => 'OFF'); EXECUTE SA_USER_ADMIN.SET_USER_LABELS - ( policy_name => 'COMPANY' - ,user_name => 'EXECUTIVE_MN' - ,max_read_label => 'EXEC:KH,MK,LT:MN' - ,max_write_label => 'EXEC:KH,MK,LT:MN' - ,min_write_label => 'OFF' - ,def_label => 'EXEC:KH,MK,LT:MN' - , row_label => 'OFF'); EXECUTE SA_USER_ADMIN.SET_USER_LABELS - ( policy_name => 'COMPANY' - ,user_name => 'MGR_KH_MB' - ,max_read_label => 'MGR:KH:MB' - ,max_write_label => 'MGR:KH:MB' - ,min_write_label => 'OFF' - GV: Trần Thị Lượng – Khoa ATTT, Học viện KTMM 29 ,def_label => 'MGR:KH:MB' - , row_label => 'OFF:KH:MB'); EXECUTE SA_USER_ADMIN.SET_USER_LABELS - ( policy_name => 'COMPANY' - ,user_name => 'MGR_KH_MN' - ,max_read_label => 'MGR:KH:MN' - ,max_write_label => 'MGR:KH:MN' - ,min_write_label => 'OFF' - ,def_label => 'MGR:KH:MN' - , row_label => 'OFF:KH:MN'); EXECUTE SA_USER_ADMIN.SET_USER_LABELS - ( policy_name => 'COMPANY' - ,user_name => 'OFF_KH_MB' - ,max_read_label => 'OFF:KH:MB' - ,max_write_label => 'OFF:KH:MB' - ,min_write_label => 'OFF' - ,def_label => 'OFF:KH:MB' - , row_label => 'OFF:KH:MB'); EXECUTE SA_USER_ADMIN.SET_USER_LABELS - ( policy_name => 'COMPANY' - ,user_name => 'OFF_KH_MN' - ,max_read_label => 'OFF:KH:MN' - ,max_write_label => 'OFF:KH:MN' - ,min_write_label => 'OFF' - ,def_label => 'OFF:KH:MN' - , row_label => 'OFF:KH:MN'); EXECUTE SA_USER_ADMIN.SET_USER_LABELS - ( policy_name => 'COMPANY' - ,user_name => 'OFF_MK_MN' - ,max_read_label => 'OFF:MK:MN' - ,max_write_label => 'OFF:MK:MN' - GV: Trần Thị Lượng – Khoa ATTT, Học viện KTMM 30 ,min_write_label => 'OFF' - ,def_label => 'OFF:MK:MN' - , row_label => 'OFF:MK:MN'); EXECUTE SA_USER_ADMIN.SET_USER_LABELS - ( policy_name => 'COMPANY' - ,user_name => 'OFF_LT_MN' - ,max_read_label => 'OFF:LT:MN' - ,max_write_label => 'OFF:LT:MN' - ,min_write_label => 'OFF' - ,def_label => 'OFF:LT:MN' - , row_label => 'OFF:LT:MN'); Kết quả Kết quả là Giám đốc có thể thực hiện mọi thao tác trên CSDL ở chi nhánh của mình, các trưởng phòng có thể xem, sửa và thêm thông tin của các nhân viên thuộc phòng họ và không thể xem thông tin của các phòng khác, các nhân viên thì chỉ có thể xem thông tin của phòng mình mà không được phép sửa đổi. Chú ý: khi giám đốc hay trưởng phòng insert một bản ghi vào bảng NHANSU (sau khi đã được áp dụng chính sách COMPANY) thì họ phải insert vào nhãn cho bản ghi đó. Tuy nhiên anh ta chỉ có thể insert các rowlabel tương ứng với các chức danh nhỏ hơn mình, đồng thời cần phải biết các nhãn tương ứng để insert một cách chính xác. Như vậy sau khi áp dụng OLS, các hàng dữ liệu trong bảng và các người dùng đều được gán nhãn an toàn phù hợp. Một người dùng chỉ được xem, thực hiện những câu truy vấn nhất định trong một số các bản ghi mà họ có thể xem chứ không phải tất cả các bản ghi của CSDL.
File đính kèm:
- Thực hành An toàn cơ sở dữ liệu - Thực hành Oracle 9i.pdf