고객사 지원 시, DB2 계정 정책은 DB 레벨에서 설정한다.
설치 작업만 하는 경우는 대부분 고객사에서 인스턴스 계정으로 업무용으로도 사용하는 것 같고, 프로젝트 업무를 지원하게 되면 테이블 공간까지 정의를 하면서 계정 정책을 수립하게 된다.
보통은 DBADM 권한을 부여해서 사용하기에 크게 문제가 되지 않았는데, DBADM 권한을 주지 않고 더 약한 권한을 주는 경우 다음과 같은 문제를 겪을 수 있다.
필자의 경우는 V10.1 에서 겪은 문제이나, 그 이하 버전에서도 접할 가능성이 있어 보인다.
계정 생성
| db2 “grant CONNECT,DATAACCESS on database to USER db2user” |
테이블 조회
| db2 connect to sample user db2user using db2user db2 "select count(1) from 스키마명.employee" SQL5193N The current session user does not have usage privilege on any enabled workloads. SQLSTATE=42524 |
(참고) 본 테스트는 약간 시나리오가 인위적으로 구성되어서 테스트해본다면 재현되지 않을 수 있다.
위 문제로 해당 테이블에 테이블 레벨 권한을 부여(INDEX,INSERT,SELECT,UPDATE,DELETE) 했으나 동일한 메시지가 반환되었다.
문제는 DB2가 기본적으로 제공하는 Workload 때문이였다.
아래처럼 2개의 workload가 DB가 생성되는 시점에 생성된다. Admin용 워크로드와, User용 워크로드…
| db2 "select substr(workloadname,1,30) wlname from syscat.workloads" WLNAME |
| db2 "select substr(a.workloadname,1,30) wlname,substr(b.grantor,1,20) grantor, substr(b.grantee,1,20) grantee, b.granteetype,usageauth from syscat.workloads a, syscat.workloadauth b where a.workloadid=b.workloadid" WLNAME GRANTOR GRANTEE GRANTEETYPE USAGEAUTH |
문제가 난 시점에는 위 script를 조회하지 않아 정확히 설정된 값이 어떻게 되어 있는지 모르지만, 예측하기로는 SysDefaultUserWorkload의 GRANTEE가 PUBLIC 으로 되어 있지 않았을 것 같다.
(V9.1 부터 제공되는 DB 생성시 restrictive 옵션과 V9.5에서 제공된 Default Workload 영향으로 위 값는 상황에 따라 다를 수 있을 것 같다. 위 문제가 발생한 DB는 restrictive 옵션을 주면서 DB를 생성하였다.)
V9.7 정보센터의 내용을 살펴보니 다음과 같이 정의되어 있다.
기본 사용자 워크로드 : DB 서버에 접속 시 모든 접속에 대해 적용되는 워크로드
기본 관리자 워크로드 : 관리작업을 수행할 때 허용하게 할지 말지를 결정하는 워크로드
그래서 위의 문제는 다음과 같이 권한 부여를 하여 정상 실행됨을 확인하였다.
| db2 “grant usage on workload sysdefaultuserworkload to user db2user” |
| db2 connect to sample user db2user using db2user db2 "select count(1) from db2inst1.employee" 1 1 record(s) selected. |
'Troubleshooting' 카테고리의 다른 글
| [일반] 64-bit Module Load 관련 오류 메시지 (0) | 2012.12.20 |
|---|---|
| [SQL] SQL0444N Reason code 4 (built in function) (0) | 2012.12.17 |
| [이중화] SQL1517N (pureScale:db2cluster) (0) | 2012.06.25 |
| [이중화] ECF=0x90000542 (HADR:db2haicu) (0) | 2011.11.21 |
| [이중화] ECF=0x90000557=-1879046825=ECF_SQLHA_CLUSTER_ERROR (HADR:db2haicu) (0) | 2011.10.19 |