by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

호출자 권한 이용하기

Version 2 by 오화균
on 12월 11, 2009 21:31.


 
compared with
Current by study.gurubee
on 7월 15, 2019 12:28.


 
Key
These lines were removed. This word was removed.
These lines were added. This word was added.

View page history


There are 6 changes. View first change.

 h2. 정의자 권한 (authid definer)
 h2. 호출자 권한 (authid current_user)
  h4. 정의자 권한 (authid definer)
 h4. 호출자 권한 (authid current_user)
  
 \\
\\
 \\
 h2. 데모
 |단계|ocstudy 세션|scott 세션|비고|
 |준비|{code:sql}
   
 h4. 데모
  
 h6. ocstudy 세션 준비
  
 {code:sql}
 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
  
 프로시저가 생성되었습니다.
{code}| | |
 |ocstudy 세션 테스트|{code:sql}
  {code}
  
 \\
  
 h6. ocstudy 세션 테스트
  
 {code:sql}
 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
{code}| | |
 |준비|{code:sql}
  {code}
  
 \\
  
 h6. scott 세션 준비
  
 {code:sql}
 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;
  
 권한이 부여되었습니다.
{code}| | |
 |scott 세션 테스트| |{code:sql}
  {code}
  
 \\
  
 h6. scott 세션 테스트
  
 {code:sql}
 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
 {code}| |
  {code}