현상
DBA 권한을 가진 유저로 다른 유저의 오브젝트를 조회하는 PROCEDURE 혹은 FUNCTION 생성 시 TBR-8033: Specified schema object was not found가 발생하는 현상입니다.
참고
일반적으로 DBA 권한을 가진 유저는 다른 유저의 오브젝트를 조회할 수 있으나, PROCEDURE나 FUNCTION 등의 수행 환경에서는 특정 권한 없이는 접근이 불가합니다.
현상 재현
프로시저 생성
vi proc.sql
CREATE OR REPLACE PROCEDURE SELECT_PROC_01
IS
CURSOR cSor IS
SELECT a, b FROM TEST.tbl_01;
AAA number ;
BBB VARCHAR2(30);
BEGIN
OPEN cSor;
LOOP
FETCH cSor INTO AAA, BBB;
EXIT WHEN cSor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(AAA || chr(9) || BBB);
END LOOP;
CLOSE cSor;
END
;
/
SQL
복사
DBA 권한 부여
SQL> select * from user_role_privs;
GRANTEE GRANTED_RO ADMIN_OPTION DEFAULT_ROLE
------- ---------- ------------ ------------
TIBERO DBA NO YES
TIBERO CONNECT YES YES
TIBERO RESOURCE YES YES
SQL
복사
프로시저 생성 시도 - 오류 발생
SQL> @proc
Warning: PROCEDURE created with compilation errors.
SQL> show errors;
Errors for Procedure TIBERO.SELECT_PROC_01:
ERROR DESCRIPTION
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
TBR-8033: Specified schema object was not found.
at line 4, column 27 of null:
SELECT a, b FROM TEST.tbl_01;
SQL
복사
원인
Tibero 5 SP1까지는 DBA Role만으로도 수행이 가능했으나, Tibero 6부터는 DBA Role만으로는 일부 작업이 제한됩니다.
이는 Role 기반 권한이 PSM(Procedural Stored Module) 컴파일 또는 실행 시점에는 적용되지 않기 때문입니다. DBA Role에 의해 부여된 SELECT ANY TABLE 같은 권한은 다이렉트 SQL 세션에서는 동작하지만, PSM 내에서는 Role 기반 권한이 아니라 direct privilege (예: GRANT SELECT ON USER_B.TABLE_X TO USER_A)가 필요합니다.
해결
해당 테이블에 대한 SELECT 권한을 부여하여 해결할 수 있습니다
CONN sys/tibero
GRANT SELECT ON TEST.TBL_01 TO TIBERO;
CONN tibero/tmax
@proc
Procedure 'SELECT_PROC_01' created.
SQL
복사