정의자 권한 (authid definer)

호출자 권한 (authid current_user)


데모

ocstudy 세션 준비

SQL> create table ocstudy.emp (empno number);

테이블이 생성되었습니다.

SQL> create or replace procedure ocstudy.insert_emp ( p_empno number ) as
begin
  insert into ocstudy.emp (empno) values ( p_empno );
  commit;
end insert_emp;
/  2    3    4    5    6

프로시저가 생성되었습니다.

SQL> create or replace procedure ocstudy.insert_emp_cu ( p_empno number )
authid current_user as
begin
  insert into ocstudy.emp (empno) values ( p_empno );
  commit;
end insert_emp_cu;
/  2    3    4    5    6    7

프로시저가 생성되었습니다.

SQL> create or replace procedure ocstudy.insert_emp_df ( p_empno number )
authid definer as
begin
  insert into ocstudy.emp (empno) values ( p_empno );
  commit;
end insert_emp_df;
/  2    3    4    5    6    7

프로시저가 생성되었습니다.


ocstudy 세션 테스트

SQL> exec ocstudy.insert_emp (1);

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> select * from ocstudy.emp;

     EMPNO
----------
         1

SQL>  exec ocstudy.insert_emp_cu (2);

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL>  select * from ocstudy.emp;

     EMPNO
----------
         1
         2

SQL> exec ocstudy.insert_emp_df (3);

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> select * from ocstudy.emp;

     EMPNO
----------
         1
         2
         3


scott 세션 준비

SQL> grant execute on ocstudy.insert_emp to scott;

권한이 부여되었습니다.

SQL> grant execute on ocstudy.insert_emp_cu to scott;

권한이 부여되었습니다.

SQL> grant execute on ocstudy.insert_emp_df to scott;

권한이 부여되었습니다.

SQL> grant select on ocstudy.emp to scott;

권한이 부여되었습니다.


scott 세션 테스트

SQL> exec ocstudy.insert_emp (10);

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> select * from ocstudy.emp;

     EMPNO
----------
         1
         2
         3
        10

SQL> exec ocstudy.insert_emp_cu (20);
BEGIN ocstudy.insert_emp_cu(20); END;

*
1행에 오류:
ORA-01031: 권한이 불충분합니다
ORA-06512: "OCSTUDY.INSERT_EMP_CU", 줄 4에서
ORA-06512: 줄 1에서


SQL> select * from ocstudy.emp;

     EMPNO
----------
         1
         2
         3
        10

SQL> exec ocstudy.insert_emp_df (30);

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL>  select * from ocstudy.emp;

     EMPNO
----------
         1
         2
         3
        10
        30