현상
A 유저가 B 유저의 테이블 등에 대해 SELECT 또는 DML 권한을 부여받았음에도 불구하고, 해당 테이블을 참조하는 Function, Procedure, Package 등을 생성하거나 컴파일할 경우 TBR-8033: Specified schema object was not found. 에러가 발생하며 컴파일에 실패합니다.
SQL> CREATE USER USER1 identified by tibero;
User 'USER1' created.
SQL> CREATE USER USER2 identified by tibero;
User 'USER2' created.
SQL> grant connect,resource,dba to USER1;
Granted.
SQL> conn user1/tibero;
Connected to Tibero.
SQL> create table user2.dummy(a number);
Table 'USER2.DUMMY' created.
SQL> insert into user2.dummy values(1);
1 row inserted.
SQL> commit;
Commit completed.
SQL> select * from user2.dummy;
A
----------
1
1 row selected.
SQL> CREATE OR REPLACE FUNCTION GET_VAL RETURN INT
IS
ret_val number;
BEGIN
select a into ret_val from USER2.DUMMY;
RETURN ret_val;
END;
/
Warning: FUNCTION created with compilation errors.
SQL> show err
Errors for Function USER1.GET_VAL:
ERROR DESCRIPTION
---------------------------------------------------------
TBR-8033: Specified schema object was not found.
at line 5, column 30 of null:
select a into ret_val from USER2.DUMMY;
SQL> exit
SQL
복사
원인
객체를 컴파일할 때는 롤을 통해 부여 받은 권한은 인식되지 않으며, 반드시 GRANT ... TO ... 형태로 직접 부여된 권한만이 유효한 권한으로 인정됩니다.
따라서 A 유저가 B 유저의 객체에 대해 GRANT ... TO ... 형태로 직접 권한 부여를 받지 않은 경우에 컴파일 시 TBR-8033 오류가 발생하게 됩니다.
해결
컴파일 대상 객체에 대해 직접 GRANT를 통해 권한을 부여해야 합니다.
SQL> CREATE OR REPLACE FUNCTION GET_VAL RETURN INT
IS
ret_val number;
BEGIN
select a into ret_val from USER2.DUMMY;
RETURN ret_val;
END;
/
Warning: FUNCTION created with compilation errors.
SQL> show err
Errors for Function USER1.GET_VAL:
ERROR DESCRIPTION
---------------------------------------------------------
TBR-8033: Specified schema object was not found.
at line 5, column 30 of null:
select a into ret_val from USER2.DUMMY;
SQL> conn sys/tibero
Connected to Tibero.
SQL> grant select on USER2.DUMMY to user1;
Granted.
SQL> conn user1/tibero
Connected to Tibero.
SQL> CREATE OR REPLACE FUNCTION GET_VAL RETURN INT
IS
ret_val number;
BEGIN
select a into ret_val from USER2.DUMMY;
RETURN ret_val;
END;
/
Function 'GET_VAL' created.
SQL
복사