Oracle 의 AUTHID CURRENTUSER 용법 상세 설명

2087 단어 current
AUTHID CURRENT 없 음USER 는 정의 자 권한 (definer rights) 을 표시 하고 정의 자 신분 으로 실행 합 니 다.
여기에 AUTHID CURRENTUSER 는 호출 자 권한 (invoker rights) 을 표시 하여 호출 자 신분 으로 실행 합 니 다.
 
다음은 하나의 예 로 이들 의 차 이 를 설명 한다.
1. 두 사용자 만 들 기: cux, apps
2. cux 아래 표 만 들 기: cuxauthid_current_user_table
CREATE TABLE cux.cux_authid_current_user_table(ID NUMBER,NAME VARCHAR2(20));

 
3. cux 에서 다음 두 개의 procedure 를 만 듭 니 다.
 
3.1 cux_no_authid_pkg:
CREATE OR REPLACE PROCEDURE cux_no_authid_pkg(p_id   IN NUMBER,
                                              p_name IN VARCHAR2) IS
BEGIN
  INSERT INTO cux_authid_current_user_table (id, NAME) VALUES (p_id, p_name);
END cux_no_authid_pkg;

 
3.2 cux_has_authid_pkg:
 
CREATE OR REPLACE PROCEDURE cux_has_authid_pkg(p_id   IN NUMBER,
                                               p_name IN VARCHAR2) AUTHID CURRENT_USER IS
BEGIN
  INSERT INTO cux_authid_current_user_table (id, NAME) VALUES (p_id, p_name);
END cux_has_authid_pkg;

 
4. 두 procedure 의 실행 권한 (EXECUTE) 을 xxgl 에 부여 합 니 다.
SQL> GRANT EXECUTE ON cux_no_authid_pkg TO apps; 
Grant succeeded 
SQL> GRANT EXECUTE ON cux_has_authid_pkg TO apps; 
Grant succeeded

 
5. apps 에서 각각 cux 아래 의 두 개의 procedure 를 호출 하여 결 과 를 봅 니 다.
 
SQL> BEGIN cux.cux_no_authid_pkg(1,'test01');  END;  
PL/SQL procedure successfully completed 
SQL> BEGIN cux.cux_has_authid_pkg(2,'test02'); END; 
ORA-00942: table or view does not exist 
ORA-06512: at "CUX.CUX_HAS_AUTHID_PKG", line 7 
ORA-06512: at line 1

 
apps 사용자 아래 에 cux 라 는 이름 을 만 들 지 않 았 기 때 문 입 니 다.authid_current_user_table 의 표 입 니 다. 그래서 apps 사용자 에서 호출 자 (apps) 권한 으로 cux. cux 를 실행 할 때has_authid_pkg 이 procedure 는 (ORA - 00942) 의 오 류 를 찾 을 수 없습니다.정의 자 (cux) 권한 으로 실행 하면 문제 가 없습니다.

좋은 웹페이지 즐겨찾기