Oracle 의 AUTHID CURRENTUSER 용법 상세 설명
2087 단어 current
여기에 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) 권한 으로 실행 하면 문제 가 없습니다.