.

141020_데이터베이스보안_VPD(Virtual Private Database) - Context

by 담배맛구마

VPD 시나리오

영업  사원으로 로그인하면 자신이 관리하는 고객의 정보만을 접근할 수 있도록 vpd 정책을 만들어 보자.



영업관리자(SA_MAN)인 사원(JRUSSEL)의 이메일 계정으로 로그인한다.

select * from customers where account_mgr_id = 145; (JRUSSEL의 MANAGER_ID는 145)  



  - VPD 정책 적용 후 아래와 같이 조회해 보면  SELECT * FROM customers; 전체 고객이 아니라 자신이 관리하는 고객만 조회된다.


1-1. 정책 함수를 생성한다.

create or replace function check_salesmgr

    (p_schema varchar2, p_objname varchar2)

     return varchar2

is

     v_id             number;

     v_predicate   varchar2(100);

begin

     select employee_id 

     into v_id

     from hr.employees

     where email  = SYS_CONTEXT ('USERENV', 'SESSION_USER');   

               -- 직무가 영업관리자인 메일 계정(예.  'JRUSSEL' ) 으로 로그인 한다.

  

     v_predicate := 'account_mgr_id = ' || v_id;


     return v_predicate;

end;

===================================================================================================================

create or replace function check_salesmgr

    (p_schema varchar2, p_objname varchar2)

     return varchar2

is

     v_id             number;

     v_job           varchar2(100);

     v_predicate   varchar2(100);

begin

     select employee_id, job_id 

     into v_id, v_job

     from hr.employees

     where email  = SYS_CONTEXT ('USERENV', 'SESSION_USER');   

               -- 직무가 영업관리자인 메일 계정(예.  'JRUSSEL' ) 으로 로그인 한다.

  

     IF v_job LIKE 'MK%' THEN   -- 직무가 마케팅 업무인 경우 

          v_predicate :=  ' 1=1 '; 

     ELSIF v_job = 'SA_MAN' THEN    -- 직무가 영업 관리자인 경우

          v_predicate := 'account_mgr_id = ' || v_id;

     END IF;


     return v_predicate;

end;


1-2. dbms_rls.add_policy 프로시저를 실행한다.

BEGIN

    dbms_rls.add_policy

    (

      object_schema => 'hr', -- 누구스키마

      object_name => 'employees', -- 어떤 테이블?

      policy_name => 'limit_employees', --정책의 이름

      policy_function => 'check_customer', -- 정책을 진술해 줄 함수의 이름

      statement_types =>'select', -- 어떤 상황에서 정책을 적용할 것인가

    );

END;

/


1-3. 영업관리자인 사원의 이메일 계정으로 로그인해서 고객 테이블을 조회한다.








반응형

블로그의 정보

정윤상이다.

담배맛구마

활동하기