현상
테이블 조회 권한이 있음에도 테이블 조회 실패하는 현상에 대해 안내합니다.
테이블 조회 불가 현상 확인
GRANT SELECT, INSERT, UPDATE, DELETE ON RES.RRMS001 TO MOB_APU; 부여 하였으나 조회 실패
MOB_APU 계정에서 SELECT * FROM RES.RRMS001; 조회불가 현상 입니다.
1.
RES.RRMS001 테이블의 INDEX 중 IDX_IF4_RRMS001가 FBI(FUNCTION-BASED) 로 구성되어 있습니다.
CREATE INDEX "IDX_IF4_RRMS001" ON "RRMS001" (
"COM"."FN_CSYS_DECODE"("RRNO",'RRNO')
)
LOGGING
TABLESPACE "TS_RES"
NOPARALLEL
PCTFREE 10
INITRANS 2
/
SQL
복사
2.
COM.FN_CSYS_DECODE 사용권한을 조회 -> MOB_APU계정에 해당 FUNCTION에 대한 EXECUTE 권한이 빠져있습니다.
SQL> select grantee, owner, table_name, privilege
from dba_tab_privs
where table_name = 'FN_CSYS_DECODE'
;
GRANTEE OWNER TABLE_NAME PRIVILEGE
---------- --------- --------------- -------------------------
ILK COM FN_CSYS_DECODE EXECUTE
ILK_KEP COM FN_CSYS_DECODE EXECUTE
ELK_RIPS COM FN_CSYS_DECODE EXECUTE
ELK_EFNNC COM FN_CSYS_DECODE EXECUTE
ELK_WRCARD COM FN_CSYS_DECODE EXECUTE
RESNOTE_SOL COM FN_CSYS_DECODE EXECUTE
ADM COM FN_CSYS_DECODE EXECUTE
RES COM FN_CSYS_DECODE EXECUTE
MIG COM FN_CSYS_DECODE EXECUTE
ILK_RSERCH COM FN_CSYS_DECODE EXECUTE
ILK_CCRF COM FN_CSYS_DECODE EXECUTE
SQL
복사
3.
MOB_APU유저로 SELECT * FROM RES.RRMS001; 구문에 대한 콜스택 확인 결과 sql_hardparsing 부분에서 문제가 발생합니다.
권한 체크 중 MOB_APU유저에서 접근할 수 없는 OBJECT가 존재하여 PARSING에 실패한 것으로 확인됩니다.
#19 0x00000000005ddaf2 in sql_hardparsing (alloc=0x7fc8080111d0, sql=0x7fc81e11a3d8 "select * from RES.RRMS001 where rownum <=5", pp_sql=0x7fc81e11a3d8 "select * from RES.RRMS001 where rownum <=5", psm_params=0x7fc81b4e92c0, csr=0x7fcd3d10b2c0, ecs_ctx=0x7fc81b4e8d20, dd_lock_acquired=0x7fc81b4e8fdb "\001", rc=0x7fc81b4e9008, pp=0x7fc81b4e9128) at /data/autodist/TLeft_261783/tibero6/src/tbsvr/body/tbsvr_sql_process.c:1728
#20 0x00000000005e1441 in tbsvr_sql_process (alloc=0x7fc8080111d0, sql=0x7fc81e11a3d8 "select * from RES.RRMS001 where rownum <=5", ppid=0, sql_state=0x7fc81b4e9120, prepared_ddl=0x7fc81b4e9127 "", csr=0x7fc81b4e9300, pp=0x7fc81b4e9128, psm_params=0x7fc81b4e92c0, only_csr_generate=0 '\000') at /data/autodist/TLeft_261783/tibero6/src/tbsvr/body/tbsvr_sql_process.c:338
SQL
복사
원인
parsing 중 접근할 수 없는 object가 존재하여 parsing 실패하였으며 이로 인해 select 구문이 실행되지 않습니다.
해결
조회권한 부여함으로써 parsing을 성공합니다.
MOB_APU가 COM.FN_CSYS_DECODE를 실행 할 수 있도록 권한 부여
SQL> GRANT EXECUTE ON COM.FN_CSYS_DECODE TO MOB_APU;
SQL
복사