Tải bản đầy đủ (.docx) (50 trang)

Oracle Virtual Private Database Document

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.82 MB, 50 trang )

TRƯỜNG ĐẠI HỌC NÔNG LÂM TP HỒ CHÍ MINH

KHOA CÔNG NGHỆ THÔNG TIN

Đề tài
Sử dụng Oracle Virtual Private Database
để kiểm soát quyền truy cập dữ liệu
Môn: Chuyên Đề Oracle
Giảng viên:ThS. Nguyễn Thị Minh Hương
Nhóm thực hiện: Nhóm 02

Hoàng Minh Nam_15130104
Huỳnh Công Phát_15130134
Nguyễn Thị Thúy An_15130005
Nguyễn Thị Mộng Thùy_15130189
Nguyễn Linh Yến_15130239
Nguyễn Thị Thủy_15130192
Trần Minh Linh_15130091
Trần Mạnh Tường_15130224

Thành phố Hồ Chí Minh, ngày…., tháng…., năm…


Mục Lục

Chương 1: Giới thiệu về Oracle Database Security
1.1 Tại sao lại cần Oracle Database Security?
Cơ sở dữ liệu Oracle giữ phần lớn dữ liệu quan hệ của thế giới và dữ liệu
đó đem lại giá trị cao cho các kẻ tấn công trộm cắp dữ liệu.
Với Oracle bạn có thể triển khai những giải pháp an toàn bảo mật dữ liệu
đáng tin cậy mà không cần phải thay đổi các ứng dụng hiện có, tiết kiệm thời


gian và chi phí.
1.2 Các sản phẩm của Oracle Database Security
1.2.1 Oracle Advanced Security
Tuân thủ các quy định về quyền riêng tư và các quy định yêu cầu của các
công ty mã hóa và chỉnh sửa dữ liệu ứng dụng như thẻ tín dụng, số an sinh xã
hội hoặc thông tin nhân diện cá nhân (PII). Bằng cách mã hóa và che dấu dữ
liệu bất cứ khi nào nó rời khỏi cơ sở dữ liệu, Oracle Advanced Security cung
cấp giải pháp tiết kiệm chi phí nhất để bảo vệ dữ liệu một cách toàn diện.

2


1.2.2 Oracle Audit Vault and Database Firewall
Theo dõi lưu lượng cơ sở dữ liệu của Oracle và không phải của Oracle để
phát hiện và chặn các mối đe dọa bằng cách hợp nhất dữ liệu kiểm toán từ cơ
sở dữ liệu, hệ điều hành, thư mục và các nguồn khác….

3


1.2.3 Oracle Data Masking and Subsetting
Tuân thủ các quyền riêng tư và bảo vệ dữ liệu, hạn chế sử dụng dữ liệu
thực tế từ khách hàng. Với Oracle Data Masking and Subsetting, các thông tin
nhạy cảm như thẻ tín dụng, số an sinh xã hội có thể được thay thế bằng giá trị
thực tế, cho phép dữ liệu sản xuất được sử dụng để phát triển một cách an
toàn, thử nghiệm hoặc chia sẻ với các đối tác bên ngoài.

4



5


1.2.4 Oracle Database Security Assessment Tool
Đánh giá môi trường cơ sở dữ liệu Oracle cho việc cấu hình và quản lí việc
tăng cường bảo mật của bạn. The Database Security Assessment Tool giúp xác
định các khu vực nơi mà cơ sở dữ liệu cấu hình, hoạt động hoặc triển khai có
rủi ro, từ đó đề xuất thay đổi và kiểm soát rủi ro.

1.2.5 Oracle Database Vault
Tuân thủ các quyền riêng tư và bảo vệ dữ liệu, hạn chế quyền truy cập vào
các dữ liệu nhạy cảm, riêng tư. Oracle Database Vault cho phép hạn chế quyền
truy cập vào các dữ liệu nhạy cảm, riêng tư, kể cả đó là Quản trị viên…

6


1.2.6 Oracle Key Vault
Oracle Key Vault cho phép bạn di chuyển các khóa mã hõa dữ liệu minh
bạch trên máy chủ cơ sở dữ liệu, tuân thủ các tiêu chuẩn bảo mật, đề xuất các
khóa mã hóa không được lưu trữ trên cùng máy chủ với hệ thống được mã hóa.
Qracle Key Vault quản lý và phân phối Oracle Wallets, Java KeyStores, SSH
keys, tệp thông tin xác thực và nhiều hơn nữa….

1.2.7 Oracle Label Security
Thực thi yêu cầu truy cập dữ liệu và ghi lại các cấp phân loại dữ liệu ở cấp
cơ sở dữ liệu hàng. Oracle Label Security cung cấp một framework linh hoạt
cho phép các tổ chức chia sẻ các ứng dụng mà không cần truy cập dữ liệu
xuyên tổ chức.


7


Chương 2: Giới thiệu về Oracle Virtual Private Database
2.1 Định nghĩa về Oracle Virtual Private Database(Oracle VPD)
Oracle virtual private database viết tắt là Oracle VPD là công cụ kết hợp
việc sử dụng công cụ điều khiển truy cập (FGAC- Fine – Grain Access
control) và Application context (ngữ cảnh áp dụng) từ đó cho phép người dùng
quản trị định nghĩa và áp dụng chính sách về quản lý quyền truy cập tới mức
dòng hoặc cột theo từng phiên làm việc.
Oracle VPD cho phép định nghĩa các chính sách an toàn đến từng mức đối
tượng (Table, view, synonym) tương ứng với các thao tác (SELECT, INSERT,
UPDATE, DELETE). Khi người dùng trực tiếp hoặc gián tiếp truy cập vào đối
tượng đã được thiết lập chính sách an toàn, hệ quản trị cơ sở dữ liệu sẽ tự động
thay đổi câu lệnh SQL của người dùng bằng cách thêm vào câu lệnh SQL của
người dùng mệnh đề Where hay còn gọi là vị ngữ (predicate) được trả về bởi
hàm thực thi chính sách an toàn cho đối tượng đó. Việc thay đổi câu lệnh SQL
này diễn ra trong suốt với người sử dụng cuối (người thực hiện câu lệnh SQL).
Hàm thực thi chính sách an toàn có thể gọi một hàm khác hoặc gọi đến
đoạn mã C hoặc Java nhúng để sinh ra mệnh đề vị ngữ từ file của hệ điều hành
hoặc một nơi tập trung lưu trữ các chính sách an toàn . Hàm thực thi cũng có
thể trả ra các vị ngữ khác nhau tùy thuộc vào từng người dùng, nhóm người
dùng hoặc ứng dụng bằng cách sử dụng ngữ cảnh (Application Context).
Ví dụ :
8


-

Giả sử người dùng thực hiện câu truy vấn :


SELECT * FROM OE.ORDERS;
-

Oracle VPD nối thêm câu lệnh với mệnh đề Where.

SELECT * FROM OE.ORDERS
WHERE SALES_REP_ID = 159;
- Ở ví dụ này người dùng có thể xem đơn hàng của Đại diện bán hàng

159.

-

Nếu bạn muốn lọc người dùng dựa trên thông tin phiên của người dùng đó,
chẳng hạn như ID của người dùng, bạn có thể tạo mệnh đề WHERE để sử
dụng ngữ cảnh ứng dụng.

SELECT * FROM OE.ORDERS
WHERE SALES_REP_ID = SYS_CONTEXT('USERENV','SESSION_USER');
Lưu ý : Oracle VPD không hỗ trợ lọc cho các DDL, chẳng hạn như các câu lệnh
TRUNCATE hoặc ALTER TABLE.

2.2 Các thành phần chính của Oracle VPD
Xét về mặt vật lý, khi áp dụng Oracle VPD người dùng cần có các thành
phần chính sau :
- Application Context (Ngữ cảnh ứng dụng ): là nơi lưu trữ thông
tin của ngữ cảnh trong ứng dụng.
- PL/SQL Functions (Các hàm PL/SQL) : là các hàm thực thi chính
sách an toàn.

- Security Policy ( Các chính sách an toàn) : là các chính sách an
toàn để áp dụng cho các đối tượng
2.3 Lợi ích của việc sử dụng Oracle VPD
Chính sách của Oracle VPD cung cấp các lợi ích sau :
- Căn cứ chính sách bảo mật trên đối tượng cơ sở dữ liệu thay vì ứng
dụng.
- Cách kiểm soát cơ sở dữ liệu Oracle đánh giá các chức năng chính sách.

2.3.1 Căn cứ chính sách bảo mật trên đối tượng cơ sở dữ liệu
hay vì ứng dụng.
9


Gắn các chính sách bảo mật cơ sở dữ liệu riêng ảo của Oracle vào các bảng
cơ sở dữ liệu, khung nhìn hoặc từ đồng nghĩa, thay vì thực hiện các điều khiển
truy cập trong tất cả các ứng dụng của bạn, cung cấp các lợi ích sau:
- Security (Bảo vệ) : Liên kết chính sách với bảng cơ sở dữ liệu, chế độ
xem hoặc từ đồng nghĩa có thể giải quyết vấn đề bảo mật ứng dụng
nghiêm trọng tiềm ẩn. Giả sử một người dùng được phép sử dụng một ứng
dụng, và sau đó vẽ trên các đặc quyền liên kết với ứng dụng đó, sửa đổi
sai cơ sở dữ liệu bằng cách sử dụng một công cụ truy vấn đặc biệt, chẳng
hạn như SQL * Plus. Bằng cách đính kèm chính sách bảo mật trực tiếp
vào bảng, lượt xem hoặc từ đồng nghĩa, kiểm soát truy cập chi tiết đảm
bảo rằng cùng một bảo mật có hiệu lực, bất kể người dùng truy cập dữ liệu
như thế nào.
- Simplicity (Đơn giản) : Bạn thêm chính sách bảo mật vào bảng, dạng
xem hoặc từ đồng nghĩa chỉ một lần, thay vì lặp lại nhiều lần cho mỗi ứng
dụng dựa trên bảng, dựa trên chế độ xem hoặc dựa trên từ đồng nghĩa của
bạn.
- Flexibility (mềm dẻo) : Bạn có thể có một chính sách bảo mật cho các

câu lệnh SELECT, một chính sách khác cho các câu lệnh INSERT và các
câu lệnh khác cho các câu lệnh UPDATE và DELETE. Ví dụ, bạn có thể
kích hoạt các nhân viên nhân sự để có các đặc quyền SELECT cho tất cả
các bản ghi nhân viên trong bộ phận của họ, nhưng chỉ cập nhật lương cho
những nhân viên trong bộ phận của họ có họ bắt đầu từ A đến F. Hơn nữa,
bạn có thể tạo nhiều chính sách cho mỗi bảng, dạng xem hoặc từ đồng
nghĩa.
Ví dụ : Bạn có thể kích hoạt các nhân viên nhân sự để có các đặc
quyền SELECT cho tất cả các bản ghi nhân viên trong bộ phận của họ, nhưng
chỉ cập nhật lương cho những nhân viên trong bộ phận của họ có họ bắt đầu từ A
đến F. Hơn nữa, bạn có thể tạo nhiều chính sách cho mỗi bảng, dạng xem hoặc từ
đồng nghĩa.

2.3.2 Kiểm soát các chức năng Oracle Database Evaluates
Policy như thế nào
Chạy các hàm chính sách nhiều lần có thể ảnh hưởng đến hiệu suất.
Bạn có thể kiểm soát hiệu suất của các hàm chính sách bằng cách cấu hình
cách Oracle Database lưu trữ các vị từ cơ sở dữ liệu riêng ảo của Oracle.
Các lựa chọn khả thi:
10


- Đánh giá chính sách một lần cho mỗi truy vấn (chính sách tĩnh).
- Đánh giá chính sách chỉ khi một bối cảnh ứng dụng bên trong

chức năng chính sách thay đổi (các chính sách theo ngữ cảnh
nhạy cảm).
- Đánh giá chính sách mỗi khi nó được chạy (các chính sách
động).


11


2.4 Hạn chế của việc sử dụng Oracle VPD
Yêu cầu định danh người dùng tốt : Việc thực hiện VPD yêu cầu mỗi
người dùng phải kết nối đến cơ sở dữ liệu có định dang duy nhất.
Khó thống kê : Do việc phải xác định rõ ràng định danh của từng
người dùng cụ thể nên việc thống kê lại các truy vấn của người dùng sẽ
phức tạp.
2.5 Những Privileges (đặc quyền) dùng để chạy Oracle VPD
Để bảo mật hơn, chức năng Oracle Virtual Private Database policy chạy
như thể nó đã được khai báo với quyền của người bảo vệ. Không tuyên bố
nó là quyền của người invoker vì điều này có thể gây nhầm lẫn cho bản
thân bạn và những người dùng khác duy trì mã.

2.6

Sử dụng Oracle VPD với Application Context (ngữ cảnh ứng
dụng)

Ngữ cảnh ứng dụng (Application Context) có thể được được sử dụng
theo một trong các cách sau:
- Dùng như một bộ đệm dữ liệu an toàn : Trong cách dùng này ta lưu

các dữ liệu có thể dùng lại của một ứng dụng ( các dữ liệu này có thể
được truy vấn từ nhiều bảng) vào một ngữ cảnh ứng dụng để các hàm
thực thi chính sách an toàn có thể sử dụng lại các thông tin này trong
suốt quá trình làm việc mà không phải thực hiện lại việc truy vấn từ
12



các bảng để lấy ra thông tin đó. Điều này sẽ đặc biệt hữu ích khi các
hàm thực thi các chính sách an toàn dựa trên nhiều thuộc tính.
Ví dụ: giả sử bạn muốn truy cập cơ sở vào bảng ORDERS_TAB trên
số ID khách hàng. Thay vì truy vấn số ID khách hàng cho người dùng
đã đăng nhập mỗi khi bạn cần, bạn có thể lưu số trong ngữ cảnh ứng
dụng. Sau đó, số khách hàng có sẵn trong phiên khi bạn cần.
- Dùng để áp dụng các chính sách an toàn cho từng loại đối tượng

tham gia: Trong cách này ta có thể sử dụng ngữ cảnh ứng dụng phân
biệt các loại đối tượng.
Ví dụ : Trong một ứng dụng đặt hàng, khách hàng chỉ có thể nhìn
thấy đơn hàng của họ, còn nhân viên bán hàng có thể nhìn tháy toàn
bộ đơn hàng, ở đây có hai chính sách bảo mật khác nhau cho hai đối
tượng. Ta có thể tạo một ngữ cảnh ứng dụng với thuộc tính position và
thuộc tính này có thể được truy nhập trong hàm thực thi chính sách an
toàn giúp phân biệt được là khách hàng hay là nhân viên từ đó có thể
đưa ra vị ngữ tương ứng.
Ví dụ trong trường hợp này ta có thể viết sao cho hàm thực thi sẽ
thực hiện biến đổi câu truy vấn trong trường hợp đối tượng khách
hàng đăng nhập từ:
SELECT * FROM orders_tab
Trở thành :

SELECT * FROM orders_tab
WHERE custno = SYS_CONTEXT ('order_entry', 'cust_num');
- Cung cấp các biến để sử dụng trong mệnh đề Where: Cũng tương

tự như ví dụ trên nhưng ở đây ta sử dụng ngữ cảnh ứng dụng như một
biến giúp phân biệt từng khách hàng thông qua hàm SYS_CONTEXT

(‘namespace’, ‘attribute’).

13


2.7

PL/SQL Functions:

Các hàm PL/SQL được dử dụng để sinh ra các mệnh đề điều kiện
Where thêm vào các câu truy vấn hay còn gọi là vị ngữ, từ đó giúp cho việc
thực hiện kiểm soát truy cập ở mức dòng dữ liệu.
Các hàm này phải được gọi trong điều kiện đúng để từ đó các chính
sách an toàn (policy) có thể gọi tới hàm này. Kết quả của các hàm này trả ra
là một xâu chứa các điều kiện cần thêm vào câu truy vấn , ví dụ
‘Custno=5’.
2.8

Security Policy

Là các chính sách an toàn được gắn đến từng đối tượng và tương ứng
với phương thức truy cập cụ thể. Chính sách an toàn được quản lý bởi các
phương thức trong package DBMS_RLS bao gồm các hàm :
- ADD_POLICY : thêm mới danh sách an toàn.
- ENABLE_POLICY : enable hoặc disable các chính sách an

toàn.
- REFRESH _POLICY : cập nhật lại các chính sách an toàn.
- DROP_POLICY : bỏ một chính sách an toàn
Khi thêm một chính sách an toàn ta có thể xác định loại của chính sách

này thuộc một trong các trường hợp sau:
- Static : Hàm thực thi chính sách an toàn sẽ được thực hiện đúng
một lần và kết quả sẽ được sử dụng lại cho các câu truy vấn sau,
vị ngữ trả về được lưu trong vùng nhớ Shared Global Area
(SGA)
- Shared_Static : Tương tự như static nhưng cho phép vị ngữ có
thể sử dụng chung khi nhiều đối tượng dùng chung một hàm
thực thi chính sách an toàn.
- Context_ Sensitive: Hàm thực thi sẽ luôn được gọi mỗi khi
phân tích câu lệnh. Hàm này sẽ chỉ gọi lại khi ngữ cảnh thay
14


đổi. Điều này sẽ thích hợp cho việc sử dụng bộ đệm kết nối
(connect pooling) tới database mà sử dụng chung một shema và
sử dụng ngữ cảnh ứng dụng để thay đổi định danh của người
dùng ứng dụng.
- Shared_Context_Sensitive: Tương tự như Context_Sensitive
ngoại trừ việc có thể áp dụng chung khi nhiều đối tượng dùng
chung hàm thực thi chính sách an toàn.
- Dymanic (Mặc định) : Là loại mặc định nếu không xác định rõ,
loại này sẽ không lưu lại dữ liệu sau khi hàm thực thi chính sách
an toàn được gọi đến, hàm thực thi sẽ được gọi mỗi lần câu truy
vấn phân tích hoặc thực thi.
Cơ chế hoạt động:
Khi Oracle VPD hoạt động thì mỗi câu truy vấn sẽ trải qua các bước
chính sau:

2.9


Người dùng truy cập vào đối tượng có gắn kèm chính sách an toàn.
Database server gọi tới hàm thực thi chính sách an toàn của đối
tượng đó tương ứng với loại lệnh.
- Hàm trả về một vị ngữ (mệnh đề where).
- Database server thêm một mệnh đề này sau câu truy vấn.
- Database server thực thi câu lệnh đã thay đổi.
-

2.10

Các mô hình người dùng:

Oracle có thể thực hiện việc kiểm soát quyền truy cập cho mỗi người
dùng bất kể đó là người dùng với ứng dụng hay người dùng với cơ sở dữ
liệu. Khi người dùng của dữ liệu đồng thời cũng là người dùng với cơ sở dữ
liệu thì việc áp dụng Oracle VPD tương đối đơn giản, người dùng kết nối tới
cơ sở dữ liệu và ứng dụng thực hiện việc thiết lập ngữ cảnh cho từng phiên
làm việc. Trong trường hợp ứng dụng kết nối tới cơ sở dữ liệu như một
người dùng duy nhất đối với cơ sở dữ liệu ta vẫn có thể áp dụng giải pháp
Oracle VPD cho việc kiểm soát quyền truy cập của người dùng.
Ví dụ trong các web ứng dụng thường có rất nhiều người dùng và kết
nối cơ sở dữ liệu với một người dùng duy nhất, thậm chí các kết nối còn
được đệm lại để tăng hiệu quả cho việc truy suất thông tin mỗi khi kết nối
tới cơ sở dữ liệu. Do đó trong trường hợp này khi muốn áp dụng VPD, ứng
15


dụng sẽ chịu trách nhiệm việc thay đổi thông tin trong ngữ cảnh ứng dụng
( Định danh người dùng hiện tại). Oracle hỗ trợ cho việc phân biệt người
dùng ứng dụng khác nhau(cùng dùng duy nhất một người dùng cơ sở dữ

liệu) thông qua trường thông tin Client_identifier và client_info trong ngữ
cảnh ứng dụng mặc định Userenv.
2.11

Các bước áp dụng:
Để áp dụng Oracle VPD ta cần thực hiện một số bước chính sau:
-Bước 1: Xác định ngữ cảnh ứng dụng và thông tin cần dùng trong

ngữ cảnh ứng dụng.
-Bước 2: Tạo các hàm thực hiện chính sách an toàn cho các đối
tượng, loại thao tác cần kiểm soát.
-Bước 3: Tạo các chính sách an toàn và gắn các chinh sách này vào
các đối tượng cụ thể để thực hiện việc kiểm soát truy cập.

Chương 3: Các thành phần của Oracle Virtual Private
Database Policy
Để thực hiện Oracle Virtual Private Database, bạn phải tạo một hàm để
tạo ra mệnh đề WHERE động và một chính sách để đính kèm hàm này vào
các đối tượng mà bạn muốn bảo vệ.
- Tạo một hàm để tạo ra mệnh đề WHERE động
- Tạo một chính sách để đính kèm chức năng cho các đ ối t ượng b ạn
muốn bảo vệ

3.1

Tạo một hàm để tạo ra mệnh đề WHERE động

Để tạo mệnh đề WHERE động (vị từ), bạn phải tạo một hàm
(không phải là một hàm thủ tục) xác định các hạn chế mà bạn
muốn thực thi. Thông thường, bảo mật quản trị viên tạo hàm

này trong lược đồ của riêng mình. Để phức tạp hơn hành vi,
chẳng hạn như bao gồm các cuộc gọi đến các chức năng khác
hoặc thêm kiểm tra để theo dõi không thành công cố gắng
đăng nhập, tạo các hàm này trong một gói.
16


3.1.1 Nó phải lấy làm đối số một tên lược đồ và một đối tượng
(table, view hoặc synonym) làm đầu vào.
Xác định thông số đầu vào để giữ thông tin này, nhưng
không chỉ định lược đồ và tên đối tượng trong hàm. Các
chính sách mà bạn tạo với gói DBMS_RLS (được mô tả
trong "Tạo chính sách để đính kèm chức năng cho các đối
tượng bạn muốn bảo vệ "trên hình 7-5) cung cấp tên của
lược đồ và đối tượng mà chính sách sẽ áp dụng. Bạn phải
tạo tham số cho lược đồ trước, sau đó là tham số cho đối
tượng.
Ví dụ cho thấy cách tạo loại chính sách DYNAMIC, Tạo
Chính sách DYNAMIC bằng DBMS_RLS.ADD_POLICY

3.1.2 Nó phải cung cấp một giá trị trả về cho mệnh đề WHERE sẽ được tạo
ra.
- Giá trị trả về cho mệnh đề WHERE luôn là kiểu dữ liệu VARCHAR2.

3.1.3 Nó phải tạo ra một mệnh đề WHERE hợp lệ.
-

Trong mệnh đề WHERE là như nhau cho tất cả người dùng đăng nhập.
Nhưng trong hầu hết các trường hợp, có thể bạn muốn thiết kế mệnh đề
WHERE khác nhau cho mỗi người dùng, mỗi nhóm người dùng, hoặc

mỗi ứng dụng truy cập các đối tượng bạn muốn bảo vệ.

17


3.1.4
Nó không được chọn từ một table (bảng) trong hàm chính sách
liên quan.
-

Mặc dù bạn có thể định nghĩa một chính sách đối với một bảng, nhưng
bạn không thể chọn bảng đó từ bên trong chính sách đã được định nghĩa
với bảng.

3.2 Tạo một Policy (Chính sách) Oracle Virtual Private Database
-

-

Tạo policy (chính sách) để đính kèm chức năng cho các đối tượng bạn
muốn bảo vệ.
Để đính kèm chính sách vào table, view hoặc synonym, bạn sử dụng thủ
tục DBMS_RLS.ADD_POLICY.
Bạn cần chỉ định table, view hoặc synonym mà bạn đang thêm vào chính
sách và tên cho chính sách.
Bạn cũng có thể chỉ định các thông tin khác, chẳng hạn như các loại câu
lệnh điều khiển chính sách (SELECT, INSERT, UPDATE, DELETE,
CREATE INDEX hoặc ALTER INDEX). Nếu bạn không chỉ định một loại
câu lệnh, theo mặc định, Cơ sở dữ liệu Oracle chỉ định SELECT, INSERT,
UPDATE và DELETE nhưng không chỉ mục.

Ví dụ: tạo chính sách sau bằng cách sử dụng thủ tục ADD_POLICY trong
package DBMS_RLS

18


19


Chương 4: Cấu hình Oracle Virtual Private Database
Policy
4.1 Giới thiệu về các Oracle Virtual Private Database Policy
Trong nhiều năm dài, việc áp dụng các chính sách bảo mật cho dữ liệu nằm
trong các bảng CSDL được hiện thực bằng việc sử dụng view cùng với các
function. Tuy nhiên cách hiện thực này nhiều khi không thể là một giải pháp
thực tế cho mục đích trên, đặc biệt khi cần thực hiện bảo mật ở mức độ “dòng
dữ liệu” (row-level security). Thấy được nhu cầu ngày càng cao của người
dùng, từ Oracle Database 8.1.5, Oracle đã giới thiệu một công nghệ mới rất hiệu
quả là Virtual Private Database (từ đây gọi tắt là VPD).
VPD là sự kết hợp của 2 kỹ thuật:
+ Fine-grained access control (FGAC): cho phép người quản trị dùng các
function để hiện thực các chính sách bảo mật và liên kết các chính sách bảo mật
đó với các table, view hoặc synonym.
=> Giúp người dùng với quyền hạn khác nhau sẽ thấy được những “khung
nhìn” khác nhau đối với đối tượng được bảo vệ, chính sách bảo mật đó sẽ được áp
dụng cho bất kỳ user nào truy xuất đến table mà không cần người quản trị phải
gán chính sách cho từng user. Điều này khiến các chính sách bảo mật được hiện
thực bằng FGAC dễ quản lý hơn khi hiện thực bằng view.
+ Application Context: cung cấp một nơi lưu trữ bảo mật cho những giá trị ngữ
cảnh ứng dụng.

=> Nâng cao hiệu quả thực hiện của FGAC.
4.2 Bảo mật cấp độ hàng dữ liệu (Row-level Security)
Row-level security (RLS) để thay cho Fine-grained access control hoặc Virtual Private
Database.

4.2.1 Row-level Security là gì?
Row-level security (RLS) cho phép giới hạn việc truy xuất các hàng (record)
dựa trên một chính sách bảo mật (security policy) được hiện thực bằng PL/SQL.
Một chính sách bảo mật mô tả các quy định quản lý việc truy xuất các dòng dữ
liệu.
20


4.2.2 Cơ chế thực hiện
Để thực hiện RLS, đầu tiên ta tạo 1 hàm PL/SQL (PL/SQL function) trả về
một chuỗi (string). Chuỗi string này chứa các điều kiện của chính sách bảo mật
mà ta muốn hiện thực.
Hàm PL/SQL vừa được tạo ở trên sau đó được đăng ký cho các table, view
mà ta muốn bảo vệ bằng cách dùng package PL/SQL DBMS_RLS.
Khi có một câu truy vấn của bất kỳ user nào trên đối tượng được bảo vệ,
Oracle sẽ nối chuỗi được trả về từ hàm nêu trên vào mệnh đề WHERE của câu
lệnh SQL ban đầu (nếu trong câu lệnh SQL ban đầu không có mệnh đề
WHERE thì Oracle sẽ tự động tạo thêm mệnh đề WHERE để đưa chuỗi điều
kiện vào), nhờ đó sẽ lọc được các hàng dữ liệu theo các điều kiện của chính
sách bảo mật.
4.2.3

Các lưu ý khi làm việc với RLS

21



Các hàm PL/SQL được đăng ký cho các table, view hay synonym bằng
cách gọi thủ tục DBMS_RLS.ADD_POLICY.
Thủ tục ADD_POLICY đòi hỏi ít nhất phải có 3 tham số nhập vào:
object_name, policy_name, policy_function. (Mô tả chi tiết của package
DBMS_RLS được chứa ttrong file:
thư_mục_cài_đặt_Oracle\Oracle\RDBMS\ADMIN\dbmsrlsa.sql).
Sự kết hợp của object_schema, object_name, và policy_name phải là duy
nhất.
Mặc định, policy sẽ được áp dụng cho tất cả các lệnh DML. Người quản trị
có thể dùng tham số STATEMENT_TYPES để chỉ ra policy áp dụng cho loại
câu lệnh nào.
Bất cứ khi nào 1 user truy xuất một cách trực tiếp hay gián tiếp vào đối
tượng được bảo vệ, RLS engine sẽ được gọi một cách trong suốt, hàm PL/SQL
đã đăng ký sẽ được thực thi, và rồi lệnh SQL của user sẽ được chỉnh sửa và
thực thi.
Tuy nhiên, account SYS không bị ảnh hưởng bởi bất kỳ chính sách bảo mật
nào.
Nhiều policy cũng có thể áp dụng cho cùng 1 đối tượng. Khi đó CSDL sẽ
kết hợp tất cả các policy đó lại với nhau theo phép AND.
Quyền sử dụng package DBMS_RLS không được gán cho mọi người
dùng. Những người quản trị cần được gán quyền EXECUTE ON DBMS_RLS
để có thể sử dụng được nó.
Tất cả các policy function mà ta tạo ra đều phải có đúng 2 tham số truyền
vào. Tham số đầu tiên là tên của schema sở hữu đối tượng mà chính sách RLS
đó bảo vệ. Tham số thứ hai là tên của đối tượng được bảo vệ. Hai tham số này
rất hữu ích vì 1 policy function có thể được áp dụng cho nhiều đối tượng khác
nhau trong nhiều schema khác nhau. Tên của các tham số có thể được đặt
thoải mái nhưng thứ tự của 2 tham số phải tuân thủ theo thứ tự trên. Các tham

số sẽ được dùng để xác định đối tượng nào mà chính sách đó được gọi cho nó.
Kiểu của 2 tham số truyền vào và của giá trị trả về phải là kiểu VARCHAR2.
Policy function cần được tạo ra trong schema của người quản trị bảo mật.
Điều này quan trọng vì việc truy xuất vào các policy function cần được bảo vệ.
Các user khác không nên có quyền thực thi hay quyền alter hoặc quyền drop
trên các policy function này.
22


Để hiện thực được các chính sách bảo mật phức tạp một cách hiệu quả,
thông thường người ta sử dụng kết hợp RLS với Application Context. Nhờ đó
các chính sách bảo mật sẽ được áp dụng theo các điều kiện linh hoạt hơn (ví
dụ: áp dụng chính sách bảo mật nào là dựa trên người dùng thuộc Department
số mấy). Trong chương trình thực hành của chúng ta không học về Application
Context, sinh viên tự tìm hiểu thêm về vấn đề này.
4.3 Đính kèm một policy vào Database Table, View, hoặc Synonym
Để đính kèm policy cho table, view, hoặc synonym thì chúng ta sử dụng
thủ tục DBMS_RLS.ADD_POLICY, đồng thời chỉ định các table, view, hoặc
synonym mà chúng ta đang thêm cho policy.
Ngoài ra có thể chỉ định thêm các thông tin khác chẳng hạn như các câu
lệnh điều khiển Policy (SELECT, INSERT, UPDATE, DELETE, CREATE
INDEX, hoặc ALTER INDEX).
Sử dụng DBMS_RLS.ADD_POLICY để đính kèm Policy cho table, view,
hoặc synonym có tên là secure_update vào bảng HR.EMPLOYEES.
Hàm được đính kèm với Policy là check_updates.

BEGIN
DBMS_RLS.ADD_POLICY(
object_schema => 'hr',
object_name


=> 'employees',

policy_name

=> 'secure_update',

policy_function => 'check_updates',
...
Nếu hàm được tạo bên trong một gói, tên của gói:
policy_function => 'pkg.check_updates',
...

23


4.4 Thực thi các chính sách (Policy) trên các câu lệnh SQL cụ thể
Bạn có thể thực thi các Oracle Virtual Private Database cho các câu lệnh
SELECT, INSERT, UPDATE, INDEX và DELETE.
Nếu bạn không chỉ định một loại câu lệnh, theo mặc định, Oracle Database
sẽ chỉ định SELECT, INSERT, UPDATE và DELETE, chứ không phải
INDEX.
Nhập bất kỳ kết hợp nào của các loại câu lệnh này bằng cách sử dụng tham
số statement_types trong thủ tục DBMS_RLS.ADD_POLICY.
Đính kèm danh sách trong một cặp dấu nháy đơn(‘ ‘)

4.5 Kiểm soát việc hiển thị dữ liệu cột với các Policy
4.5.1 Thêm policy cho Oracle Virtual Private Database ở cấp độ
cột
Column-level Policies thực thi bảo mật row-level khi truy vấn tham chiếu

đến cột có liên quan đến bảo mật. Ta có thể áp dụng column-level Oracle
24


Virtual Private Database policy cho các table và views, nhưng không áp dụng
cho synonyms.
Để áp dụng policy cho một column, hãy chỉ định cột có liên quan đến bảo
mật bằng cách sử dụng tham số sec_relevant_cols của thủ tục
DBMS_RLS.ADD_POLICY. Tham số này áp dụng policy bảo mật bất cứ khi
nào cột được tham chiếu, rõ ràng hoặc ngầm định, trong câu truy vấn.
Ví dụ: Users không thuộc phòng nhân sự thường chỉ được phép xem số An
sinh Xã hội của họ. Nhân viên bán hàng khởi tạo truy vấn sau:

Hàm thực thi chính sách bảo mật trả về biến ssn = 'my_ssn'. Cơ sở dữ liệu
Oracle ghi lại truy vấn và thực thi những điều sau:

Hiển thị chính sách Oracle Virtual Private Database trong đó người dùng
bộ phận bán hàng không thể thấy mức lương của những người bên ngoài bộ
phận (bộ phận số 30) của người dùng bộ phận bán hàng.
Các cột có liên quan cho chính sách này là sal và comm.
Đầu tiên, hàm Oracle Virtual Private Database policy được tạo ra, và sau
đó nó được thêm vào bằng cách sử dụng gói PLMS SQL DBMS_RLS.

25


×