26 lines
1.2 KiB
Markdown
26 lines
1.2 KiB
Markdown
# 함수 명세: `withDdsEndUserContext` (#617)
|
|
|
|
> **상태**: Implemented · 구현: `DdsMcpContextExecutor`
|
|
|
|
## 책임
|
|
|
|
한 Tool DB 작업을 정확히 하나의 local DDS END USER Context 안에서 실행하고 항상 해제한다.
|
|
|
|
## 알고리즘
|
|
|
|
1. 게시된 DDS principal을 확인한다.
|
|
2. OCI IAM database-access token을 얻고 공용 풀에서 연결을 획득한다.
|
|
3. `EndUserSecurityContext.createWithName(databaseAccessToken, endUserName, lookupKey)`를 만든다.
|
|
4. `setEndUserSecurityContext` 후 보호 SQL을 실행한다.
|
|
5. `finally`에서 `clearEndUserSecurityContext` 후 연결을 반환한다. clear 실패 연결은 폐기한다.
|
|
|
|
## 불변식
|
|
|
|
- local username+lookup-key Context에는 `withDataRoles(...)`를 전달하지 않는다.
|
|
- local END USER에 미리 `GRANT DATA ROLE`된 공통 runtime 역할과 Object별 `DATA GRANT`만 적용한다. 사용자별 권한 판단은 Data Grant predicate가 권한 테이블에서 수행한다.
|
|
- 연결 풀 재사용 시에도 이전 사용자 Context가 남지 않아야 한다.
|
|
|
|
## 실증
|
|
|
|
실제 ADB에서 local END USER attach, 보호 벡터 query 3행, context clear까지 완료했다. 동시 사용자 isolation regression은 후속 자동화 대상이다.
|