Bài thực hành Bảo mật hệ thống thông tin - Bài thực hành số 10: Oracle Label Security (3)

Bảo Mật Hệ Thống Thông Tin  
1
Lab 10  
Bài thực hành số 10  
ORACLE LABEL SECURITY (3)  
Tóm tắt nội dung:  
Các loại nhãn người dùng  
Các quyền đặc biệt trên chính sách  
Các điều kiện áp dụng chính sách  
Áp dụng chính sách cho bảng  
I. Các loại nhãn người dùng  
A. Lý thuyết  
Trong bài Lab 8 - Oracle Label Security (1), ở phần I.A.4, chúng ta đã nhắc đến quy  
trình cơ bản để xây dựng một chính sách OLS. Theo đó:  
B4: Gán chính sách trên cho các table hoặc schema mà bạn muốn bảo vệ.  
B5: Gán các giới hạn quyền, các nhãn người dùng hoặc các quyền truy xuất đặc biệt  
cho những người dùng liên quan.  
Thứ tự của 2 bước trên như vậy hợp lý, vì trong OLS, khi một chính sách được chỉ  
định bảo vệ cho một bảng/schema, kể từ thời điểm đó bất kỳ người dùng nào cũng  
không thể truy xuất vào bảng/schema đó trừ khi được gán cho các nhãn người dùng  
(user label) thích hợp hoặc được cấp những quyền đặc biệt đối với chính sách đó.  
Tuy nhiên, để hiểu được tác dụng của các tùy chọn áp dụng chính sách ở bước 4, ta cần  
phải hiểu về các ràng buộc đối với người dùng khi truy xuất các bảng và schema được  
bảo vệ. Do vậy, để việc tìm hiểu về OLS được dễ dàng hơn, trong bài lab này sẽ tạm  
hoán đổi thứ tự tìm hiểu thực hiện của bước 4 và bước 5. Khi đã hiểu biết cách  
hiện thực một chính sách OLS, các bạn hãy thực hiện các bước theo đúng thứ tự của nó  
để đảm bảo tính bảo mật và toàn vẹn cho dữ liệu .  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
2
Lab 10  
1. Nhãn người dùng (user label)  
Tại mỗi thời điểm, mỗi người dùng đều một nhãn gọi nhãn người dùng (user  
lable). Nhãn này có tác dụng cho biết mức độ tin cậy của người dùng đối với những  
dữ liệu được chính sách đó bảo vệ. Nhãn người dùng cũng gồm các thành phần  
giống như nhãn dữ liệu. Khi một người dùng truy xuất trên bảng được bảo vệ, nhãn  
người dùng sẽ được so sánh với nhãn dữ liệu của mỗi dòng trong bảng để quyết  
định những dòng nào người dùng đó thể truy xuất được. Hình bên dưới minh họa  
mối quan hệ tương ứng của user label data label.  
Các nhãn thể hiện các quyền truy xuất (user authorization) được gán cho các user.  
Các nhãn thể hiện mức độ nhạy cảm của dữ liệu (data sensitivity) được gán cho dữ  
liệu. Để thể truy xuất được dữ liệu, 2 loại nhãn này phải tương thích với nhau  
(access mediation).  
OLS cung cấp cho chúng ta 2 cách thức để quản lý các user label: gán cụ thể từng  
thành phần của nhãn cho user hoặc gán nguyên nhãn cho user. Trong các phần sau  
sẽ trình bày kỹ hơn về 2 cách quản lý này.  
sử dụng hình thức quản lý nào, mỗi người dùng cũng một tập xác thực  
quyền (set of authorizations) để lưu giữ thông tin về quyền hạn truy xuất đối với  
những dữ liệu được chính sách đó bảo vệ. Tập xác thực quyền gồm có:  
Level cao nhất (User Max Level) của người dùng trong các tác vụ read và  
write.  
Level thấp nhất (User Min Level) của người dùng trong các tác vụ write. User  
Min Level phải thấp hơn hoặc bằng User Max Level.  
Tập các compartment được truy xuất.  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
3
Lab 10  
Tập các group được truy xuất.  
(Đối với mỗi compartment và group có lưu kèm thông tin quyền truy xuất được  
phép là quyền chỉ đọc” (read-only) hay quyền đọc-viết” (read-write))  
Với tập xác thực quyền, ta có thể hình thành nên nhiều tổ hợp các thành phần của  
nhãn. Do vậy mỗi người dùng có thể nhiều user label khác nhau nhưng vẫn nằm  
trong giới hạn của tập xác thực quyền.  
Session label:  
Session label là một user label mà người dùng sử dụng để truy xuất dữ liệu  
trong một session làm việc. Session label có thể một tổ hợp bất kỳ các thành  
phần nằm trong giới hạn tập xác thực quyền của user đó.  
Người quản trị thể tả session label mặc định cho người dùng khi thiết lập  
tập xác thực quyền cho người dùng đó.  
Bản thân người dùng có thể thay đổi session label của mình thành một nhãn bất  
kỳ với điều kiện là nhãn mới nằm trong giới hạn xác thực quyền của họ.  
Row label:  
Khi một hàng mới được insert vào một bảng đang được bảo vệ, cần một nhãn  
dữ liệu (data label) được chỉ định cho hàng dữ liệu mới đó. Hoặc khi một hàng  
được update, nhãn dữ liệu của hàng đó cũng thể bị thay đổi.  
Những nhãn dữ liệu trong các trường hợp vừa nói trên có thể được gán cho  
dòng dữ liệu tương ứng theo một trong những cách sau:  
-
-
-
-
Người update/insert hàng dữ liệu chỉ định một cách tường mình ngay khi  
thực hiện tác vụ update/insert đó.  
Hàm gán nhãn (labeling function) của bảng đó tự sinh nhãn theo những điều  
kiện được hiện thực trong function tương ứng.  
Bằng giá trị mặc định do người quản trị quy định khi gán quyền hạn truy  
xuất cho người dùng đó.  
Bằng giá trị của session label của người dùng đó.  
Tùy ngữ cảnh trường hợp mà giá trị nhãn mới thêm vào sẽ rơi vào trường  
hợp nào trong các trường hợp kể trên.  
Row label từ dùng để chỉ những nhãn được áp dụng cho các hàng dữ liệu khi  
hàng đó được update hoặ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  
Bảo Mật Hệ Thống Thông Tin  
4
Lab 10  
Khi insert/update, người dùng có thể tả tường minh row label cho dòng dữ  
liệu mới được update/insert, với điều kiện row label phải thỏa đồng thời các  
điều kiện sau:  
-
-
-
Level thấp hơn hoặc bằng max level của người dùng đó.  
Level cao hơn hoặc bằng min level của người dùng đó.  
Chỉ được chứa các compartment xuất hiện trong session label hiện tại của  
người dùng đó người dùng có quyền viết (write) trên các compartment  
đó.  
-
Chỉ được chứa các group xuất hiện trong session label hiện tại của người  
dùng đó người dùng có quyền viết (write) trên các group đó.  
2. Quản người dùng theo từng loại thành phần của nhãn  
Để gán quyền theo cách này ta cần chỉ định ra cụ thể các level, compartment, group  
một user có thể truy xuất.  
Để dễ hiểu phần này, người học cần nhớ lại quy tắc quản lý truy xuất của OLS mà  
ta đã nêu lên trong bài Lab 8 – Oracle Label Security (1): “no read up - no write  
up - limited write down”.  
Quản lý các level: gồm có 4 thông số:  
max_level: level cao nhất người dùng có quyền đọc viết. Vì quy tắc quản  
đòi hỏi no read up – no write up” (không được đọc viết lên những dữ liệu  
độ bảo mật cao hơn độ tin cậy của user) nên max level chính là “giới hạn  
trên” cho việc truy xuất (đọc viết) của người dùng.  
min_level: level thấp nhất người dùng có quyền write. Vì quy tắc quản lý  
yêu cầu “limited write down” (chỉ viết lên những dữ liệu độ bảo mật thấp  
hơn độ tin cậy của người dùng ở một mức giới hạn nào đó) nên min level chính  
“giới hạn dưới” cho tác vụ viết của người dùng. “Giới hạn dưới” cho tác vụ  
đọc chính là level thấp nhất mà chính sách đó quy định.  
def_level: level cho session label mặc định của người dùng (phải thỏa min level  
<= default level <= max level). Nếu người quản trị bảo mật không mô tả thông  
số này thì default level sẽ max level.  
row_level: level cho row label mặc định của người dùng, dùng để gán nhãn cho  
dữ liệu mà user đó tạo khi truy xuất bảng được bảo vệ bởi chính sách (phải thỏa  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
5
Lab 10  
min level <= row level <= max level). Nếu người quản trị bảo mật không mô ta  
thông số này thì default row level sẽ default level.  
Compartment: Gồm có 4 thông số chính:  
read_comps: danh sách các compartment mà người dùng được quyền đọc.  
write_comps: danh sách các compartment mà người dùng được quyền viết  
(danh sách này phải tập con của danh sách read_comps).  
def_comps: danh sách các compartment cho session label mặc định của người  
dùng đó (danh sách này phải tập con của danh sách read_comps).  
row_comps: danh sách các compartment cho row label mặc định của người  
dùng, dùng để gán nhãn cho dữ liệu người dùng đó tạo khi truy xuất bảng  
được bảo vệ bởi chính sách (danh sách này phải tập con của danh sách  
read_comps và write_comps).  
Group: Gồm có 4 thông số chính:  
read_groups: danh sách các groups mà người dùng được quyền đọc.  
write_ groups: danh sách các groups mà người dùng được quyền viết (danh sách  
này phải tập con của danh sách read_ groups).  
def_ groups: danh sách các groups cho session label mặc định của người dùng  
đó (danh sách này phải tập con của danh sách read_ groups).  
row_ groups: danh sách các groups cho row label mặc định của người dùng đó,  
dùng để gán nhãn cho dữ liệu người dùng đó tạo ra khi truy xuất bảng được  
bảo vệ bởi chính sách (danh sách này phải tập con của danh sách read_  
groups và write_ groups).  
Lưu ý: nếu người dùng có quyền đọc trên một group thì đồng thời cũng quyền  
đọc trên tất cả các group con (trực tiếp và gián tiếp) của group đó. Tương tự đối với  
quyền viết cũng vậy. Hình bên dưới minh họa cho việc thừa kế quyền đọc viết  
trên các group. Trong hình, người dùng có quyền đọc trên group  
WESTERN_REGION nên cũng quyền đọc trên tất cả các group con còn lại. Bên  
cạnh đó, người dùng chỉ được cấp quyền viết trên group WR_FINANCE nên chỉ có  
quyền viết trên group này và 2 group con của chứ không có quyền viết trên các  
group WR_SALES, WR_HUMAN_RESOURCES, WESTERN_REGION.  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
6
Lab 10  
3. Quản người dùng thông qua các nhãn  
Để tiện lợi hơn, OLS cũng cho phép người quản trị thiết lập tập xác thực quyền cho  
người dùng thông qua việc gán các nhãn thay vì phải chỉ định từng thành phần  
riêng.  
Các loại nhãn cần tả:  
max_read_label: nhãn thể hiện mức truy xuất cao nhất đối với tác vụ đọc. Nó  
bao gồm level cao nhất (max_level) cho tác vụ đọc, tất cả các compartment và  
group mà người dùng được phép đọc (read_comps read_groups). Đây là  
nhãn mà người quản trị bắt buộc phải gán cho người dùng nếu chọn cách quản  
quyền truy xuất của người dùng thông qua nhãn.  
max_write_label: nhãn thể hiện mức truy xuất cao nhất đối với quyền viết. Nó  
bao gồm level cao nhất (max_level) cho tác vụ viết, tất cả các compartment và  
group mà người dùng được phép viết (write_comps write_groups). Nếu  
người quản trị không thiết lập giá trị cho loại nhãn này, nó sẽ lấy giá trị bằng giá  
trị của max_read_label.  
min_write_label: nhãn thể hiện mức truy xuất thấp nhất đối với tác vụ đọc.  
Nhãn này chỉ chứa level thấp nhất (min_level) của người dùng đó, không chứa  
bất kỳ compartment và group nào.  
def_read_label: là session label mặc định cho các tác vụ đọc của người dùng.  
Nó là tập con của max_read_label. Nếu người quản trị không thiết lập giá trị  
cho loại nhãn này, nó sẽ lấy giá trị bằng giá trị của max_read_label.  
def_write_label: là session label mặc định cho tác vụ write của người dùng. Nó  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
7
Lab 10  
tập con của def_read_label (có level bằng level của def_read_label; chứa tất  
cả các compartment và group mà người dùng có quyền viết trong  
def_read_label). Giá trị của nhãn này sẽ được tính một cách tự động bởi OLS  
từ giá trị của def_read_label. Nói cách khác, người quản trị sẽ không mô tả giá  
trị cho nhãn này.  
row_label: nhãn mặc định dùng để gán nhãn cho các dòng dữ liệu mà user tạo  
ra trong bảng được chính sách bảo vệ. Nhãn này là tập con của max_write_label  
def_read_label. Nếu người quản trị không thiết lập giá trị cho loại nhãn này,  
sẽ lấy giá trị bằng giá trị của def_write_label.  
Lưu ý: do def_write_label là nhãn được tính tự động từ def_read_label, người quản  
trị không cần phải thao tác trên nó nên trong các tài liệu hướng dẫn của Oracle  
def_read_label thường được gọi def_label. Kể từ các phần sau, bài thực hành của  
chúng ta cũng sẽ áp dụng cách gọi như vậy.  
4. Giải thuật bảo mật của OLS đối với tác vụ đọc  
Hình trên mô tả một cách rõ ràng cách thức mà OLS so sánh nhãn dữ liệu và nhãn  
người dùng tại thời điểm đó (session label) để quyết định xem người dùng có quyền  
đọc dòng dữ liệu đó hay không.  
Trong OLS, tác vụ đọc tương đương với lệnh SELECT.  
Nói một cách ngắn gọn, người dùng chỉ thể đọc được dữ liệu khi thỏa đồng thời  
các điều kiện sau:  
Level của session label cao hơn hoặc bằng level của dữ liệu.  
Session label có chứa ít nhất một group nằm trong các group của data label hoặc  
chứa group cha của ít nhất một group nằm trong data label.  
Session label có chứa tất cả các compartment xuất hiện trong data label.  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
8
Lab 10  
5. Giải thuật bảo mật của OLS đối với tác vụ viết  
Hình trên mô tả một cách rõ ràng cách thức mà OLS so sánh nhãn dữ liệu và nhãn  
người dùng để quyết định xem người dùng có quyền viết dòng dữ liệu đó hay  
không.  
Trong OLS, tác vụ viết tương đương với một trong các lệnh: UPDATE, INSERT,  
DELETE.  
Nói một cách ngắn gọn, người dùng chỉ thể viết được dữ liệu khi đồng thời thỏa  
2 điều kiện sau:  
Điều kiện về level: Level của data label phải thấp hơn hoặc bằng level của  
session label hiện tại của user và cao hơn hoặc bằng min_level của người dùng.  
Điều kiện về group và compartment: phải thỏa một trong 2 điều kiện sau:  
-
Nếu data label không có group: session label của người dùng phải quyền  
viết đối với tất cả các compartment mà data label đó có.  
-
Nếu data label có chứa group: session label phải quyền viết trên ít nhất  
một group trong data label hoặc quyền viết trên group cha của ít nhất một  
group trong data label. Bên cạnh đó, session label cũng phải chứa tất cả các  
compartment xuất hiện trong data label (tức là có quyền đọc trên tất cả các  
compartment của data label, còn quyền write có hoặc không có cũng được).  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
9
Lab 10  
6. Các quyền đặc biệt trong OLS  
một số lý do đặc biệt, một người dùng có thể được cấp những quyền đặc biệt  
trong OLS để thực hiện một số tác vụ chuyên biệt hoặc truy xuất đến dữ liệu nằm  
ngoài giới hạn truy xuất được quy định trong tập xác thực quyền của người dùng  
đó.  
Các quyền đặc biệt được OLS định nghĩa gồm có 2 nhóm: quyền truy xuất đặc biệt  
(Special Access Privilege), quyền đặc biệt trên row label (Special Row Label  
Privilege).  
Quyền truy xuất đặc biệt:  
READ: cho phép người quyền xem (SELECT) tất cả các dữ liệu do chính  
sách này bảo vệ, ngay cả khi người này không được gán bất cứ tập xác thực  
quyền nào.  
FULL: cho phép người quyền viết và xem tất cả các dữ liệu do chính sách  
này bảo vệ.  
COMPACCESS: quyền COMPACCESS cho phép người dùng truy xuất dữ liệu  
dựa trên các compartment của nhãn dữ liệu, không quan tâm đến các group mà  
nhãn dữ liệu đó đang chứa. Nếu nhãn dữ liệu đó không chứa compartment, việc  
truy xuất được xác định dựa trên các group như bình thường. Nếu dữ liệu đó có  
chứa các compartment và người dùng có quyền truy xuất (đọc/viêt) đến chúng  
thì việc xác thực các group sẽ được bỏ qua. Hai hình bên dưới lần lượt minh họa  
cho quy trình xác thực tác vụ đọc và tác vụ viết đối với người dùng có quyền  
COMPACCESS.  
Quy trình xác thực tác vụ đọc  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
10  
Lab 10  
Quy trình xác thực tác vụ viết  
PROFILE_ACCESS: cho phép thay đổi các session label của bản thân người  
dùng đó và session privilege của người dùng khác. Đây một quyền rất  
“mạnh”, người quyền này có thể ngầm trở thành người quyền FULL.  
Quyền đặc biệt trên row label:  
WRITE_UP: cho phép người dùng nâng level của một hàng dữ liệu nhưng  
không làm thay đổi các compartment và group của nó. Người dùng chỉ được  
nâng tối đa đến max_level của chính họ.  
WRITE_DOWN: cho phép người dùng hạ level của một hàng dữ liệu nhưng  
không làm thay đổi các compartment và group của nó. Người dùng chỉ được  
phép hạ tối đa xuống đến min_level của họ, không được hạ thấp hơn mức này.  
WRITE_ACROSS: cho phép người dùng thay đổi compartment và group của  
một hàng dữ liệu nhưng không thay đổi level của nó. Người dùng có thể thay  
đổi các compartment và group đó thành bất cứ compartment và group nào có  
định nghĩa trong chính sách.  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
11  
Lab 10  
B. Thực hành  
nghĩa các tham số của các thủ tục trong phần thực hành đã được giải thích trong phần  
thuyết nên sẽ không nhắc lại trong phần này).  
1. Gán quyền người dùng theo các thành phần của nhãn  
Louise Doran là nhân viên thuộc phòng Sales nên ta sẽ gán các level, compartment  
và group phù hợp với phòng ban và cấp bậc của Louise.  
Để gán level cho người dùng, ta dùng thủ tục SA_USER_ADMIN.SET_LEVELS.  
CONN hr_sec/hrsec;  
BEGIN  
sa_user_admin.set_levels  
(policy_name => 'ACCESS_LOCATIONS',  
user_name  
max_level  
min_level  
def_level  
row_level  
=> 'LDORAN',  
=> 'CONF',  
=> 'PUB',  
=> 'CONF',  
=> 'CONF');  
END;  
/
Gán  
compartment  
cho  
người  
dùng,  
ta  
dùng  
thủ  
tục  
SA_USER_ADMIN.SET_COMPARTMENTS.  
CONN hr_sec/hrsec;  
BEGIN  
sa_user_admin.set_compartments  
(policy_name => 'ACCESS_LOCATIONS',  
user_name  
=> 'LDORAN',  
=> 'SM,HR',  
read_comps  
write_comps => 'SM',  
def_comps  
row_comps  
=> 'SM',  
=> 'SM');  
END;  
/
Gán  
compartment  
cho  
người  
dùng,  
ta  
dùng  
thủ  
tục  
SA_USER_ADMIN.SET_GROUPS.  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
12  
Lab 10  
CONN hr_sec/hrsec;  
BEGIN  
sa_user_admin.set_groups  
(policy_name => 'ACCESS_LOCATIONS',  
user_name => 'LDORAN',  
read_groups => 'UK,CA',  
write_groups => 'UK',  
def_groups  
row_groups  
=> 'UK',  
=> 'UK');  
END;  
/
2. Gán quyền người dùng theo các nhãn  
Karen Partner là trưởng phòng Sales. Ta sẽ gán các nhãn phù hợp với phòng ban và  
cấp bậc của Karen.  
CONN hr_sec/hrsec;  
BEGIN  
sa_user_admin.set_user_labels  
(policy_name  
user_name  
=> 'ACCESS_LOCATIONS',  
=> 'KPARTNER',  
max_read_label => 'SENS:SM,HR:UK,CA',  
max_write_label => 'SENS:SM:UK',  
min_write_label => 'CONF',  
def_label  
row_label  
=> 'SENS:SM,HR:UK',  
=> 'SENS:SM:UK');  
END;  
/
3. Gán các quyền đặc biệt  
Steven King là tổng giám đốc có toàn quyền trên cơ sở dữ liệu, nên ta cấp quyền  
FULL cho người dùng 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  
Bảo Mật Hệ Thống Thông Tin  
13  
Lab 10  
CONN hr_sec/hrsec;  
BEGIN  
sa_user_admin.set_user_privs  
(policy_name => 'ACCESS_LOCATIONS',  
user_name  
=> 'SKING',  
=> 'FULL');  
PRIVILEGES  
END;  
/
Neena Kochhar là giám đốc điều hành nên ta có thể cấp quyền READ để người này  
thể xem toàn bộ dữ liệu.  
CONN hr_sec/hrsec;  
BEGIN  
sa_user_admin.set_user_privs  
(policy_name => 'ACCESS_LOCATIONS',  
user_name  
=> 'NKOCHHAR',  
=> 'READ');  
PRIVILEGES  
END;  
/
Lưu ý: tham số user_name trong các procedure vừa sử dụng ở phần B – Thực hành  
không nhất thiết phải một user thật sự của hệ thống. cũng thể là role, tên  
của ứng dụng,…  
II. Áp dụng chính sách OLS  
A. Lý thuyết  
1. Đối tượng được bảo vệ  
OLS cho phép ta gán các chính sách cho các đối tượng cần được bảo vệ theo 2 cấp  
độ: cấp schema và cấp bảng. Khi 1 bảng cần được bảo vệ bởi 1 chính sách nào đó,  
ta gán chính sách đó cho cụ thể bảng đó. Nếu muốn tất cả các bảng thuộc 1 schema  
đều được bảo vệ bởi 1 chính sách, ta gán chính sách đó cho schema đó.  
Lưu ý: Nếu 1 chính sách được gán cho 1 schema và đồng thời cũng được gán tường  
minh cho 1 bảng thuộc schema đó thì các tùy chọn, thao tác ở cấp độ bảng sẽ  
override các tùy chọn, thao tác ở cấp độ schema.  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
14  
Lab 10  
2. Các thao tác quản trị việc gán chính sách cho table/schema  
Áp dụng chính sách (Apply): ta gán chính sách cho cụ thể một bảng/schema cần  
được bảo vệ.  
Loại bỏ chính sách (Remove): loại bỏ sự bảo vệ của 1 chính sách khỏi  
bảng/schema. Lưu ý là khi loại bỏ như vậy, cột chứa nhãn của chính sách đó vẫn  
còn trong table, trừ khi ta xóa cột đó một cách tường minh.  
Ta có thể Enable/Disable một chính sách đang được gán cho 1 schema/bảng nào đó  
trong một khoảng thời gian.  
Để thay đổi những thiết lập tùy chọn của một chính sách đối với 1 bảng thì trước  
hết ta phải remove chính sách đó ra rồi sau đó apply trở lại với những thay đổi trong  
tùy chọn.  
3. Các tùy chọn cho việc áp dụng chính sách  
Các tùy chọn này cho phép ta quy định một số ràng buộc trong việc áp dụng các  
chính sách:  
LABEL_DEFAULT : Sử dụng row label mặc định của người dùng hiện tại để  
làm nhãn cho hàng dữ liệu mới được insert vào trừ khi row label được chỉ định  
tường minh bởi người insert hoặc hàm gán nhãn.  
LABEL_UPDATE: bình thường, một người dùng khi update dữ liệu thể thay  
đổi nhãn dữ liệu kèm theo. Tuy nhiên, nếu tham số này được bật lên, một người  
muốn thay đổi nhãn dữ liệu thì người đó phải có ít nhất một trong các quyền  
sau: WRITEUP, WRITEDOWN, and WRITEACROSS.  
CHECK_CONTROL: nếu tùy chọn này được thiết lập, mỗi khi dữ liệu được  
update/insert và nhãn dữ liệu bị thay đổi/tạo mới, OLS sẽ kiểm tra xem nhãn dữ  
liệu mới vượt quá giới hạn quyền của người update/insert hay không để tránh  
xảy ra tình trạng một người sau khi update/insert dữ liệu đó thì không thể truy  
xuất lại dữ liệu đó.  
READ_CONTROL: áp dụng chính sách cho mọi câu truy vấn. Chỉ những hàng  
có xác nhận quyền mới thể truy xuất bởi các thao tác SELECT, UPDATE và  
DELETE.  
WRITE_CONTROL: xác định khả năng INSERT, UPDATE, và DELETE dữ  
liệu tại 1 hàng. Nếu tùy chọn này được kích hoạt, người dùng phải được xác  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
15  
Lab 10  
thực quyền đầy đủ trước khi thực hiện các lệnh INSERT, UPDATE, DELETE.  
INSERT_CONTROL: có tác dụng giống tùy chọn WRITE_CONTROL nhưng  
chỉ đối với loại câu lệnh INSERT.  
DELETE_CONTROL: có tác dụng giống tùy chọn WRITE_CONTROL nhưng  
chỉ đối với loại câu lệnh DELETE.  
UPDATE_CONTROL: có tác dụng giống tùy chọn WRITE_CONTROL nhưng  
chỉ đối với loại câu lệnh UPDATE.  
ALL_CONTROL: áp dụng mọi ràng buộc tùy chọn.  
NO_CONTROL: không áp dụng bất cứ ràng buộc nào của chính sách.  
4. Gán nhãn cho dữ liệu  
Có 3 cách để một hàng dữ liệu được gán nhãn chính sách:  
Gán tường minh nhãn cho từng dòng dữ liệu thông qua các lệnh INSERT (cho  
dữ liệu mới) và UPDATE (cho dữ liệu đang tồn tại).  
Thiết lập tùy chọn LABEL_DEFAULT.  
Viết một function dùng cho việc gán nhãn cho các hàng dữ liệu của 1 bảng tùy  
theo nội dung của dữ liệu. Function này sẽ tự động được gọi cho mọi lệnh  
INSERT và UPDATE và nó độc lập với việc xác nhận quyền của mọi user.  
Tuy nhiên trong phạm vi bài thực hành này chúng ta sẽ chỉ dùng cách 1 để gán nhãn  
dữ liệu cho chính sách.  
B. Thực hành  
1. Áp dụng chính sách cho bảng  
Để gán chính sách  
cho  
các  
table  
ta  
dùng  
thủ  
tục  
SA_POLICY_ADMIN.APPLY_TABLE_POLICY  
CONN sec_admin/secadmin;  
BEGIN  
sa_policy_admin.apply_table_policy  
(policy_name  
schema_name  
table_name  
=> 'ACCESS_LOCATIONS',  
=> 'HR',  
=> 'LOCATIONS',  
=> 'NO_CONTROL');  
table_options  
END;  
/
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
16  
Lab 10  
Cần nhớ một điều quan trọng là khi một table được bảo vệ bởi 1 chính sách, các  
hàng dữ liệu chưa được gán nhãn sẽ không thể được truy xuất. Do đó khi áp dụng  
một chính sách bảo vệ cho bảng chứa sẵn dữ liệu, đầu tiên ta chọn tùy chọn  
‘NO_CONTROL’ để chính sách tuy được gán cho bảng (cột OLS_COLUMN được  
thêm vào bảng) nhưng những ràng buộc của chính sách chưa áp dụng lên bảng.  
Ta đăng nhập vào tài khoản HR để xem sự thay đổi của bảng sau khi gán chính  
sách:  
CONN HR/HR;  
DESCRIBE locations;  
Name  
Null?  
Type  
--------------- ---------- ------  
LOCATION_ID  
STREET_ADDRESS  
POSTAL_CODE  
CITY  
NOT NULL  
NOT NULL  
NUMBER(4)  
VARCHAR2(40)  
VARCHAR2(12)  
VARCHAR2(30)  
VARCHAR2(25)  
CHAR(2)  
STATE_PROVINCE  
COUNTRY_ID  
OLS_COLUMN  
NUMBER(10)  
2. Gán nhãn cho dữ liệu  
Để sec_admin có thể thiết lập nhãn cho các dòng dữ liệu ta cần gán quyền cho  
sec_admin:  
CONN hr/hr;  
GRANT select, insert, update ON locations TO sec_admin;  
Khi đã đủ quyền ta gán nhãn cho các dòng dữ liệu. Đầu tiên ta gán nhãn CONF  
cho mọi dữ liệu trong bảng:  
CONN sec_admin/secadmin;  
UPDATE  
hr.locations  
SET  
ols_column  
=
char_to_label  
('ACCESS_LOCATIONS', 'CONF');  
Tiếp theo ta cập nhật các nhãn của các dòng dữ liệu về các nước Mỹ, Anh, Canada:  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
17  
Lab 10  
CONN sec_admin/secadmin;  
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  
char_to_label  
('ACCESS_LOCATIONS', 'CONF::UK')  
WHERE country_id = 'UK';  
UPDATE  
hr.locations  
SET  
ols_column  
('ACCESS_LOCATIONS', 'CONF::CA')  
WHERE country_id = 'CA';  
Giả sử một số địa chỉ là thông tin đặc biệt cần bảo mật, nên ta gán cho những  
dòng này nhãn có độ bảo mật cao hơn:  
CONN sec_admin/secadmin;  
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  
char_to_label  
('ACCESS_LOCATIONS', 'CONF:HR:UK')  
WHERE country_id = 'UK' and city = 'London';  
UPDATE  
hr.locations  
SET  
ols_column  
=
('ACCESS_LOCATIONS', 'SENS:HR,SM,FIN:CORP')  
WHERE country_id = 'CH' and city = 'Geneva';  
COMMIT ;  
Lưu ý trong các lệnh trên ta có dùng thủ tục CHAR_TO_LABEL. Do giá trị các  
nhãn được lưu trong bảng thực chất là tag number. Cho nên ta phải dùng hàm này  
để chuyển từ dạng chuỗi ngắn của nhãn thành dạng số của nó.  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
Bảo Mật Hệ Thống Thông Tin  
18  
Lab 10  
Tới đây thì ta đã thực hiện xong 5 bước trong quy trình hiện thực OLS.  
Do trên chúng ta đã thiết lập tùy chọn ‘NO_CONTROL’ cho việc áp dụng chính  
sách nên ở đây chúng ta cần remove chính sách khỏi bảng rồi add lại chính sách với  
tùy chọn mới để chính sách có thể được kích hoạt bảo vệ cho bảng.  
CONN sec_admin/secadmin;  
BEGIN  
sa_policy_admin.remove_table_policy  
(policy_name  
schema_name  
table_name  
=> 'ACCESS_LOCATIONS',  
=> 'HR',  
=> 'LOCATIONS');  
sa_policy_admin.apply_table_policy  
(policy_name  
schema_name  
table_name  
=> 'ACCESS_LOCATIONS',  
=> 'HR',  
=> 'LOCATIONS',  
table_options  
=>  
'READ_CONTROL,WRITE_CONTROL,CHECK_CONTROL');  
END;  
/
III. Bài tập  
Tạo ra các user: sales_manager, sales_north, sales_west, sales_east, sales_south. Cấp quyền để  
các user này kết nối vào CSDL. Gán user label cho các user vừa tạo.  
Chương Trình Đào Tạo Từ Xa  
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM  
docx 18 trang yennguyen 08/04/2022 6240
Bạn đang xem tài liệu "Bài thực hành Bảo mật hệ thống thông tin - Bài thực hành số 10: Oracle Label Security (3)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • docxbai_thuc_hanh_bao_mat_he_thong_thong_tin_bai_thuc_hanh_so_10.docx