이펙티브 오라클 (2009년)
호출자 권한 이용하기 0 0 60,222

by 구루비스터디 authid PLSQL [2018.05.26]


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

"구루비 데이터베이스 스터디모임" 에서 2009년에 "이펙티브 오라클" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3507

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입