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

