1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài thực hành Số 4: Virtual private database - Phần 1

13 986 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 844,75 KB

Nội dung

Bảo Mật Hệ Thống Thông Tin – 2013 Virtual Private Database (1) Bài thực hành số VIRTUAL PRIVATE DATABASE (1)  Tóm tắt nội dung:  Giới thiệu Virtual Private Database  Row-level security  Kỹ thuật làm việc với policy function I Giới thiệu chung  Trong nhiều năm dài, việc áp dụng sách bảo mật cho liệu nằm bảng CSDL thực việc sử dụng view với function Tuy nhiên cách thực nhiều giải pháp thực tế cho mục đích trên, đặc biệt cần thực bảo mật mức độ “dòng liệu” (row-level security) Thấy nhu cầu ngày cao người dùng, từ Oracle Database 8.1.5, Oracle giới thiệu công nghệ hiệu Virtual Private Database (từ gọi tắt VPD)  VPD kết hợp kỹ thuật:  Fine-grained access control (FGAC): cho phép người quản trị dùng function để thực sách bảo mật liên kết sách bảo mật với table, view synonym Việc gán sách khiến cho người dùng với quyền hạn khác thấy “khung nhìn” khác đối tượng bảo vệ Việc giới hạn khung nhìn suốt người dùng Đồng thời sách bảo mật áp dụng cho user truy xuất đến table mà khơng cần người quản trị phải gán sách cho user Điều khiến sách bảo mật thực FGAC dễ quản lý thực view  Application Context: cung cấp nơi lưu trữ bảo mật cho giá trị ngữ cảnh ứng dụng Sử dụng Application Context nâng cao hiệu thực FGAC (trong chương trình khơng học Application-context) Lưu ý: phương pháp hiệu phổ biến để thực việc bảo mật BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM Lab 04 Bảo Mật Hệ Thống Thông Tin – 2013 Virtual Private Database (1) mức dòng liệu Oracle, nên người ta thường dùng thuật ngữ Row-level security (RLS) để thay cho Fine-grained access control Virtual Private Database II Row-level Security A Lý thuyết Row-level Security  Row-level security (RLS) cho phép giới hạn việc truy xuất hàng (record) dựa sách bảo mật (security policy) thực PL/SQL Một sách bảo mật mô tả quy định quản lý việc truy xuất dòng liệu Cơ chế thực  Để thực RLS, ta tạo hàm PL/SQL (PL/SQL function) trả chuỗi (string) Chuỗi string chứa điều kiện sách bảo mật mà ta muốn thực  Hàm PL/SQL vừa tạo sau đăng ký cho table, view mà ta muốn bảo vệ cách dùng package PL/SQL DBMS_RLS  Khi có câu truy vấn user đối tượng bảo vệ, Oracle nối chuỗi trả từ hàm nêu vào mệnh đề WHERE câu lệnh SQL ban đầu (nếu câu lệnh SQL ban đầu mệnh đề WHERE Oracle tự động tạo thêm mệnh đề WHERE để đưa chuỗi điều kiện vào), nhờ lọc hàng liệu theo điều kiện sách bảo mật Các lưu ý làm việc với RLS  Các hàm PL/SQL đăng ký cho table, view hay synonym cách gọi thủ tục DBMS_RLS.ADD_POLICY  Thủ tục ADD_POLICY địi hỏi phải có tham số nhập vào: object_name, policy_name, policy_function (Mô tả chi tiết package DBMS_RLS chứa file dbmsrlsa.sql \product\11.2.0\dbhome_1\RDBMS\ADMIN)  Sự kết hợp object_schema, object_name, policy_name phải  Mặc định, policy áp dụng cho tất lệnh DML Người quản trị dùng tham số STATEMENT_TYPES để policy áp dụng cho loại câu lệnh BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM Lab 04 Bảo Mật Hệ Thống Thông Tin – 2013  Virtual Private Database (1) Bất user truy xuất cách trực tiếp hay gián tiếp vào đối tượng bảo vệ, RLS engine gọi cách suốt, hàm PL/SQL đăng ký thực thi, lệnh SQL user chỉnh sửa thực thi  Tuy nhiên, account SYS không bị ảnh hưởng sách bảo mật  Nhiều policy áp dụng cho đối tượng Khi CSDL kết hợp tất policy lại với theo phép AND  Quyền sử dụng package DBMS_RLS không gán cho người dùng Những người quản trị cần gán quyền EXECUTE ON DBMS_RLS để sử dụng  Tất policy function mà ta tạo phải có tham số truyền vào Tham số tên schema sở hữu đối tượng mà sách RLS bảo vệ Tham số thứ hai tên đối tượng bảo vệ Hai tham số hữu ích policy function áp dụng cho nhiều đối tượng khác nhiều schema khác Tên tham số đặt thoải mái thứ tự tham số phải tuân thủ theo thứ tự Các tham số dùng để xác định đối tượng mà sách gọi cho Kiểu tham số truyền vào giá trị trả phải kiểu VARCHAR2  Policy function cần tạo schema người quản trị bảo mật Điều quan trọng việc truy xuất vào policy function cần bảo vệ Các user khác khơng nên có quyền thực thi hay quyền alter quyền drop policy function  Để thực sách bảo mật phức tạp 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ờ sách bảo mật áp dụng theo điều kiện linh hoạt (ví dụ: áp dụng sách bảo mật dựa người dùng thuộc Department số mấy) Trong chương trình thực hành khơng học Application Context, sinh viên tự tìm hiểu thêm vấn đề BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM Lab 04 Bảo Mật Hệ Thống Thông Tin – 2013 Virtual Private Database (1) B Thực hành Tạo sách bảo mật RLS  Ta có bảng EMP thuộc schema user SCOTT với nội dung sau: sec_mgr> SELECT DISTINCT deptno FROM scott.emp; DEPTNO -20 30 10  Giả sử ta có sách bảo mật (security policy) quy định khơng người dùng truy xuất đến record thuộc Department có deptno 10 bảng EMP Để sách áp dụng cho CSDL, ta cần tạo PL/SQL function schema SEC_MGR có chuỗi trả điều kiện sách bảo mật trên: sec_mgr> CREATE OR REPLACE FUNCTION no_dept10 ( p_schema IN VARCHAR2, p_object IN VARCHAR2) RETURN VARCHAR2 AS BEGIN RETURN 'deptno != 10'; END; / Function created  Sau tạo function thực sách bảo mật, ta cần đăng ký function cho đối tượng mà sách muốn bảo vệ cách dùng thủ tục ADD_POLICY package DBMS_RLS Đây user tạo sẵn Oracle với bảng liệu để dùng cho trường hợp chạy demo, hướng dẫn Nếu trình cài đặt chưa tự động tạo user này, SV tự thực thi script tạo schema SCOTT: \product\11.2.0\dbhome_1\RDBMS\ADMIN\scott.sql Trong Lab 04 Lab 05, SV cần ý username đặt bên trái dấu “>” đầu câu lệnh để biết câu lệnh thực user account Trong lab không nêu cụ thể lệnh log in/log out vào tài khoản, SV cần tự thực lệnh log in/log out BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM Lab 04 Bảo Mật Hệ Thống Thông Tin – 2013 Virtual Private Database (1) sec_mgr> BEGIN DBMS_RLS.add_policy (object_schema => 'SCOTT', object_name => 'EMP', policy_name => 'quickstart', policy_function => 'no_dept10'); END; / PL/SQL procedure successfully completed  Hai bước thực sách bảo mật vừa trình bày nên thực account chịu trách nhiệm quản lý bảo mật (trong ví dụ ví dụ khác lab, account chịu trách nhiệm quản lý bảo mật SEC_MGR)  Để kiểm tra xem sách có làm việc không, ta log on vào account SEC_MGR SCOTT truy xuất bảng EMP lệnh DML sử dụng lúc đầu Câu lệnh sau yêu cầu hiển thị tất Department có bảng Tuy nhiên, cho dù log on vào account ta thấy Department có deptno 10 không xuất kết câu truy vấn, sách RLS tự động lọc record Bên cạnh đó, kết trả bình thường nên user thực câu lệnh khơng biết bị ảnh hưởng sách RLS sec_mgr> SELECT DISTINCT deptno FROM scott.emp; DEPTNO -20 30 scott> SELECT DISTINCT deptno FROM emp; DEPTNO -20 30 BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM Lab 04 Bảo Mật Hệ Thống Thông Tin – 2013  Virtual Private Database (1) Một ưu điểm RLS ta thay đổi nội dung sách bảo mật cách viết lại function thực sách mà khơng cần phải đăng ký lại sách cho đồi tượng cần bảo vệ Để thấy ưu điểm này, ta trở lại với ví dụ trên, thay đổi nội dung function no_dept10: sec_mgr> CREATE OR REPLACE FUNCTION no_dept10 ( p_schema IN VARCHAR2, p_object IN VARCHAR2) RETURN VARCHAR2 AS BEGIN RETURN 'USER != ''SCOTT'''; END; /  Chính sách vừa sửa đổi quy định không cho người dùng SCOTT truy xuất nội dung bảng bảo vệ (USER chuỗi hàm Oracle trả tên người dùng session đó) Ta kiểm tra lại xem việc áp dụng sách thay đổi chưa cách log on vào hệ thống account SEC_MGR, SCOTT truy xuất bảng EMP: sec_mgr> SELECT COUNT(*) Total_Records FROM scott.emp; TOTAL_RECORDS 14 scott> SELECT COUNT(*) Total_Records FROM emp; TOTAL_RECORDS Kiểm tra nội dung chuỗi trả  Sau tạo policy function, muốn ta kiểm tra chuỗi trả function vừa tạo cách thực câu lệnh sau: sec_mgr> col predicate format a50; sec_mgr> SELECT no_dept10('SCOTT','EMP') predicate FROM DUAL; BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM Lab 04 Bảo Mật Hệ Thống Thông Tin – 2013 Virtual Private Database (1) PREDICATE -USER != 'SCOTT'  Nếu câu lệnh tạo policy function ta quy định tham số có giá trị mặc định null câu lệnh để kiểm tra chuỗi trả vừa nêu viết ngắn gọn lại: sec_mgr> CREATE OR REPLACE FUNCTION no_dept10 ( p_schema IN VARCHAR2 DEFAULT NULL, p_object IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 AS BEGIN RETURN 'USER != ''SCOTT'''; END; / Function created sec_mgr> col predicate format a50; sec_mgr> SELECT no_dept10 predicate FROM DUAL; PREDICATE -USER != 'SCOTT' Tham số STATEMENT_TYPES  Giả sử ta có sách bảo mật quy định user insert update dòng liệu Department có deptno < 30 Khi ta dùng tham số statement_types để quy định loại câu lệnh áp dụng sách bảo mật Nếu không đề cập đến tham số này, mặc định sách áp dụng cho tất loại câu lệnh Policy function thực sau: sec_mgr> CREATE OR REPLACE FUNCTION dept_less_30 ( p_schema IN VARCHAR2 DEFAULT NULL, p_object IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM Lab 04 Bảo Mật Hệ Thống Thông Tin – 2013 Virtual Private Database (1) AS BEGIN RETURN 'deptno < 30'; END; / sec_mgr> BEGIN DBMS_RLS.add_policy (object_schema => 'SCOTT', object_name => 'EMP', policy_name => 'EMP_IU', function_schema => 'SEC_MGR', policy_function => 'dept_less_30', statement_types => 'INSERT,UPDATE'); END; /  Ta kiểm tra việc áp dụng sách bảo mật Đầu tiên ta SELECT bảng EMP số record, ta nhận thấy ràng buộc ‘deptno < 30’ không ảnh hưởng câu lệnh SELECT: scott> SELECT ename, deptno FROM emp ENAME WHERE ename < 'F'; DEPTNO -ALLEN BLAKE 30 CLARK 10 ADAMS  30 20 Tuy nhiên ta update bảng EMP, sách bảo mật áp dụng Trong ví dụ bên dưới, ALLEN có deptno = 30 Khi thực thi, Oracle nối thêm điều kiện ‘deptno < 30’ với điều kiện ename = ‘ALLEN’ câu lệnh Update kết khơng tìm thấy hàng thỏa đồng thời điều kiện, khơng có hàng update, khơng thơng báo lỗi Nhờ vậy, sách RLS BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM Lab 04 Bảo Mật Hệ Thống Thông Tin – 2013 Virtual Private Database (1) áp dụng cách suốt người dùng scott> UPDATE emp SET deptno = 10 WHERE ename = 'ALLEN'; rows updated Tham số UPDATE_CHECK  Ở ví dụ sau, giá trị update 30, vi phạm sách tạo mục 3, update Đó Oracle kiểm tra điều kiện sách với giá trị trước update/insert, không quan tâm giá trị sau update/insert Việc làm tính suốt việc áp dụng sách user SELECT lại bảng UPDATE không thấy giá trị vừa update scott> UPDATE emp SET deptno = 30 WHERE ename = 'ADAMS'; row updated  Việc Oracle có kiểm tra lại giá trị sau insert/update hay không phụ thuộc vào tham số update_check Đây tham số tùy chọn cho loại lệnh INSERT UPDATE Nó có giá trị mặc định FALSE Nếu update_check có giá trị TRUE, sau câu lệnh SQL chỉnh sửa theo điều kiện sách bảo mật thực thi, Oracle thực việc kiểm tra lại giá trị vừa UPDATE/INSERT xem có vi phạm sách bảo mật khơng Nếu có vi phạm việc thực thi câu lệnh SQL thất bại thơng báo lỗi xuất Điều thấy rõ phần Trước tiên ta tạo lại sách khác với tùy chọn tham số update_check có giá trị TRUE: sec_mgr> BEGIN DBMS_RLS.add_policy (object_schema => 'SCOTT', object_name => 'EMP', policy_name => 'EMP_IU_edit', function_schema => 'SEC_MGR', policy_function => 'dept_less_30', statement_types => 'INSERT,UPDATE', update_check => TRUE); END; / BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM Lab 04 Bảo Mật Hệ Thống Thông Tin – 2013  Virtual Private Database (1) Tiếp theo ta update bảng EMP deptno CLARK: scott> UPDATE emp SET deptno = 30 WHERE ename = 'CLARK'; update emp * ERROR at line 1: ORA-28115: policy with check option violation Trong câu lệnh trên, Oracle tìm hàng thỏa điều kiện ename = 'CLARK' điều kiện sách bảo mật deptno < 30 nên đủ điều kiện để thực lệnh update Nhưng ta thiết lập tham số update_check = TRUE nên Oracle kiểm tra giá trị kết việc update nhận thấy giá trị sau update vi phạm sách bảo mật deptno < 30 (câu lệnh thay đổi giá trị deptno từ 10 thành 30) Do có vi phạm nên câu lệnh update bị thất bại có thơng báo lỗi xuất  Ta kiểm tra tiếp trường hợp ta INSERT vào bảng EMP: scott> INSERT INTO emp (empno, ename, deptno) VALUES (20,'KNOX',10); row created scott> INSERT INTO emp (empno, ename, deptno) VALUES (21,'ELLISON',30); insert into emp (empno, ename, deptno) * ERROR at line 1: ORA-28115: policy with check option violation Tương tự trường hợp ta kiểm tra với lệnh Update, tác vụ insert record có deptno >= 30 bị thất bại sinh lỗi Tác vụ thất bại vi phạm policy function ta thiết lập UPDATE_CHECK=TRUE gọi thủ tục ADD_POLICY Nếu ta không thiết lập TRUE, việc insert thành cơng (nghĩa có thêm dịng có deptno = 30 tạo ra) Kỹ thuật ngăn truy xuất tất hàng  Một cách hiệu để ngăn không cho hàng bị truy BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM 10 Lab 04 Bảo Mật Hệ Thống Thông Tin – 2013 Virtual Private Database (1) xuất phương pháp RLS tạo policy function có chuỗi trả chứa điều kiện khơng xảy (ví dụ: chuỗi “1 = 0”) Cần lưu ý trả chuỗi null chuỗi có độ dài cho kết ngược lại: tất record phép truy xuất  Sẽ có lợi ta tạo policy function có tác dụng ngăn chặn tất record Mỗi cần khóa lại bảng cách nhanh chóng ta sử dụng nó: sec_mgr> CREATE OR REPLACE FUNCTION no_records ( p_schema IN VARCHAR2 DEFAULT NULL, p_object IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 AS BEGIN RETURN '1=0'; END; / Function created  Đây cách giúp ta biến bảng thành bảng phép đọc (Read Only table) Ta cần đăng ký policy function cho bảng với lựa chọn áp dụng cho câu lệnh INSERT, UPDATE, DELETE: sec_mgr> BEGIN DBMS_RLS.add_policy (object_schema => 'SCOTT', object_name => 'EMP', policy_name => 'PEOPLE_RO_IUD', function_schema => 'SEC_MGR', policy_function => 'No_Records', statement_types => 'INSERT,UPDATE,DELETE', update_check => TRUE); END; / BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM 11 Lab 04 Bảo Mật Hệ Thống Thông Tin – 2013  Virtual Private Database (1) Kiểm tra lại việc áp dụng sách bảo mật trên: scott> SELECT COUNT (*) FROM emp; COUNT(*) -14 scott> UPDATE emp SET ename = NULL; rows updated - Không thể update record scott> DELETE FROM emp; rows deleted Không thể delete record scott> Không thể insert thêm record scott> INSERT INTO emp (empno,ename) VALUES (25,'KNOX'); INSERT INTO emp (empno,ename) VALUES (25,'KNOX') * ERROR at line 1: ORA-28115: policy with check option violation Xóa sách bảo mật  Để xóa bỏ sách bảo mật, ta dùng thủ tục DROP_POLICY package DBMS_RLS Ví dụ: sec_mgr> BEGIN DBMS_RLS.drop_policy (object_schema => 'SCOTT', object_name => 'EMP', policy_name => 'PEOPLE_RO_IUD'); END; /  Lưu ý đoạn lệnh xóa bỏ sách bảo mật, khơng xóa hàm dùng cho sách (policy function) BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM 12 Lab 04 Bảo Mật Hệ Thống Thông Tin – 2013 Virtual Private Database (1) III Bài tập Tạo cấu trúc bảng sau: EMPHOLIDAY ( EmpNo NUMBER (5), Name VARCHAR2 (60), Holiday DATE) EmpNo Name Han Holiday 2/1/2010 An 12/5/2010 Thu 26/8/2009 Xây dựng policy HolidayControl cho trường hợp sau đây: An xem chỉnh sửa thông tin cá nhân riêng Thu khơng xem hay chỉnh sửa thông tin Han quyền xem tất thông tin chỉnh sửa (Insert, Update, Delete) Holiday mà ngày lớn hay ngày (không chỉnh sửa ngày khứ) Ghi chú: 1/ Giả thiết trường Name có liệu phân biệt tương ứng với Username account hệ thống 2/ Schema chứa đối tượng cần bảo vệ SCOTT 3/ Schema chứa policy function sử dụng SEC_MGR BM Hệ Thống Thông Tin – Khoa KH & KTMT – ĐH Bách Khoa HCM 13 Lab 04 ... – 2 013 Virtual Private Database (1) mức dòng liệu Oracle, nên người ta thường dùng thuật ngữ Row-level security (RLS) để thay cho Fine-grained access control Virtual Private Database II Row-level... 2 013 Virtual Private Database (1) B Thực hành Tạo sách bảo mật RLS  Ta có bảng EMP thuộc schema user SCOTT với nội dung sau: sec_mgr> SELECT DISTINCT deptno FROM scott.emp; DEPTNO -2 0 30 10 ... Thông Tin – 2 013  Virtual Private Database (1) Tiếp theo ta update bảng EMP deptno CLARK: scott> UPDATE emp SET deptno = 30 WHERE ename = ''CLARK''; update emp * ERROR at line 1: ORA-2 811 5: policy

Ngày đăng: 08/05/2014, 16:16

TỪ KHÓA LIÊN QUAN

w