1.5 KiB
1.5 KiB
함수 명세: withDdsEndUserContext (#617)
상태: Draft · 분류: 복잡 — 연결 풀 보안 경계
책임
한 DB 작업을 정확히 하나의 local DDS END USER Context 안에서 실행하고, 어떤 종료 경로에서도 Context를 해제한다.
시그니처
(DdsPrincipal, SqlWork<T>) -> T
입력
DdsPrincipal: 게시된 DDS END USER 이름, lookup key 참조, 사용자 ID, 게시 version.SqlWork<T>: 보호 객체를 읽거나 쓰는 제한된 Tool DB 작업.
알고리즘
DdsPrincipal이 활성·게시 완료 상태인지 확인한다.- 공용 연결을 획득하고 서비스 database-access token을 얻는다.
- local END USER 이름과 lookup key로 DDS Context를 부착한다.
SqlWork를 실행한다. Repository는 Context 설정/해제를 직접 호출할 수 없다.- 성공·실패·취소·시간초과와 무관하게
finally에서 Context를 해제한다. - 해제 실패는 연결을 풀에 반환하지 않고 폐기한다.
보안 불변식
- 하나의 Tool DB 작업에는 하나의 DDS END USER만 존재한다.
- 이전 Tool의 Context가 다음 Tool에 남아서는 안 된다.
- Context 부착 이전과 해제 이후에는 보호 SQL을 실행하지 않는다.
- local END USER의 DATA ROLE은 payload로 임의 추가하지 않고, 게시된 DDS DDL에서만 얻는다.
스파이크 확인
동일 풀 연결에서 사용자 A → B → A와 동시 요청을 실행해 ORA_END_USER_CONTEXT.username, 행, 컬럼이 각각 맞는지 확인한다.