policy_05_1412107 - ATBMHTTT-2017/lab01-1412107 GitHub Wiki

  1. Tạo role ROLE_TRUONGDUAN chứa tất cả các tài khoản là trưởng của các dự án. Thực hiện cấp quyền và gán tới các trưởng dự án như bên dưới.
  • create role ROLE_TRUONGDUAN;
  • grant select, insert, update to ROLE_TRUONGDUAN;
  • grant ROLE_TRUONGDUAN to DANS001TR, DAKH001TR, DADA001TR, DAKD001TR, DATT001TR;
  1. Tạo hàm chính sách FUNCTION_CAPNHAT_CHITIEU trả về vị từ: mã dự án của những dự án mà một trưởng dự án làm trưởng. Khi đăng nhập vào hệ thống, hàm chính sách kiểm tra tài khoản hiện tại có là một trưởng dự án hay không. Nếu không, dừng thực thi, nếu có, cho phép thao tác trên bảng CHITEU.
  • AS
  • USER NVARCHAR2(15);
  • TEMP NVARCHAR2(200);
  • MADA_TRGDA VARCHAR2(15);
  • BEGIN
  • USER := SYS_CONTEXT('USERENV','SESSION_USER');
  • if USER in ('DANS001TR', 'DAKH001TR', 'DADA001TR', 'DAKD001TR', 'DATT001TR') then
  • Select maDA into MADA_TRGDA from sysadmin_lab01.DUAN where truongDA = USER;
  • TEMP := 'duAn = ''' || MADA_TRGDA || '''';
  • RETURN TEMP;
  • else return '';
  • END IF;
  1. Sau đó, ta gán chính sách trên vào bảng CHITIEU. Quan trọng nhất ở đây là: statement_types => 'select, insert, update',
  • dbms_rls.add_policy(
  • object_schema => 'sysadmin_lab01',
  • object_name => 'CHITIEU',
  • policy_name => 'PO5',
  • function_schema => 'sysadmin_lab01',
  • policy_function => 'FUNCTION_CAPNHAT_CHITIEU',
  • statement_types => 'select, insert, update',
  • update_check => TRUE );
  1. Đăng nhập bằng các tài khoản trưởng dự án để kiêm tra chính sách. Chỉ cần đăng nhập 1 account vì các account như nhau. ######--connect as DANS001TR, DAKH001TR, DADA001TR, DAKD001TR, DATT001TR to test
  • select * from sysadmin_lab01.CHITIEU; --select ok
  • update sysadmin_lab01.CHITIEU CHITIEU set CHITIEU.SOTIEN = 15; --update ok
  • insert into sysadmin_lab01.CHITIEU values('CTDANS001002', 'dat chuan cong so nhu tren', 25, 'DANS001'); --insert ok

Như vậy, ta đã thực hiên xong chính sách 5-VPD.