ự
ố
Bài th c hành s 10
ORACLE LABEL SECURITY (3)
ắ ộ
Tóm t
t n i dung:
(cid:0) ạ ườ Các lo i nhãn ng i dùng
(cid:0) ặ ệ ề Các quy n đ c bi t trên chính sách
(cid:0) ụ ề ệ Các đi u ki n áp d ng chính sách
(cid:0) ụ ả Á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 là 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
ể ấ ả ừ ượ nhãn nào cũng không th truy xu t vào b ng/schema đó tr khi đ c gán cho các
ườ ặ ợ ượ ữ ề ấ ặ 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 ở ướ c b
ố ớ ể ề ầ ả ộ ườ ả ấ 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 và th c hi n c a b c 4 và b c 5. Khi đã
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
ể ế ự ự ệ ệ ạ ộ hi u và 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
1.
ườ Nhãn ng i dùng (user label)
ể ạ ỗ ỗ ườ ề ộ ọ ườ ờ T i m i th i đi m, m i ng i dùng đ u có m t nhãn g i là nhãn ng i dùng
ụ ế ậ ủ ứ ộ ườ t m c đ tin c y c a ng ố i dùng đ i (user lable). Nhãn này có tác d ng cho bi
ữ ệ ữ ượ ệ ả ườ ồ ớ 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 đó có 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 và 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. Đ có 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.
ử ụ ả ỗ ườ ậ ứ Dù s d ng hình th c qu n lý nào, m i ng i dùng cũng có m t ự ộ t p xác th c
ể ư ữ ề ề ạ ấ ố thông tin v quy n h n truy xu t đ i quy nề (set of authorizations) đ l u gi
ữ ệ ượ ữ ệ ậ ự ề ả ồ ớ 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
ấ ủ ườ i dùng trong các tác v ụ ấ (User Min Level) c a ng
ặ ằ ả ấ ơ write. User Min Level ph i th p h n ho c b ng User Max Level.
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
T p các compartment
ậ ượ ấ đ c truy xu t.
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 “ ỉ ọ ” (readonly) hay quy n “ề ế ” (read ch đ c ọ đ cvi t
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 có nhi u user label khác nhau nh ng
Session label:
ằ ớ ạ ủ ậ ự ề ẫ v n n m trong gi i h n c a t p xác th c quy n.
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 là 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 có th mô 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
Row label:
ủ ọ c a h .
ớ ượ ộ ả ượ ả ệ ầ ộ Khi m t hàng m i đ c insert vào m t b ng đang đ c b o v , c n có
ữ ệ ộ ượ ữ ệ ớ ỉ ị 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 có 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.
ằ ị ườ ề ả ị ị ạ i qu n tr quy đ nh khi gán quy n h n ị ặ B ng giá tr m c đ nh do ng
ườ ấ truy xu t cho ng i dùng đó.
B ng giá tr c a session label c a ng
ị ủ ủ ằ ườ i dùng đó.
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
Tùy ng c nh và 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 là 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.
Khi insert/update, ng
ườ ể i dùng có th mô 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:
ủ ấ ơ ườ i dùng đó. ặ ằ 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
Ch đ
ỉ ượ ứ ệ ấ c ch a các compartment xu t hi n trong session label hi n t ệ ạ i
ườ ườ ế ề vi t (write) ủ c a ng i dùng đó và ng i dùng có quy n 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
ườ ườ ế ề vi t (write) ng i dùng đó và ng i dùng có quy n trên các group đó.
ườ ầ ủ ừ ạ i dùng theo t ng lo i thành ph n c a nhãn ả 2. Qu n lý ng
Đ gán quy n theo cách này ta c n ch đ nh ra c th các
ụ ể ể ề ầ ỉ ị level, compartment,
ể ấ ộ group mà 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 mà ng
ấ ườ ọ ế ề i dùng có quy n đ c và vi t. Vì quy
ả ượ ọ ế ắ t c qu n lý đòi h i “ ỏ no read up – no write up” (không đ c đ c và vi t lên
ữ ệ ộ ả ữ ủ ậ ậ ơ ộ max level nh ng d li u có đ b o m t cao h n đ tin c y c a user) nên
ớ ạ ệ ấ ọ ế ườ chính là “gi i h n trên” cho vi c truy xu t (đ c và vi ủ t) c a ng i dùng.
min_level: level th p nh t mà 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 có đ 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 là “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.
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
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 là ẽ 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 ỏ 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 là ẽ 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 là 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 là 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 mà 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 là 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 là 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 là 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 mà 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 là 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 có
ề ấ ả ự ủ ế ế ọ 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
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
ề ế ậ ướ ừ ế ọ ự ố ớ 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 và 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 có 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 nó ch không có quy n vi ế t
trên các group WR_SALES, WR_HUMAN_RESOURCES, WESTERN_REGION.
ườ i dùng thông qua các nhãn ả 3. Qu n lý ng
Đ 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 mô 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 và
ườ ắ ả read_groups). Đây là nhãn mà ng ả i qu n tr ộ ph i gán cho ng ườ i ị b t bu c
ấ ủ ề ế ả ọ ườ dùng n u ch n cách qu n lý 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 ế write_comps và t (
ế ườ ả ế ậ ạ ị 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.
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
ấ ố ớ ể ệ ứ ấ ấ ụ ọ 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ó là 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 b iở t đ ng
ừ ườ ả 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 và 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, nó s l y giá tr b ng giá tr c a ị ủ def_write_label.
L u ýư
ượ ự ộ c tính t đ ng t ừ def_read_label, ng iườ : do def_write_label là nhãn đ
ệ ầ ả ả ị ướ 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 là 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
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
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 có 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 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.
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 có th vi ờ c d li u khi đ ng th i t đ
ệ ỏ ề th a 2 đi u ki n sau:
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
Đ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 có
ế ố ớ ấ ả ề 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 có quy n vi
ứ ế ề ả ế ấ t trên ít nh t
ề ặ ộ ế ủ m t group trong data label ho c 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).
6. Các quy n đ c bi
ề ặ ệ t trong OLS
Vì 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 có 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 có 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
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
ữ ệ ữ ệ ế ứ ứ 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
ụ ế ự Quy trình xác th c tác v vi t
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
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 là m t quy n r t
ạ ườ ể ề ầ ở ườ “m nh”, vì ng i có quy n này có th ng m tr thành ng ề i có 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.
ự
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 lý 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
CONN hr_sec/hrsec;
BEGIN
SA_USER_ADMIN.SET_LEVELS.
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
sa_user_admin.set_levels
(policy_name => 'ACCESS_LOCATIONS',
user_name => 'LDORAN',
max_level => 'CONF',
min_level => 'PUB',
def_level => 'CONF',
row_level => 'CONF');
END;
/
Gán compartment
ủ cho ng ườ i dùng, ta dùng th ụ t c
CONN hr_sec/hrsec;
BEGIN
sa_user_admin.set_compartments
(policy_name => 'ACCESS_LOCATIONS',
user_name => 'LDORAN',
read_comps => 'SM,HR',
write_comps => 'SM',
def_comps => 'SM',
row_comps => 'SM');
END;
/
SA_USER_ADMIN.SET_COMPARTMENTS.
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
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 => 'UK',
row_groups => '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
CONN hr_sec/hrsec;
BEGIN
sa_user_admin.set_user_labels
(policy_name
=> 'ACCESS_LOCATIONS',
user_name => 'KPARTNER',
max_read_label
=> 'SENS:SM,HR:UK,CA',
max_write_label => 'SENS:SM:UK',
min_write_label => 'CONF',
def_label
=> 'SENS:SM,HR:UK',
row_label
=> 'SENS:SM:UK');
END;
/
ấ ậ ủ và c p b c c a Karen.
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
CONN hr_sec/hrsec;
BEGIN
sa_user_admin.set_user_privs
(policy_name => 'ACCESS_LOCATIONS',
user_name => 'SKING',
PRIVILEGES => 'FULL');
END;
/
Neena Kochhar là giám đ c đi u hành nên ta có th c p quy n READ đ
ể ấ ề ề ố ể
CONN hr_sec/hrsec;
BEGIN
sa_user_admin.set_user_privs
(policy_name => 'ACCESS_LOCATIONS',
user_name => 'NKOCHHAR',
PRIVILEGES => 'READ');
END;
/
ườ ộ ữ ệ ể ng i này có th xem toàn b d li u.
L u ý:ư
ừ ử ụ ố ở tham s user_name trong các procedure v a s d ng ph n ầ B – Th cự
ấ ế ả ộ ể ậ ự ủ ệ ố t ph i là m t user th t s c a h th ng. Nó cũng có th là hành không nh t thi
ụ ủ ứ 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 đó.
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
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.
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 có
ữ ệ ế ể ố ổ ượ ậ 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 có 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 đó.
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
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 có 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 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.
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
ự
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
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');
END;
/
SA_POLICY_ADMIN.APPLY_TABLE_POLICY
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 có 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
ổ ủ ả ự ể ả ậ
CONN HR/HR;
DESCRIBE locations;
Name
Null?
Type
--------------- ---------- ------
LOCATION_ID
NOT NULL
NUMBER(4)
STREET_ADDRESS
VARCHAR2(40)
POSTAL_CODE
VARCHAR2(12)
CITY
NOT NULL
VARCHAR2(30)
STATE_PROVINCE
VARCHAR2(25)
COUNTRY_ID
CHAR(2)
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
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
CONN hr/hr;
GRANT select, insert, update ON locations TO sec_admin;
sec_admin:
Khi đã có đ quy n ta gán nhãn cho các dòng d li u. Đ u tiên ta gán nhãn
ữ ệ ủ ề ầ
CONN sec_admin/secadmin;
UPDATE hr.locations SET ols_column = char_to_label
('ACCESS_LOCATIONS', 'CONF');
ả ọ ữ ệ CONF cho m i d li u trong b ng:
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,
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
('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';
Canada:
Gi
ả ử ộ ố ị ặ ệ ầ ậ ả ỉ s có m t s đ a ch là thông tin đ c bi t c n b o m t, nên ta gán cho
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');
ộ ả ữ ậ ơ nh ng dòng này nhãn có đ b o m t cao h n:
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
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 ;
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ó.
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
CONN 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
=>
'READ_CONTROL,WRITE_CONTROL,CHECK_CONTROL');
END;
ể ượ ọ ớ ạ ả ệ ả ớ ể 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.
Chương Trình Đào Tạo Từ Xa
KH & KT Máy Tính – Đại học Bách Khoa TP.HCM
/
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.