policy_05_1412107 - ATBMHTTT-2017/lab01-1412107 GitHub Wiki
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;
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;
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
);
Đă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