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

pdf30 trang | Chuyên mục: Oracle | Chia sẻ: dkS00TYs | Lượt xem: 2703 | Lượt tải: 2download
Tóm tắt nội dung Thực hành An toàn cơ sở dữ liệu - Thực hành Oracle 9i, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ầ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:

  • pdfThực hành An toàn cơ sở dữ liệu - Thực hành Oracle 9i.pdf
Tài liệu liên quan