HỌC VIỆN KỸ THUẬT MẬT MÃ
----------
AN TOÀN CƠ SỞ DỮ LIỆU
ĐỀ TÀI: TÌM HIỂU VỀ CƠ SỞ DỮ LIỆU RIÊNG
ẢO TRONG ORACLE
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
······················································································
MỤC LỤC
LỜI MỞ ĐẦU...............................................................................................................................................1
CHƯƠNG 1: TỔNG QUAN VỀ ORACLE’S VIRTUAL PRIVATE DATABASE (ORACLE VPD)..2
1.1.
Giới thiệu về Oracle.......................................................................................................................2
1.2.
Giới thiệu về Oracle Virtual Private Database (Oracle VPD)........................................................2
1.3.
Lợi ích của việc sử dụng Oracle VPD..........................................................................................3
1.3.1.
Bảo mật....................................................................................................................................3
1.3.2.
Đơn giản..................................................................................................................................4
1.3.3.
Linh động................................................................................................................................4
1.4.
Cơ chế hoạt động của Oracle VPD...............................................................................................4
1.4.1.
Oracle VPD sử dụng với ngữ cảnh ứng dụng.....................................................................4
1.4.2.
Phát sinh mệnh để WHERE tự động...................................................................................5
1.4.3.
Chính sách áp dụng phải gắn với một đối tượng bảo mật cụ thể.....................................6
1.5.
VPD trên cách phiên bản Oracle..................................................................................................6
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT CHÍNH SÁCH ORACLE VPD......................................................8
2.1.
Gắn chính sách Oracle VPD tới một đối tượng..........................................................................8
2.2.
Thực thi chính sách với loại câu lệnh SQL.................................................................................9
2.3.
Điều khiển việc hiển thị dữ liệu dựa vào các chính sách.........................................................10
2.3.1.Thiết lập những chính sách Oracle VPD ở mức cột...............................................................10
2.3.2.Điều khiển hiển thị dữ liệu trong Oracle VPD........................................................................12
2.3.3.Dùng mặt nạ hiển thị đối với những dữ liệu áp dụng chính sách Oracle VPD...................12
2.4.
Tạo nhóm chính sách..................................................................................................................13
2.4.1.Định nghĩa nhóm chính sách.....................................................................................................13
2.4.2.Tạo một nhóm chính sách mới..................................................................................................14
2.4.3.Chỉ định nhóm chính sách mặc định sys_default....................................................................15
2.4.4.Thiết lập chính sách trên đối tượng..........................................................................................15
2.4.5.Chứng thực chính sách trên đối tượng.....................................................................................16
2.5.
Đánh giá việc thực thi chính sách theo từng loại chính sách VPD........................................16
2.5.1. Sử dụng loại chính sách Dynamic............................................................................................16
2.5.2. Sử dụng loại chính sách Static..................................................................................................17
2.5.3. Sử dụng loại chính sách Shared_Static...................................................................................17
2.5.4. Sử dụng loại chính sách Context_Sensitive.............................................................................18
2.5.5. Sử dụng loại chính sách Shared_Context_Sensitive..............................................................19
2.5.6. Bảng tóm tắt năm loại chính sách Oracle VPD......................................................................19
CHƯƠNG 3: THỰC HÀNH.......................................................................................................................20
3.1.
Tạo ngữ cảnh ứng dụng..............................................................................................................20
3.1.1. Chuẩn bị bảng và tạo các user..................................................................................................21
3.1.2.
3.2.
Tạo ngữ cảnh ứng dụng.......................................................................................................24
Bảo mật mức hàng.......................................................................................................................26
3.2.1.
RLS với cấu lệnh SELECT.................................................................................................26
3.2.2.
RLS với câu lệnh INSERT, UPDATE, DELETE.............................................................29
3.3.
Bảo mật mức cột...........................................................................................................................33
3.4.
Xóa bỏ chính sách và hàm...........................................................................................................34
TÀI LIỆU THAM KHẢO...........................................................................................................................35
LỜI MỞ ĐẦU
Hiện nay vấn đề bảo mật cơ sở dữ liệu của doanh nghiệp, các công ty hay
bảo mật thông tin cho khách hàng là nhu cầu tất yếu và rất được quan tâm. Mục
đích hướng tới của các cuộc tấn công trên mạng Internet hiện nay chủ yếu là vào
hệ thống cơ sở dữ liệu. Vì vậy việc quản trị và bảo đảm an toàn dữ liệu của các
phần mềm ứng dụng cũng như các trang web là rất cần thiết. Để hạn chế việc xâm
nhập dữ liệu một cách trái phép thì cần có các biện pháp áp dụng cho việc bảo vệ
cơ sở dữ liệu.
Có rất nhiều cách để hạn chế việc truy xuất dữ liệu như việc vơ hiệu hóa tài
khoản đăng nhập sau vài lần đăng nhập liên tiếp khơng thành cơng hoặc có thể sử
dụng một số ứng dụng sẽ cảnh báo khi có dịch vụ bên ngồi đang cố gắng xâm
phạm vào hệ thống… Ngoài ra các hệ quản trị cơ sở dữ liệu cũng cung cấp nhiều
công cụ hỗ trợ hạn chế quyền, cấp quyền và phân quyền thích hợp cho từng người
dùng truy xuất dữ liệu. Cụ thể trong Oracle người quản trị dễ dàng quản lý mức
truy cập dữ liệu cho từng người dùng thông qua Role. Role được tổ chức trong một
hệ thống phân cấp, người sử dụng khác nhau được gán các Role khác nhau tùy theo
vai trò và quyền hạn của họ trong hệ thống…Việc quản lý truy xuất dữ liệu theo
cách này sẽ trở lên ngày càng phức tạp hơn nếu số người sử dụng lớn và việc kiểm
soát đồng thời truy cập của người dùng vào hệ thống cũng rất khó khăn.
Ý tưởng cơ bản để giải quyết vấn đề cho số lượng người dùng lớn là:“
Người dùng không thể truy cập vào phần dữ liệu mà họ khơng được phép nhìn
thấy”. Điều này sẽ giới hạn lại thông tin được hiển thị với những người dùng khác
nhau trong cùng một hệt thống cơ sở dữ liệu. Việc bảo mật sẽ không dừng lại ở
mức cho phép truy xuất trên các đối tượng, mà với Oracle’s Virtual Private
Database – Oracle VPD dữ liệu sẽ được an tồn trên mức dịng và cột của các đối
tượng.
Với những lý do trên, nhóm em đã thực hiện đề tài “Tìm hiểu về cơ sở dữ
liệu riêng ảo trong Oracle – Oracle VPD”.
1
CHƯƠNG 1: TỔNG QUAN VỀ ORACLE’S VIRTUAL PRIVATE
DATABASE (ORACLE VPD)
1.1.
Giới thiệu về Oracle
Oracle Database
hay
còn gọi
là OracleRDBMS hoặc đơn giản
là Oracle (do đây có lẽ là sản phẩm nổi tiếng nhất của hãng), là một hệ quản trị
cơ sở dữ liệu quan hệ, được phát triển và phân phối bởi tập đoàn Oracle.
Phần mềm này vẫn đang được phát triển tiếp lên những version cao hơn, và
vẫn đang là 1 trong những phần mềm quản trị database hàng đầu thế giới. Theo
thơng tin từ Wikipedia thì phần mềm này được viết bằng Assembly, C và C++. Có
lẽ đó là cốt lõi chính của Oracle Database. Sau này những cơng cụ liên quan như
emctl, dbca, netca… thì được viết bằng Java.
Phần mềm này hỗ trợ nhiều ngôn ngữ, được phân phối rộng khắp thế giới.
Bản quyền phần mềm này thuộc dạng Proprietary, tức là closed source software.
Phần mềm này chỉ mua để sử dụng, không được can thiệp vào mã nguồn như open
source software.
1.2.
Giới thiệu về Oracle Virtual Private Database (Oracle VPD)
Oracle VPD (Cơ sở dữ liệu riêng ảo trong Oracle) cung cấp các tính năng
bảo mật trên cơ sở dữ liệu. Oracle VPD rất hữu ích đối với những cơ sở dữ liệu và
ứng dụng bảo mật phân quyền trên từng đối tượng. Có thể thiết lập Oracle VPD
với các chính sách đơn giản hay phức tạp phụ thuộc vào từng nhu cầu cụ thể của
các ứng dụng.
Oracle VPD được sử dụng trong môi trường nhiều người dùng truy cập vào
cùng một cơ sở dữ liệu mà phạm vi cho phép truy cập của mỗi nhóm người là khác
nhau.
Oracle VPD cịn được biết là chính sách bảo mật để kiểm sốt truy xuất dữ
liệu tại mức dòng và cột. Thức chất Oracle VPD có thể thêm tự động một mệnh đề
2
WHERE thích hợp vào câu lệnh SQL dùng cho table, view, synonym khi người
dùng muốn truy cập dữ liệu. Chính sách bảo mật của Oracle VPD được tự động
thực thi khi một người dùng truy xuất dữ liệu.
Khi một người dùng trực tiếp hay gián tiếp truy xuất dữ liệu trên các table,
view, synonym được bảo mật bới chính sách VPD sẽ tự điều chỉnh câu lệnh SQL
của người dùng. Việc điều chỉnh câu lệnh SQL dựa trên mệnh đề WHERE để trả
lại một hàm thực thi chính sách bảo mật. Chính sách Oracle VPD có thể áp dụng
cho các câu lệnh SELECT, INSERT, UPDATE, INDEX, DELETE.
Giả sử rằng trong bảng Orders chỉ có những hóa đơn do nhân viên có định
danh là 159 bán được phép truy cập, cịn những hóa đơn do nhân viên khác bán thì
khơng được phép truy cập. Để thực hiện được điều này ta thiết lập một chính sách
Oracle VPD. Khi đó một người dùng thực hiện dòng lệnh truy vấn sau:
SELECT * FROM OE.Orders
Chính sách Oracle VPD tự động gắn thêm câu lệnh với mệnh đề WHERE
như sau:
SELECT * FROM OE.Orders WHERE SALES_REP_ID = 159;
Như vậy khi người dùng muốn thực hiện câu truy vấn xem tồn bộ hóa đơn
trong bảng Orders nhưng kết quả truy xuất trả về chỉ có những dữ liệu được phép
hiển thị, phần dữ liệu không được phép hiển thị sẽ khơng thể truy xuất. Đây chính
là chính sách bảo mật trên dữ liệu mà thực tế khi người dùng truy xuất hồn tồn
khơng biết.
Chính sách Oracle VPD có thể được thực hiện với nhóm người dùng khác
nhau bằng cách tạo ra ngữ cảnh ứng dụng tương ứng với từng nhóm.
1.3. Lợi ích của việc sử dụng Oracle VPD
1.3.1. Bảo mật
Thêm một chính sách bảo mật VPD vào một table, view, sysnonym có thể
giải quyết các vấn đề nghiêm trọng về bảo mật ứng dụng. Giả sử một người dùng
được phép sử dụng một ứng dụng và có quyền chỉnh sửa CSDL bằng cách sử dụng
công cụ truy vấn như SQL plus. Bằng cách thêm các chính sách bảo mật trực tiếp
đến các table, view, synonym có thể kiểm soát được việc truy xuất dữ liệu của bất
cứ người dùng nào.
Ví dụ: Một người dùng trực tiếp dùng SQL Plus hoặc thông qua một ứng
dụng khác thực hiện cập nhập dữ liệu thì việc thực thi chính sách khơng phụ
thuộc vào cách người đó truy cập. Việc thực thi cập nhập dữ liệu của người
3
dùng có thành cơng hay khơng phụ thuộc vào chính sách bảo mật được thiết
lập trên cơ sở dữ liệu và trên từng đối tượng người dùng.
1.3.2. Đơn giản
Việc thêm chính sách bảo mật vào table, view, synonym chỉ cần thực hiện
một lần. Khi người dùng truy cập vào ứng dụng chính sách bảo mật trên ứng dụng
sẽ được áp dụng lại mà không cần phải thực hiện điều kiện truy cập dữ liệu đối với
người dùng
Ví dụ: Thiết lập một chính sách để quản lý việc truy cập dữ liệu trên nhóm
người dùng khi muốn thực hiện xem tiền lương của các nhân viên khác trong
công ty. Với điều này đơn giản chỉ cần thiết lập chính sách bảo mật trên cột
lương nhân viên thì bất kể nhân viên nào xem lương của các nhân viên khác
đều trả về kết quả NULL ở cột tiền lương và chính sách này chỉ cần áp dụng
một lần duy nhất trên các đối tượng bảo mật.
1.3.3. Linh động
Có thể tạo các chính sách bảo mật khác nhau với từng câu lệnh SELECT, INSERT,
UPDATE, DELETE hoặc có thể tạo nhóm chính sách trên từng đối tượng hoặc
nhóm đối tượng khác nhau mà khơng ảnh hưởng đến cấu trúc của đối tượng được
áp dụng chính sách.
Ví dụ: Có thể thiết lập chính sách bảo mật để nhân viên phịng nhân sự có
thể SELECT tồn bộ thơng tin nhân viên nhưng chỉ có thể UPDATE tiền
lương của nhân viên thuộc phòng nhân sự. Hoặc cũng có thể áp dụng chính
sách đó cho một nhóm nhân viên thuộc các phịng ban khác nhau trong cơng
ty.
1.4. Cơ chế hoạt động của Oracle VPD
1.4.1. Oracle VPD sử dụng với ngữ cảnh ứng dụng
Ngữ cảnh ứng dụng được sử dụng với chính sách Oracle VPD. Khi tạo một
ngữ cảnh của ứng dụng thông tin ứng dụng được bảo mật với từng người dùng.
Ví dụ: Người dùng muốn truy xuất tới bảng ORDERS_TAB dựa vào định
danh của khách hàng. Thay vì dùng định danh của khách hàng này để đăng
nhập vào hệ thống, có thể tạo ngữ cảnh ứng dụng để lưu lại định danh này
cho các phiên làm việc khác khi cần.
Ngữ cảnh ứng dụng thì đặc biệt hữu dụng nếu chính sách bảo mật dựa trên nhiều
thuộc tính bảo mật.
Ví dụ: Nếu hàm chính sách dựa trên mệnh đề WHERE với 4 thuộc tính ID,
cost, enter, position, spending limit. Như vậy nhiều truy vấn phait thực thi để
4
lấy thông tin. Để tiết kiệm thời gian và chi phí cho các truy vấn như trên ta
tạo ra một ngữ cảnh để tăng khả năng thực thi khi truy xuất dữ liệu.
Có thể dùng một ngữ cảnh ứng dụng để trả lại đúng chính sách bảo mật thơng qua
một chuỗi ngữ (predicate)
Ví dụ: Trong bảng ORDERS chỉ cho phép khách hàng nhìn thấy Order của
họ, những nhân viên có thể nhìn thấy tất cả các Order của khách hàng. Hai
chính sách này được sử dụng là khác nhau, có thể định nghĩa một ngữ cảnh
ứng dụng với thuộc tính position, thuộc tính này có thể được truy xuất bên
trong hàm chính sách để trả lại chuỗi ngữ đúng. Điều này cịn phụ thuộc vào
giá trị của thuộc tính. Như vậy một người dùng có thuộc tính position là
Clerk thì có thể thấy tất cả các thơng tin của tất cả các Order nhưng một
người dùng khác có thuộc tính positon là Customer thì chỉ nhìn thấy các mẩu
tin thuộc người dùng đó.
Để thiết kế một chính sách điều khiển truy xuất hạt mịn (fine-grained) trả lại một
chuỗi ngữ chỉ định cho một thuộc tính, thì cần phải truy xuất tới một ngữ cảnh ứng
dụng bên trong có chức năng thực hiện chính sách
Ví dụ: Giả sử muốn khách hàng chỉ thấy những mẩu tin riêng của họ thì
người dùng cần thực thi query sau:
SELECT * FROM ORDERS_TAB
Nhưng điều khiển truy xuất hạt mịn tự động chỉnh sửa câu truy vấn này
thành
SELECT * FROM ORDERS_TAB WHERE
custID=SYS_CONTEXT(‘order_entry’,’cust_num’)
Giả sử có 50000 khách hàng cùng được áp dụng một chính sách bảo mật.
Như vậy tất cả các khách hàng có cùng mệnh đề WHERE khi thực hiện truy
vấn nhưng với quy định là khác hàng chỉ được thấy những hóa đơn của họ.
Dùng ngữ cảnh ứng dụng có thể trả lại một mệnh đề WHERE bên trong một
chính sách được áp dụng cho 50000 khách hàng. Với kết quả này, có một
Cursor thực thi các cách khác nhau với mỗi khách hàng vì khách hàng được
đánh giá tại thời điểm thực thi. Giá trị này thì khác nhau ứng với mỗi khách
hàng. Việc dùng ngữ cảnh ứng dụng trong trường hợp này cung cấp điều
kiện thực thi tốt nhất cho yêu cầu bảo mật mức dòng.
1.4.2. Phát sinh mệnh để WHERE tự động
Để phát sinh mệnh đề WHERE một cách tự động cần phải tạo một function
để định nghĩa sự hạn chế dữ liệu mà ta muốn thực hiện. Thường thường, người
quản trị hệ thống tạo hàm này trong schema của họ. Với những hành động phức tạp
5
hơn như là gọi tới một hàm khác thì những hàm nàu cần được tạo bên trong một
gói.
Hàm phải có thành phần sau:
Tên đối số nhập vào phải là tên của một schema hay một đối tượng
(table, view, synonym)
Định nghĩa tham số nhận vào để nhận thông tin
Tạo tham số cho schema trước rồi sau đó là tạo tham số cho đối
tượng
Phải cung cấp giá trị trả về cho chuỗi ngữ mệnh đề WHERE sẽ phát
sinh ra
Giá trị trả về luôn luôn là varchar
Hàm phát sinh mệnh đề WHERE phải hợp lý
Mệnh đề WHERE thường dùng chung cho tất cả người dùng. Nhưng
nhiều trường hợp 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 xuất đến
ứng dụng muốn bảo mật.
Ví dụ: Khi người quản lý đăng nhập vào hệ thống, mệnh đề WHERE có thể
xác định đúng thơng tin cho người quản lý. Ta có thể làm điều này bằng cách
xây dựng mơt ngữ cảnh ứng dụng với mệnh đề WHERE tự phát sinh mã.
Những chức năng Oracle VPD tạo ra có thể không dùng một ngữ cảnh ứng
dụng. Nhưng một ngữ cảnh ứng dụng tọa ra một chính sách Oracle VPD tốt hơn,
bằng cách tạo bảo mật cho từng người dùng truy xuất tới từng thuộc tính trong
phiên làm việc của người dùng đó như là định danh của họ.
1.4.3. Chính sách áp dụng phải gắn với một đối tượng bảo mật cụ thể
Sau khi tạo hàm, cần tạo một chính sách Oracle VPD kết hợp hàm với một
table, view, synonym. Chính sách này được tạo bằng cách sử dụng gói dbms_rls.
Đối với những user khơng là sys thì phải gán quyền execute tới người dùng trên
gói dbms_rls. Gói này chứa thủ tục quản lý chính sách và thiết lập điều khiển truy
xuất hạt mịn.
Ví dụ: Để thêm chính sách tới một bảng, dùng thủ tục dbms_rls.add_policy.
Bên trong thiết lập fine-grained access control như là chính sách hiệu quả
khi một người dùng đưa ra câu lệnh SELECT hay UPDATE trên table hay
view.
1.5. VPD trên cách phiên bản Oracle
Phiên bản Oracle 8i đã hỗ trợ chính sách VPD
Phiên bản Oracle 9i thêm nhiều chính sách mới trên table và chính
sách được áp dụng cho nhiều nhóm.
6
Phiên bản Oracle 10g đã bổ sung chính sách bảo mật ở mức cột, hỗ
trợ colum_masking, hỗ trợ loại chính sách thực thi chính sách bảo mật
Phiên bản Oracle 11g cung cấp khả năng chứng thực bằng giao diện
cho chính sách bảo mật trên dịng
7
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT CHÍNH SÁCH ORACLE VPD
2.1.
Gắn chính sách Oracle VPD tới một đối tượng
Sau khi tạo một hàm định nghĩa hành động trong mệnh đề WHERE của
chính sách Oracle VPD, cần phải gắn hàm này tới đối tượng (table, view,
synonym) cần thiết lập một chính sách Oracle VPD đó. Để thực hiện điều này ta
cần thiết lập một chính sách Oracle VPD. Chính sách này là cơng cụ quản lý các
hàm trong VPD. Chính sách Oracle VPD được quản lý bới gói DBMS_RLS. Khi
người dùng thực hiện truy xuất dữ liệu trong cơ sở dữ liệu thì chính sách tự động
thực thi.
Danh sách các thủ tục trong gói DBMS_RLS:
Procedure
For Handling Individual Policies
DBMS_RLS.ADD_POLICY
DBMS_RLS.ENABLE_POLICY
DBMS_RLS.RESH_POLICY
DBMS_RLS.DROP_POLICY
For Handling Grouped Policies
DBMS_RLS.CREATE_POLICY_GROUP
DBMS_RLS.DELETE_POLICY_GROUP
DBMS_RLS.ADD_GROUPED _POLICY
DBMS_RLS.ENABLE_GROUPED _POLICY
DBMS_RLS.REFRESH_GROUPED _POLICY
DBMS_RLS.DISABLE_GROUPED _POLICY
DBMS_RLS.DROP_GROUPED _POLICY
Description
Thêm một chính sách tới
table, view, synonym
Thêm một chính sách ưu
tiên tới table, view,
synonym
Khai báo một con trỏ
nonstatic
Xóa chính sách từ một
table, view, synonym
Tạo một policy group
Xóa một policy group
Thêm một policy chỉ định
cho group
Enable một chính sách bên
trong một group
Phân tích lại câu lệnh SQL
kết hợp với một chính sach
refresh
Disable một policy với một
group
Drop một policy của một
8
thành viên trong nhóm
For Handling Application Context
Thêm ngữ cảnh cho ứng
dụng
Xóa một ngữ cảnh của ứng
DBMS_RLS.DROP_CONTEXT
dụng
Bảng 2.1: Danh sách các thủ tục trong DBMS_RLS
DBMS_RLS.ADD_CONTEXT
2.2.
Thực thi chính sách với loại câu lệnh SQL
Để thêm một chính sách vào một table, view, synonym có thể dùng thủ tục
dbms_rls.add_policy. Sau đó thiết lập thủ tục này tới đối tượng cần áp dụng chính
sách bảo mật. Trong thủ tục này có thể chỉ định thơng tin khác như loại câu lệnh để
điều khiển chính sách (SELECT, INSERT, UPDATE, DELETE,…)
Ví dụ: Sử dụng dbms_rls.add_policy để thêm chính sách Oracle VPD gọi là
secure_update tới bảng hr.employees. Hàm thực hiện chính sách là
check_updates
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema
object_name
policy_name
policy_function
=> ‘hr’,
=> ‘employess’,
=> ‘secure_update’
=> ‘check_updates’
Nếu hàm được tạo trong gói phải bao gồm tên gói.
Ví dụ:
policy_function
=> ‘pkg.check_updates’
Các tham số trong thủ tục add_policy
Parameter
OBJECT_SCHEMA
Description
Chủ sở hữu đối tượng thiết lập chính
sách bảo mật. Nếu Object_schema là
NULL mặc định là người dùng hay
shema đang dùng
9
Tên của đối tượng thiết lập chính sách
bảo mật. Có thể là table, view,
OBJECT_NAME
synonym
Tên của chính sách bảo mật, phải là
POLICY_NAME
duy nhất trong một đối tượng
Tên của người chủ sở hữu các hàm
FUNCTION_NAME
thiết lập trong chính sách
FUNCTION_SCHEMA
Schema sở hữu hàm chính sách
Tên của hàm phát sinh một predicate
POLICY_FUNCTION
trong chính sách
STATEMENT_TYPES
Loại câu lệnh áp dụng cho chính sách
Câu lệnh chỉ dùng cho insert và update.
Thiết lập Update_check = TRUE để
UPDATE_CHECK
Server kiểm tra các chính sách áp dụng
sau khi insert hoặc update
Mặc định là TRUE khi thêm một chính
ENABLE
sách. Enable để chỉ định thiết lập chính
sách trên đối tượng
Mặc định là False. Nếu thiết lập TRUE
thì predicate trong chính sách là giống
STATIC_POLICY
nhau cho mọi người dùng truy xuất dữ
liệu
Mặc định là NULL có nghĩa là
POLICY_TYPE
policy_type có kiểu là static_policy
Mặc định là FALSE nghĩa là hàm chính
sách có thể trả về lại một predicate với
LONG_PREDICATE
chiều dài >4000 byte. TRUE nghĩa là
predicate có thể > 32k byte.
Thiết lập chính sách bảo mật ở mức độ
cột. Chỉ dùng với table, view không
SEC_RELEVANT_COLS
dùng với synonym. Mặc định là tất cả
các cột người dùng định nghĩa trong
đối tượng
Dùng để hiển thị tất cả các dòng trong
chinh sách bảo mật ở mức cột. Nhưng
SEC_RELEVANT_COLS_OPTS
những cột không được phép hiển thị sẽ
mang giá trị NULL khi hiển thị
Bảng 2.2: Danh sách các tham số ADD_POLICY
10
2.3.
Điều khiển việc hiển thị dữ liệu dựa vào các chính sách
2.3.1.Thiết lập những chính sách Oracle VPD ở mức cột
Có thể áp dụng một chính sách Oracle VPD ở mức cột tới các Table, View
nhưng không thể dùng cho các Synonym.
Để áp dụng chính sách tới mọt cột phải chỉ định các cột bảo mật liên quan
bằng các tham số Sec_Relavant_Cols của thủ tục dbms_rls.add_policy. Tham số
này thực thi chính sách bảo mật bất cứ khi nào các cột được tham chiếu được gọi
tường minh trong một câu truy vấn hay khơng.
Ví dụ: Những người dùng khơng thuộc phịng nhân sự chỉ được phép thấy
những thông tin cá nhân của họ. Khi nhân viên bán hàng thực hiện yêu cầu
truy vấn sau:
SELECT fname,lname,ssn FROM emp;
Thiết lập mọt hàm thực thi chính sách bảo mật trả lại điều kiện trong mệnh
đề WHERE là ssn=“my_ssn”. Khi thực thi câu truy vấn sẽ được tự động viết
lại như sau:
SELECT fname,lname,ssn FROM emp
WHERE ssn=’my_ssn’;
Ví dụ: Thiết lập một chính sách Oracle VPD cho phép nhân viên phịng bán
hàng khơng thể nhìn thấy lương của nhân viên khơng thuộc phịng này (có
định danh phịng là 30). Những cột liên quan trong chính sách này gồm sal,
comm.
Đầu tiên, tạo hàm chính sách Oracle VPD và thực hiện gói dbms_rls
PL/SQL
CREATE OR REPLACE FUNCTION hide_sal_comm(
v_schema IN VARCHAR2,
v_objname IN VARCHAR2,)
RETURN VARCHAR2 AS con VARCHAR2(200);
BEGIN
con := 'deptno=30‘
RETURN(con);
END hide_sal_comm;
Hãy thực hiện chính sách với thủ tục dbms_rls.add_policy như sau
11
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema => ‘scott’,
object_name
=> ‘emp’,
policy_name
=> ‘hide_sal_policy’,
policy_function => ‘hide_sal_comm’,
sec_relevant_cols => ‘sal,comm’);
END;
2.3.2.Điều khiển hiển thị dữ liệu trong Oracle VPD
Mặc định thực thi hàm chính sách Oracle VPD ở mức độ cột là để hạn chế
số dòng trả về cho câu truy vấn. Những cột có chứa thơng tin nhạy cảm thì khơng
được phép hiển thị. Để chỉ định những cột nhạy cảm cần bảo mật sử dụng tham số
sec_relevant_cols trong thủ tục dbms_rls.add_policy như ví dụ trên.
Khi người dùng (SCOTT) thực thi truy vấn:
SELECT ENAME, D.NAME, JOB, SAL, COMM
FROM emp e, dept d
WHERE d.deptno=e.deptno;
Kết quả câu truy vấn trên chỉ trả về thông tin ENAME, DNAME, JOB, SAL,
COMM của những nhân viên thuộc phịng bán hàng, những thơng tin thuộc các
phịng khác sẽ khơng được hiển thị do chính sách VPD đã cài đặt ở trên được áp
dụng.
2.3.3.Dùng mặt nạ hiển thị đối với những dữ liệu áp dụng chính sách
Oracle VPD
Nếu một truy vấn tham chiếu đến một cột nhạy cảm thì hành động mặc định
trong chính sách Oracle VPD ở mức cột sẽ làm giảm số thông tin truy vấn trả về.
Tác dụng của mặt nạ hiển thị cột (column – masking) làm cho tất cả những dòng
đều được hiển thị kể cả những dịng có cột nhạy cảm. Tuy nhiên những cột nhạy
cảm này hiển thị với giá trị NULL. Để enable mặt nạ cột ta thiết lập tham số
sec_relevant_cols_opt của thủ tục dbms_rls.add_policy.
Ví dụ: Trong kết quả truy vấn của nhân viên bán hàng mơ tả ở ví dụ trước.
Nếu mặt nạ cột được áp dụng thay vì chỉ thấy những dịng chứa thơng tin cá
nhân của những nhân viên bán hàng thì có thể nhìn thấy tồn bộ thông tin
bảng emp.
12
Để mặc định hành động ở mức cột trong chính sách Oracle VPD, có thể sử
dụng mặt nạ mạng để hiển thị tất cả các dòng nhưng những cột nhạy cảm trả
lại giá trị NULL. Cần thiết lập tham số sec_relevant_opt của thủ tục
dbms_rls.add_policy tới dbms_rls.all_rows.
Ví dụ: Chỉ ra chính sách Oracle VPD ở mức cột sử dụng colums-masking
làm mặt nạ hiển thị. Chính sách sử dụng giống như chính sách VPD ở trên
những tham số sec_relevant_cols_opt chỉ định là dbms_rls.add_rows thay
chi tên các cột.
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema => ‘scott’,
object_name
=> ‘emp’,
policy_name
=> ‘hide_sal_policy’,
policy_function => ‘hide_sal_comm’,
sec_relevant_cols_opt =>
dbms_rls.ALL_ROWS);
END;
Giả sử rằng nhân viên phịng bán hàng có quyền SELECT trên bảng emp
như người dùng SCOTT. Khi thực thi câu lệnh truy vấn:
SELECT ENAME, D.NAME, JOB, SAL, COMM
FROM emp e, dept d
WHERE d.deptno=e.deptno;
CSDL trả về là toàn bộ những dịng có trong bảng emp, kể cả những thơng
tin của nhân viên khơng thuộc phịng bán hàng. Nhưng những thông tin về
sal, comm của những nhân viên viên thuộc phịng này chắc chắn được che đi
nhờ chính sách Oracle VPD.
Column-Masking trả lại tồn bộ thơng tin của nhân viên bán hàng những đã
làm cho cột sal và comm có giá trị NULL cho nhân viên khơng thuộc phịng
bán hàng.
13
2.4.
Tạo nhóm chính sách
2.4.1.Định nghĩa nhóm chính sách
Một nhóm chính sách là tập hợp nhiều chính sách bảo mật thuộc một ứng
dụng. Có thể tạo một ngữ cảnh ứng dụng (gọi là driving context hoặc policy
context) để quản lý nhóm chính sách ảnh hưởng. Khi một người dùng truy xuất tới
các cột trong table, view hoặc synonym, CSDL Oracle tìm kiếm ngữ cảnh thích
hợp để xác định chính sách phù hợp cho nhóm và thực thi tồn bộ chính sách trong
nhóm đó.
Với nhóm chính sách được sử dụng cho các ứng dụng gồm nhiều chính sách
bảo mật giống nhau trên các table, view, synonym. Trường hợp này chúng ta chỉ
enable những chính sách khi các table, view hay synonym được truy xuất.
Ví dụ: Cơng ty A giữ bảng BENEFIT cho hai công ty B và C. Bảng này
được truy xuất bằng 2 ứng dụng khác nhau. Những người dùng thuộc phịng
ban HR và FI với hai chính sách bảo mật khác nhau. Ứng dụng HR ưu tiên
người dùng dựa trên cấp bậc trong cơng ty cịn ứng dụng FI ưu tiên người
dùng theo phịng ban. Việc tích hợp chính sách riêng cho 2 công ty vào bảng
BENEFIT theo yêu cầu phát triển của hai công ty là một lựa chọn không khả
thi. Bằng cách định nghĩa một ngữ cảnh ứng dụng để kiểm sốt việc thực thi
chính sách cho mỗi đối tượng, mỗi ngữ cảnh ứng dụng điều khiển một chính
sách bảo mật riêng trên từng đối tượng. Để làm được điều này cần tổ chức
chính sách bảo mật thành nhiều nhóm và tạo ngữ cảnh ứng dụng để thiết lập
chính sách trên các nhóm. Những chính sách này chỉ bị ảnh hưởng trong thời
gian thực thi. Điều này bắt buộc tất cả các chính sách phải thuộc nhóm một
chính sách
2.4.2.Tạo một nhóm chính sách mới
Để thêm một chính sách tới đối tượng vào nhóm chính sách dùng thủ tục
dbms_rls.add_group_policy. Để xác định những chính sách thích hợp cho nhóm
cần thêm ngữ cảnh điều khiển bằng thủ tục dbms_rls.add_policy_context. Lỗi phát
sinh khi ngữ cảnh điều khiển trả về kết quả khơng tìm thấy nhóm chính sách nào.
Nếu điều khiển ngữ cảnh khơng được định (nó sẽ NULL) thì Oracle sẽ thực thi
tất cả các chính sách từ trong nhóm chính sách đã được thiết lập từ trước. Một ứng
dụng truy xuất dữ liệu không thể tránh bất cứ phạm vi nào được thiết lập bảo mật
Việc áp dụng đa điều khiển ngữ cảnh tới những table, view, synonym là giống
nhau nhưng mỗi đối tượng có một cách xử lý riêng. Điều này thực hiện bằng cách
cấu hình nhiều hành động được thiết lập cho chính sách.
14
Ví dụ: Một cơng ty cung cấp dịch vụ máy chủ cho hai ứng dụng BE và FI.
Hai ứng dụng này chia sẻ chung một số đối tường trong CSDL. Cả hai ứng
dụng dùng một chính sách Subcriber trong chính sách nhóm sys_default. Dữ
liệu truy xuất được phân chia đầu tiên bởi định danh subcriber tiếp theo là
bằng điều khiển ngữ cảnh để xác định người dùng truy xuất tới ứng dung BE
hay FI. Giả sử công ty A muốn áp dụng một chính sách trên dữ liệu riêng
cho cơng ty A thì cần phải thêm vào một điều khiển ngữ cảnh tạo một chính
sách đặc biệt chỉ áp dụng cho cơng ty A. Chính sách này chỉ liên quan đến
cơng ty A và nó có hiệu quả hơn các chính sách khác trong nhóm, các chính
sách dùng chung.
2.4.3.Chỉ định nhóm chính sách mặc định sys_default
Trong một nhóm nhiều chính sách bảo mật có thể thiết kế một chính sách
bảo mật mặc định. Chính sách này rất hữu dụng khi phân vùng bảo mật trên ứng
dụng. Chính sách mặc định cho phép hình thành để thực thi những bảo mật cơ bản
trong mọi điều kiện. Để thực thi chính sách bảo mật mặc định cần thêm chính sách
này tới nhóm sys_default.
Những chính sách định nghĩa riêng cho từng table, view, synonym trong nhóm
này được thực thi nhờ vào điều khiển ngữ cảnh. Nhóm chính sách sys_default có
thể chứa hoặc khơng chứa những chính sách khác bên trong. Ta khơng thể xóa
những chính sách sys_default, nếu xóa nó sẽ phát sinh lỗi.
Với nhóm chính sách sys_default, có thể được gắn từ những chính sách này
vào hai hay nhiều đối tượng. Mỗi đối tượng sẽ có một nhóm chính sách riêng trong
nhóm sys_default được gắn vào nó.
Ví dụ: Trong bảng emp và dept thuộc nhóm schema scott cũng có chính
sách trong sys_default sử dụng cho 2 bảng trên là hoàn toàn khác nhau
Có thể tạo những nhóm chính sách với tên giống nhau trên nhiều đối tượng. Để
lựa chọn đúng chính sách muốn thực hiện phải kết hợp với schema và tên đối
tượng dùng chính sách.
2.4.4.Thiết lập chính sách trên đối tượng
Có thể thiết lập một số chính sách cho cùng table, view, synonym nhằm mục
đích thiết lập các quy định riêng cho từng đối tượng trong chính sách. Khi thêm
một chính sách chỉ định tới một đối tượng bất kỳ không phải cần viết lại hàm chính
sách của ứng dụng.
15
Tất cả cách chinh sách áp dụng trên một đối tượng được thực thi với cú pháp
AND. Nếu thiết lập nhiều chính sách trên một table thì tất cả chính sách được thiết
lập cho table đó sẽ được áp dụng. Có thể sử dụng nhiều nhóm chính sách và một
ngữ cảnh ứng dụng để phân cùng thực thi điều khiển truy xuất hạt mịn sử dụng các
chính sách khác nhau dựa vào ứng dụng truy xuất dữ liệu.
2.4.5.Chứng thực chính sách trên đối tượng
Gói thực thi điều khiển ngữ cảnh phải được chứng thực một cách chính xác
ứng dụng dùng kết nói CSDL. Oracle kiểm tra stack để xác định đúng gói thực thi
nào được gọi thơng qua các thuộc tính trong điều khiển ngữ cảnh.
Trong một ứng dụng người dùng cần thực thi quyền trên gói điều khiển ngữ
cảnh được cài đặt (Execute).
Người dùng có thể thơng qua gói điều khiển ngữ cảnh để thiết lập ngữ cảnh
cho nhóm chính sách.
Oracle VPD thực thi chứng thực thơng qua việc xác định danh tính của tầng
ứng dụng được kết nối tới CSDL dùng danh nghĩa của người dùng. Chính sách
thích hợp sẽ áp dụng cho mỗi ứng dụng gián tiếp truy cập dữ liệu.
2.5.
Đánh giá việc thực thi chính sách theo từng loại chính sách VPD
Ta có thể tối ưu hóa hiệu suất việc thực thi một chính sách bằng cách chỉ
định một loại chính sách cho những chính sách được thiết lập. Những loại chính
sách này điều khiển cách Oracle DB che dấu các predicate tring chính sách Oracle
VPD. Việc thực thi các hàm chính sách có thể tốn khối lượng lớn tài nguyên hệ
thống. Vì thế cần giảm số lần thực thi hàm chính sách nhằm tối ưu hóa cơ sở dữ
liệu. Có 5 loại chính sách: Dynamic, Static, Shared_Static, Context_Sensitive và
Shared_context_sensitive. Để chỉ định một loại chính sách thiết lập tham số
policy_type vào thủ tục dbms_rls.add_policy.
2.5.1. Sử dụng loại chính sách Dynamic
Loại chính sách dynamic thực thi hàm chính sách mỗi khi người dùng truy
xuất đối tượng CSDL VPD. Nếu khơng chỉ định một loại chính sách trong thủ thục
dbms_rls.add_policy thì mặc định chính sách là dynamic.
Loại chính sách Dynamic khơng thực thi như những loại Static và Sensitive.
Trước khi cài đặt cơ chế là Static hay Context-sensitive đầu tiên phải kiểm tra loại
chính sách có phải là Dynamic hay khơng. Việc kiểm tra chính sách Dynamic để
xem cách thực thi hàm chính sách trong câu truy vấn là như thế nào. Việc này đảm
16
bảo chắc chắn những chính sách riêng được thực hiện trước khi thực hiện những
chính sách Static hay Context_sensitive.
Ví dụ: Tạo một chính sách Dynamic với dbms_rls.add_policy
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema => ‘hr’,
object_name
=> ‘employees’,
policy_name
=> ‘secure_update,
policy_function => ‘hide_fin’,
policy_type
=> dbms_rls.DYNAMIC );
END;
2.5.2. Sử dụng loại chính sách Static
Loại chính sách Static bắt buộc phải giống nhau cho tất cả người dùng.
Oracle lưu trữ chính sách Static trong SGA, bởi vì hàm chính sách là Static khơng
thực thi lại trong mỗi lần truy vấn dữ liệu. Điều này làm cho kết quả thực thi nhanh
hơn.
Có thể cài đặt chính sách bằng cách thiết lập tham số cho thủ tục là Static
hay Shared_Static phụ thuộc vào việc chia sẻ chính sách cho nhiều đối tượng hay
khơng.
Ví dụ: Tạo một chính sách Stactic với dbms_rls.add_policy
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema => ‘hr’,
object_name
=> ‘employees’,
policy_name
=> ‘secure_update,
policy_function => ‘hide_fin’,
policy_type
=> dbms_rls.STATIC );
END;
Khi dùng chính sách Static phải đảm bảo chính sách khơng chứa thuộc tính
chỉ định riêng cho một cơ sở dữ liệu như tên cột.
17
2.5.3. Sử dụng loại chính sách Shared_Static
Khi muốn áp dụng một chính sách đến hay hay nhiều bảng trong một
schema dùng loại chính sách Share_Static thiết lập cho các đối tượng cần bảo mật.
Ví dụ: Tạo chính sách Shared_Static cho hai bảng Employees và Fin_data
trong schema hr. Thiết lập chính sách Shared_Static cho cả hai bảng như
sau:
Đầu tiên cho bảng Employees:
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema =>
‘hr’,
object_name
=> ‘employees’,
policy_name
=> ‘secure_update,
policy_function => ‘hide_fin’,
policy_type
=> dbms_rls.SHARED_STATIC );
END;
Tiếp theo tạo chính sách cho bản Fin_data giống như với bảng Employees
chỉ thay object_name.
2.5.4. Sử dụng loại chính sách Context_Sensitive
Ngược với chính sách Static, chính sách Context_Sensitive khơng ẩn chứa
các chuỗi ngữ. Với chính sách Context_Sensitive CSDL sẽ thay đổi sau khi câu
lệnh được phân tích. Nhưng nếu trong ngữ cảnh ứng dụng khơng có sự thay đổi thì
Oracle khơng thực hiện lại hàm chính sách trong phiên làm việc của người dùng.
Ngược lại nếu có sự thay đổi CSDL chạy lại hàm chính sách để đảm bảo rằng nó
ghi nhận bất cứ sự thay đổi nào khi phân tích lúc đầu.
Có thể enable chính sách Context_Sensitive bằng cách thiết lập tham số
policy_type của thủ tục dbms_rls.add_policy.
Ví dụ: Tạo một chính
dbms_rls.add_policy như sau:
sách
Context_Sensitive
trong
gói
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema =>
object_name
=>
policy_name
=>
‘hr’,
‘employees’,
‘secure_update,
18
policy_function =>
policy_type
=>
‘hide_fin’,
dbms_rls.CONTEXT_SENSITIVE );
END;
Chính sách Context_Sensitive hữu dụng trong nhữn điều kiện khác nhau và
phụ thuộc vào việc thực thi truy vấn của người dùng.
2.5.5. Sử dụng loại chính sách Shared_Context_Sensitive
Cách để tạo hai chính sách Shared_Context_Sensitive với cùng một chính
sách trên nhiều bảng như sau:
Tạo chính sách trên bảng Employees:
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema => ‘hr’,
object_name
=> ‘employees’,
policy_name
=> ‘secure_update,
policy_function => ‘hide_fin’,
policy_type
=>
dbms_rls.SHARED_CONTEXT_SENSITIVE );
END;
Tạo chính sách trên bảng fin_data
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema => ‘hr’,
object_name
=> ‘fin_data’,
policy_name
=> ‘secure_update,
policy_function => ‘hide_fin’,
policy_type
=>
dbms_rls.SHARED_CONTEXT_SENSITIVE);
END;
19
2.5.6. Bảng tóm tắt năm loại chính sách Oracle VPD
Policy type
Thực thi hàm chính sách
Chính sách phải thực thi
DYNAMIC lại mỗi khi đối tượng bảo
mật được truy xuất
STATIC
Thực hiện 1 lần duy nhất
sau đó các predicate được
lưu lại trong SGA
SHARED_
STATIC
Giống Static
Tại thời điểm phân tích cú
pháp câu lệnh.
CONTEXT
Tại thời điểm thực thi khi
_SENSITIV
ứng dụng cục bộ thay đổi
E
ngữ cảnh kể từ lần cuối
cùng dùng cursor
Lần đầu tiên đối tượng
được tham chiếu tới một
SHARED_
phiên làm việc trong DB.
CONTEXT
Predicate được lưu trong
_SENSITIV
UGA để các hàm chính
E
sách có thể chia sẻ giữa
các đối tượng
Example
Shared
multiple
object
Những ứng dụng mà chính
sách predicate trong
WHERE phải tự phát sinh
Khơng
trong mỗi lần truy xuất. Ví
được
dụ những chính sách về
phép
thời gian mà người dùng bị
từ chối truy xuất dữ liệu
trong ngày
Không
Ứng dụng báo cáo
được
phép
Trong môi trường hosting
như data warehouse là cần Được
predicate giống nhau trên
phép
nhiều đối tượng
Mơ hình 3 tầng có nhiều
phiên làm việc sử dụng hai
hay nhiều predicate khác
nhau cho nhiều user hay
nhiều nhóm
Giống Context_Sensitive
nhưng nhiều đối tượng có
thể chia sẻ một hàm chính
sách từ phiên làm việc
Khơng
được
phép
Được
phép
20
CHƯƠNG 3: THỰC HÀNH
Nội dung thực hành:
Tạo ngữ cảnh ứng dụng
Bảo mật mức hàng
Bảo mật mức cột
3.1. Tạo ngữ cảnh ứng dụng
3.1.1. Chuẩn bị bảng và tạo các user
Sử dụng sqlplus trong cmd, đăng nhập bằng user sys dưới quyền sysdba
Tạo tài khoản congty và phân quyền
create user congty identified by 123456;
GRANT UNLIMITED TABLESPACE TO congty;
21