문서유형ㅣ장애해결
분야ㅣ App개발
적용제품버전ㅣ 6FS07, 7FS02
문서번호ㅣTDETS001
현상
테이블 조회 권한이 있음에도 테이블 조회 실패하는 현상에 대해 안내합니다.
테이블 조회 불가 현상 확인
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
/
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
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
원인
parsing 중 접근할 수 없는 object가 존재하여 parsing 실패하였으며 이로 인해 select 구문이 실행되지 않습니다.
해결
조회권한 부여함으로써 parsing을 성공합니다.
MOB_APU가 COM.FN_CSYS_DECODE를 실행 할 수 있도록 권한 부여 SQL> GRANT EXECUTE ON COM.FN_CSYS_DECODE TO MOB_APU;