Tibero 로 특정 table 을 복사하여 새로운 테이블을 생성하는 프로시저를 만들던 중,
Jdbc 17004 Permission denied 에러가 떴다.
문제는, 그냥 create table을 sql 편집기에서 바로 실행했을때는, 문제없이 table이 생성 되는데,
프로시저 내에서만 권한 오류가 생겼다.
select * user_role_privs 를 해보면 해당 유저는 DBA 권한이 있고,
select * from dba_sys_privs where grantee= 'DBA' 를 해보면 DBA 권한에는 create table 등의 권한이 이미 있는 것을 확인했다.
이미 권한은 충분한 것 같은데도 프로시저내에서 계속 권한 오류가 발생.
그 원인은 간접권한 과 직접권한의 차이에 있었다.
직접 권한 vs 간접 권한 비교
부여 대상 | 사용자에게 직접 부여 | ROLE을 통해 사용자에게 부여 |
권한 관리 | 사용자가 많으면 관리 어려움 | ROLE을 통해 중앙에서 일괄 관리 가능 |
부여 방식 | GRANT 권한 TO 사용자; | GRANT 권한 TO ROLE; + GRANT ROLE TO 사용자; |
확인 방법 | DBA_SYS_PRIVS, DBA_TAB_PRIVS 조회 | DBA_ROLE_PRIVS를 추가로 조회 필요 |
Tibero 프로시저는 해당 유저의 직접권한만을 조회하여 실행하는데, 그러다보니, role로 부여된 간접권한은 조회되지않아, 권한 부족 에러가 떴던 것이었다.
select * from user_sys_privs; 를 하면 현재 유저의 직접권한 조회가 가능하다.
만약 여기에 create table 권한이 없다면, 다른 DBA 유저로 로그인하여 create table 권한을 부여하고,
프로시저를 실행하면 문제없이 실행되는 것을 확인하였다.
'DATA' 카테고리의 다른 글
[Tibero]tibero 데이터파일 이동(tbexport & tbimport) (0) | 2025.03.24 |
---|---|
[Tibero] 스케줄러 JOB 생성 및 변경 한번에 정리 (0) | 2025.03.17 |
인터페이스 테이블의 개념정리 및 사용이유 (0) | 2025.01.06 |