정의자 권한 (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