심층 데이터 보안
Oracle Agent Memory는 Oracle Deep Data Security(Deep Sec)와 통합되어 Oracle AI Database 내에서 최종 사용자 인증을 적용합니다. Deep Sec는 보안 기능입니다. 데이터 역할, 데이터 권한 부여 및 최종 사용자 보안 컨텍스트에 따라 요청이 읽거나 수정할 수 있는 관리 메모리 행이 결정됩니다.
중요: 이 페이지의 API를 보안 관리 및 요청 보안 인터페이스로 취급합니다. 정책 관리, 관리 스키마 소유권 및 런타임 연결 풀링에 별도의 데이터베이스 ID를 사용합니다. 런타임 풀 계정에는 보호된 에이전트 메모리 테이블에 대한 폴백 액세스를 제공하는 직접 권한이 없어야 합니다.
Oracle의 딥 데이터 보안 개요에서는 데이터베이스 권한 부여 모델에 대해 설명합니다. 완전한 OCI IAM 배포는 딥 데이터 보안으로 최종 사용자 메모리 격리 적용하기를 참조하세요.
보안 모형
에이전트 메모리 통합은 다음 두 가지 정책을 지원합니다.
| 정책 | 효과적인 액세스 |
|---|---|
UserOwnRowsDeepDataSecurityPolicy |
소유자가 ORA_END_USER_CONTEXT.username와 일치하는 경우에만 사용자 범위의 에이전트 메모리 행을 읽고 씁니다. 메모리 링크 읽기를 수행하려면 지정된 정책에서 끝점 메모리를 모두 읽을 수 있어야 합니다. 링크 쓰기를 수행하려면 끝점 메모리가 모두 해당 사용자에 속해야 합니다. |
GlobalMemoriesDeepDataSecurityPolicy |
user_id가 NULL인 범위가 지정되지 않은 메모리 행을 읽습니다. 이 정책은 쓰기 또는 다른 사용자의 범위가 지정된 메모리에 대한 액세스 권한을 부여하지 않습니다. 활성 정책에서는 두 끝점 메모리를 모두 읽을 수 있을 때 메모리 링크를 노출합니다. 이 정책만 사용할 경우 두 끝점은 모두 전역 메모리여야 하며, 고유 행 정책과 결합할 경우 소유 메모리와 전역 메모리 사이의 링크도 표시됩니다. |
정책 객체는 관리 API에 대해 불투명한 선택입니다. 관리 대상 테이블, 데이터 롤, 데이터 권한 부여 및 SQL 구현은 비공개로 유지되므로 Oracle Agent Memory는 데이터베이스 스키마를 안전하게 발전시킬 수 있습니다. 사용자정의 정책 하위 클래스는 지원되지 않습니다. 위의 두 정책 클래스 중 하나를 사용하십시오.
정책은 owner_schema와 memory_store_id의 조합으로 범위가 지정됩니다. 한 점포에 대한 정책을 생성하거나 지정해도 다른 소유자 스키마의 ID가 동일한 점포를 포함하여 다른 점포에 지정되지 않습니다.
또한 UserOwnRowsDeepDataSecurityPolicy 정책은 열별 쓰기를 제한합니다. 일반 유저는 소유한 행을 삽입할 때 ID 및 소유권 열을 설정할 수 있지만 나중에 이러한 열을 변경할 수는 없습니다. 정책은 다음과 같은 쓰기 표면을 부여합니다.
UserOwnRowsDeepDataSecurityPolicy에 대한 열 레벨 쓰기 권한
| 관리되는 테이블 | 삽입 가능한 열 | 갱신 가능한 컬럼 |
|---|---|---|
| 스레드 | record_id, user_id, agent_id, metadata, runtime_config, runtime_state |
metadata, runtime_config, runtime_state |
| 스레드 요약 | record_id, thread_id, user_id, agent_id, space_id, content, metadata, status |
content, metadata, status |
| 메시지 | record_id, thread_id, user_id, agent_id, message_role, content, timestamp, metadata, expires_at, status |
content, timestamp, metadata, expires_at |
| 문서 | record_id, message_id, thread_id, user_id, agent_id, space_id, document_type, description, blob, timestamp, metadata, document_metadata, expires_at, status |
description, blob, timestamp, metadata, document_metadata, expires_at |
| 메모리 | record_id, thread_id, user_id, agent_id, memory_type, content, timestamp, metadata, expires_at, status |
content, timestamp, metadata, expires_at, status |
| 메모리 링크 | relation_id, source_memory_id, source_memory_user_id, target_memory_id, target_memory_user_id, relation_type, opposite_relation_type, timestamp, metadata |
relation_type, opposite_relation_type, timestamp, metadata |
| 사용자 작업자 프로파일 | actor_id, actor_type, information, metadata, status |
information, metadata |
| 레코드 조각 | 저장소가 벡터를 유지할 때 source_id, source_record_type, source_emb_column, chunk_seq, chunk_text, thread_id, user_id, agent_id, status 및 embedding |
status |
SELECT 및 DELETE는 행 범위로 유지됩니다. chunk_id, created_at 및 order_seq와 같은 생성, 생성 시 및 예약된 열은 위에 명시적으로 나열되지 않는 한 일반 사용자가 삽입하거나 갱신할 수 없습니다. 데이터베이스는 삽입에 대한 행 술어도 검사하므로 user_id를 삽입 가능으로 나열하면 일반 유저가 다른 ID가 소유한 행을 생성할 수 없습니다. UPDATE가 다른 열에 UPDATE를 부여하는 테이블에서 업데이트할 수 없는 열을 대상으로 하는 경우 Deep Sec는 오류를 발생시키지 않고 자동으로 행을 변경하지 않은 상태로 유지할 수 있습니다. 레코드 청크는 status 업데이트만 허용합니다. SDK는 조각 ID, 텍스트 및 포함 값에 대한 변경사항을 삭제 및 삽입 작업으로 바꿉니다. 응용 프로그램은 SDK의 지원되는 돌연변이 방법을 사용해야 하며 직접 SQL 실행만 보호된 값이 변경되었음을 증명하는 것으로 처리해서는 안됩니다.
다음 순서로 관리 API를 사용합니다.
- 관리 대상 에이전트 메모리 저장소를 스키마 소유자로 생성합니다.
- 보안 관리자로
add_deep_data_security_policies()를 호출합니다. - 각 공인 OCI IAM 그룹 또는 로컬 Deep Sec 최종 사용자에 대해
grant_agent_memory_policies()로 전화하십시오. - 런타임 시
OracleMemoryEndUserSecurityContext에서 모든 에이전트 메모리 작업을 래핑합니다. - 더 이상 필요하지 않은 정책을 제거하기 전에 지정을 취소하십시오.
런타임 작업에서 기본 provider="database"와 함께 OracleDBEmbedder를 사용하고 Oracle AI Database에 저장된 모델(일반적으로 ONNX 모델)을 사용하는 경우 위의 정책은 에이전트 메모리 테이블만 권한 부여합니다. IAM 그룹의 매핑된 데이터 역할도 데이터베이스 상주 모델에 대한 액세스 권한이 있어야 합니다. 요청을 제공하기 전에 Deep Sec를 사용하여 데이터베이스 내 임베딩 모델 사용에 설명된 대로 해당 접근을 구성합니다.
OracleDBEmbedder는 DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING를 통해 원격 제공자를 사용할 수도 있습니다. 이 구성은 데이터베이스 상주 모델을 사용하지 않으며 SELECT ON MINING MODEL가 필요하지 않습니다. 원격 제공자의 Oracle 인증서 및 네트워크 액세스를 별도로 구성합니다. 에이전트 메모리 작업은 OracleMemoryEndUserSecurityContext 내에서 계속 실행되어야 합니다.
관리 호출은 반환하기 전에 데이터베이스 변경 사항을 커밋합니다. 기본 역할 및 권한 부여 개념은 Oracle의 데이터 액세스 제어 구성을 참조하십시오.
컨텍스트 사용 검사
SDK는 보호된 애플리케이션 작업이 실행되기 전에 안전하지 않은 조합을 거부합니다.
- Deep Sec 관리 기능은 이미 일반 사용자 보안 컨텍스트를 포함하는 데이터베이스 연결을 거부합니다.
- 스키마 수명 주기 작업에서는 활성 일반 사용자 보안 컨텍스트를 거부합니다. 일반 유저 컨텍스트 없이 스키마 소유자 연결을 사용하여 생성, 검증, 업그레이드 또는 재생성을 수행할 수 있습니다.
- 보호된 런타임 저장소는
SchemaPolicy.NO_CHECK를 사용해야 합니다.OracleMemoryEndUserSecurityContext내에서 저장소를 열고 이후의 모든 저장소 또는 클라이언트 작업을 컨텍스트 범위 내에 유지합니다. 보호된 런타임은 컨텍스트 없이 열리거나 컨텍스트 범위가 종료된 후 런타임 저장소에서 작업이 수행되면RuntimeError가 발생합니다.
이러한 검사는 잘못된 SDK 실행 경로를 진단합니다. Oracle AI Database 데이터 권한 부여는 권한 부여 경계로 유지되며 인증된 일반 사용자가 액세스할 수 있는 행과 열을 계속 결정합니다.
정책
클래스 oracleagentmemory.core.deepsec.DeepDataSecurityPolicy
기준: object
지원되는 Oracle Agent 메모리 심층 데이터 보안 정책을 식별합니다.
정책 객체는 Deep Data Security 관리 함수에 전달되는 불투명 선택 항목입니다. UserOwnRowsDeepDataSecurityPolicy 또는 GlobalMemoriesDeepDataSecurityPolicy를 인스턴스화합니다. 관리 테이블, 데이터 롤, 데이터 권한 부여 및 SQL을 비롯한 정책 구현 세부 정보는 Oracle 에이전트 메모리의 전용(private)으로 유지되며 릴리스 간에 변경될 수 있습니다.
이 클래스는 사용자 정의 정책 확장 포인트가 아닙니다. Oracle Agent Memory에서 제공하는 두 가지 정책 클래스 이외의 하위 클래스는 관리 기능에 의해 거부됩니다.
예제
일반 유저 행과 범위가 지정되지 않은 Global 메모리에 대한 정책 집합을 생성합니다.
policies = [
UserOwnRowsDeepDataSecurityPolicy(),
GlobalMemoriesDeepDataSecurityPolicy(),
]
클래스 oracleagentmemory.core.deepsec.UserOwnRowsDeepDataSecurityPolicy
인증된 일반 유저가 소유한 행에 액세스할 수 있습니다.
이 정책은 사용자 소유 데이터에 대해 행 범위의 SELECT, 열 범위의 INSERT 및 UPDATE 및 행 범위의 DELETE를 부여합니다. 소유권, 레코드 유형, 생성, 생성 시간 및 예약 열은 삽입 후 변경할 수 없습니다. 레코드 조각은 삽입 및 삭제할 수 있지만 SDK에서 전체 행으로 대체하므로 업데이트할 수 없습니다. 또한 이 정책은 런타임 저장소를 초기화하는 데 필요한 레지스트리 읽기를 부여합니다. 메모리 링크 SELECT는 공유 끝점 가시성 규칙을 따르고, 링크 INSERT, UPDATE 및 DELETE는 엔드포인트 메모리를 모두 최종 사용자에게 속해야 합니다.
예제
policy = UserOwnRowsDeepDataSecurityPolicy()
클래스 oracleagentmemory.core.deepsec.GlobalMemoriesDeepDataSecurityPolicy
글로벌 메모리 및 표시되는 메모리 간 링크에 대한 읽기 접근 권한을 부여합니다.
이 정책은 user_id가 NULL인 메모리 행에 대해 SELECT를 부여하고 런타임 저장소를 초기화하는 데 필요한 레지스트리를 읽도록 허용합니다. 메모리 링크 읽기 권한 부여는 지정된 Deep Data Security 정책에 따라 일반 사용자가 두 끝점 메모리를 모두 읽을 수 있는 경우 링크를 노출합니다. 따라서 이 정책만 있으면 두 끝점이 모두 전역 메모리가 되어야 합니다. 자체 행 정책과 결합하면 소유 메모리와 전역 메모리 사이의 링크도 표시됩니다. 다른 사용자의 범위가 지정된 메모리에 대한 쓰기 또는 액세스를 허용하지 않습니다.
예제
policy = GlobalMemoriesDeepDataSecurityPolicy()
주체
지정은 액세스 토큰의 group 사용자정의 클레임에 전달된 OCI IAM 그룹 또는 로컬 Deep Sec 최종 사용자를 대상으로 합니다. Oracle AI Database가 외부 데이터 역할에 매핑하기 전에 OCI IAM 그룹 정보를 사용자정의 청구로 구성해야 합니다. OCI IAM에서 그룹 정보에 대한 사용자정의 클레임 구성을 참조하십시오.
클래스 oracleagentmemory.core.deepsec.Principal
기준: object
에이전트 메모리 정책 지정을 받는 사람을 식별하는 기본 유형입니다.
주체는 grant_agent_memory_policies() 또는 revoke_agent_memory_policies()를 대상으로 하는 보안 ID입니다. 주체는 Deep Data Security 데이터 역할 또는 데이터 권한 부여가 특정 에이전트 메모리 저장소에 대한 액세스 권한을 제어하는 피부여자를 식별합니다. 지원되는 현재 기본 유형은 OCI IAM 그룹 및 로컬 DB 최종 사용자입니다.
OCI IAM 그룹의 경우 OciGroupPrincipal를 사용하고, 데이터베이스 관리 Deep Data Security 최종 사용자의 경우 LocalEndUserPrincipal를 사용합니다. 직접 Principal 인스턴스를 관리 함수에 전달하는 것은 지원되지 않습니다.
클래스 oracleagentmemory.core.deepsec.OciGroupPrincipal
기준: Principal
에이전트 메모리 정책을 수신하는 OCI IAM 그룹을 식별합니다.
- 매개변수: group_name
str– 최종 사용자 액세스 토큰의group사용자정의 클레임에 필요한 OCI IAM 그룹 이름입니다. 이름은 문자로 시작하고 128자 이하의 문자, 숫자, 밑줄, 마침표, 콜론 또는 하이픈을 포함해야 하며 데이터베이스 데이터 롤로 매핑된 그룹과 일치해야 합니다. Oracle AI Database에서 매칭은 대소문자를 구분하지 않습니다.
클래스 oracleagentmemory.core.deepsec.LocalEndUserPrincipal
기준: Principal
정책을 수신하는 로컬 Deep Data Security 일반 사용자를 식별합니다.
- 매개변수: username
str– 로컬 딥 데이터 보안 일반 사용자가 Oracle AI Database에서 생성될 때 제공된 따옴표로 묶이지 않은 사용자 이름입니다. 관리 함수는 이를 대문자로 정규화합니다.
관리
전용 보안 관리 연결을 통해 이러한 기능을 실행합니다. 스키마 간 에이전트 메모리 테이블의 경우 해당 계정에는 CREATE ANY DATA GRANT, DROP ANY DATA GRANT, ADMINISTER ANY DATA GRANT 등의 적용 가능한 Deep Sec 관리 권한과 데이터 롤 생성 및 삭제 권한이 필요합니다. 런타임 풀 계정에 이러한 권한을 부여하지 마십시오.
oracleagentmemory.core.deepsec.add_deep_data_security_policies
에이전트 메모리 정책에 대한 데이터 롤 및 데이터 권한 부여를 생성합니다.
정책은 하나의 owner_schema 및 memory_store_id로 범위가 지정됩니다. 이를 추가하면 보호된 관리 테이블에 대해 필수 Deep Data Security를 적용할 수 있습니다. 정책을 다시 추가하면 에이전트 메모리 관리 데이터 역할이 바뀌고 권한 부여가 현재 정의로 바뀝니다. 반복되는 호출은 멱등 호출입니다. Oracle이 중단되기 전에 정책 DDL의 일부를 커밋하는 경우 동일한 호출을 재시도하면 관리되는 정의가 복구됩니다.
이 함수는 반환하기 전에 연결을 커밋합니다. 스키마 소유자 또는 런타임 응용 프로그램 연결 대신 전용 보안 관리 연결을 사용합니다.
- 매개변수:
- 연결
Any– 데이터 롤을 생성하고, 스키마 간 데이터 권한 부여를 생성하고, 소유자의 관리 테이블에 대한 필수 데이터 권한 부여 적용을 사용으로 설정할 수 있는 권한이 부여된 Oracle AI Database 관리 접속을 엽니다. - owner_schema
str– 관리 에이전트 메모리 테이블을 소유하는 스키마입니다. - memory_store_id
str– 관리 에이전트 메모리 스키마 객체의 이름을 지정하는 데 사용되는 ID입니다. - 정책
list[DeepDataSecurityPolicy]– 만들 수 있는 지원되는 정책입니다. 빈 목록은 정책 변경을 수행하지 않지만 여전히 연결을 커밋합니다.
- 연결
- 발생 값:
- TypeError –
policies에 Oracle Agent Memory에서 제공하는 정책 유형이 아닌 다른 정책 유형이 포함된 경우 - RuntimeError –
connection에 활성 일반 사용자 보안 컨텍스트가 있는 경우 정책 관리는 전용 보안 관리 세션을 사용해야 합니다.
- TypeError –
- 반환 유형: 없음
예제
자체 행 및 전역 메모리 액세스 정책 추가:
add_deep_data_security_policies(
connection,
owner_schema="MY_OWNER_SCHEMA",
memory_store_id="MEMORY",
policies=[
UserOwnRowsDeepDataSecurityPolicy(),
GlobalMemoriesDeepDataSecurityPolicy(),
],
)
oracleagentmemory.core.deepsec.remove_deep_data_security_policies
에이전트 메모리 심층 데이터 보안 정책을 제거합니다.
정책 롤을 삭제하면 데이터 권한 부여 및 로컬 일반 사용자 지정에서도 해당 롤이 제거됩니다. 외부 데이터 권한 부여로 생성된 OCI IAM 지정은 먼저 revoke_agent_memory_policies()를 사용하여 제거해야 합니다. 해당 테이블에 남아 있는 데이터 권한 부여가 없는 경우에만 관리 테이블에 대해 필수 데이터 권한 부여 적용이 사용 안함으로 설정됩니다.
이 함수는 반환하기 전에 연결을 커밋합니다.
- 매개변수:
- 연결
Any– 데이터 역할 및 스키마 간 데이터 권한 부여를 삭제하고 소유자의 관리 테이블에 대한 필수 데이터 권한 부여 적용을 변경할 수 있는 권한이 부여된 Oracle AI Database 관리 연결을 엽니다. - owner_schema
str– 관리 에이전트 메모리 테이블을 소유하는 스키마입니다. - memory_store_id
str– 관리 에이전트 메모리 스키마 객체의 이름을 지정하는 데 사용되는 ID입니다. - 정책
list[DeepDataSecurityPolicy]– 제거할 정책입니다. 이미 부재 중인 정책은 무시됩니다.
- 연결
- 발생 값:
- TypeError –
policies에 Oracle Agent Memory에서 제공하는 정책 유형이 아닌 다른 정책 유형이 포함된 경우 - RuntimeError –
connection에 활성 일반 사용자 보안 컨텍스트가 있는 경우 정책 관리는 전용 보안 관리 세션을 사용해야 합니다.
- TypeError –
- 반환 유형: 없음
예제
자체 행 정책을 제거합니다.
remove_deep_data_security_policies(
connection,
owner_schema="MY_OWNER_SCHEMA",
memory_store_id="MEMORY",
policies=[UserOwnRowsDeepDataSecurityPolicy()],
)
oracleagentmemory.core.deepsec.list_deep_data_security_policies
Oracle AI Database에서 현재 생성된 에이전트 메모리 정책을 나열합니다.
- 매개변수:
- 연결
Any–SYS.DBA_DATA_ROLES에 액세스하여 Oracle AI Database 관리 연결을 엽니다. - owner_schema
str– 관리 에이전트 메모리 테이블을 소유하는 스키마입니다. - memory_store_id
str– 관리 에이전트 메모리 스키마 객체의 이름을 지정하는 데 사용되는 ID입니다.
- 연결
- 반품: 안정적인 순서로 정책을 생성했습니다. 목록이 비어 있으면 에이전트 메모리 정책 롤이 존재하지 않습니다.
- 반환 유형: list[DeepDataSecurityPolicy]
- 라이즈: RuntimeError –
connection에 활성 일반 사용자 보안 컨텍스트가 있는 경우입니다. 정책 관리는 전용 보안 관리 세션을 사용해야 합니다.
예제
구성된 정책 유형 검사:
policies = list_deep_data_security_policies(
connection,
owner_schema="MY_OWNER_SCHEMA",
memory_store_id="MEMORY",
)
[type(policy).__name__ for policy in policies]
['UserOwnRowsDeepDataSecurityPolicy']
oracleagentmemory.core.deepsec.grant_agent_memory_policies
OCI IAM 그룹 또는 로컬 일반 사용자에게 에이전트 메모리 정책을 부여합니다.
OCI IAM 그룹은 외부에서 매핑된 데이터 롤로 표시됩니다. Oracle AI Database는 외부에서 매핑된 데이터 역할이 로컬에서 관리되는 데이터 역할을 수신하도록 허용하지 않으므로 각 정책에 대한 데이터 권한 부여가 매핑된 역할에 직접 연결됩니다.
지정하기 전에 add_deep_data_security_policies()를 사용하여 대상 저장소에 대한 각 정책을 생성합니다. 이 함수는 반환하기 전에 연결을 커밋합니다. 반복되는 호출은 멱등 호출입니다. Oracle이 중단 전에 OCI IAM 할당의 일부를 커밋하는 경우 동일한 호출을 재시도하면 누락된 관리 데이터 권한 부여가 재생성됩니다.
- 매개변수:
- 연결
Any– 매핑된 데이터 롤을 생성하고, 데이터 롤을 부여하고, 스키마 간 데이터 권한 부여를 생성할 수 있는 권한이 부여된 Oracle AI Database 관리 접속을 엽니다. - memory_store_id
str– 관리 에이전트 메모리 스키마 객체의 이름을 지정하는 데 사용되는 ID입니다. - owner_schema
str– 관리 에이전트 메모리 테이블을 소유하는 스키마입니다. - 주요
list[Principal]– OCI IAM 그룹 또는 정책을 수신하는 로컬 딥 데이터 보안 최종 사용자. - 정책
list[DeepDataSecurityPolicy]– 이전에 지정할 에이전트 메모리 정책을 만들었습니다.
- 연결
- 발생 값:
- TypeError – 주체가
OciGroupPrincipal또는LocalEndUserPrincipal가 아니거나policies에 Oracle Agent Memory에서 제공하는 정책 유형이 아닌 다른 정책 유형이 포함된 경우 - ValueError – OCI IAM 그룹 이름이 지원되지 않는 형식을 사용하는 경우
- RuntimeError –
connection에 활성 일반 사용자 보안 컨텍스트가 있는 경우 정책 관리는 전용 보안 관리 세션을 사용해야 합니다.
- TypeError – 주체가
- 반환 유형: 없음
예제
OCI IAM 그룹에 대한 고유 행 액세스 권한 부여:
grant_agent_memory_policies(
connection,
memory_store_id="MEMORY",
owner_schema="MY_OWNER_SCHEMA",
principals=[OciGroupPrincipal("ORACLEAGENTMEMORY_USERS")],
policies=[UserOwnRowsDeepDataSecurityPolicy()],
)
oracleagentmemory.core.deepsec.revoke_agent_memory_policies
OCI IAM 그룹 또는 로컬 일반 사용자로부터 에이전트 메모리 정책을 취소합니다.
기본 자체가 보존됩니다. 특히 OCI IAM 그룹의 외부 매핑된 데이터 롤은 이 저장소 또는 다른 에이전트 메모리 저장소의 지정에 계속 사용할 수 있습니다.
취소는 반환하기 전에 데이터베이스 정책 상태를 변경하고 커밋하므로 이후 보호된 데이터베이스 문은 더 이상 취소된 정책을 수신하지 않습니다. 이는 OCI IAM 그룹에서 사용자를 제거하는 것과는 다릅니다. 이미 실행된 액세스 토큰은 토큰이 만료될 때까지 포함된 그룹 클레임을 유지합니다.
- 매개변수:
- 접속
Any– 데이터 롤을 취소하고 스키마 간 데이터 권한 부여를 삭제할 수 있는 권한이 부여된 Oracle AI Database 관리 접속을 엽니다. - memory_store_id
str– 관리 에이전트 메모리 스키마 객체의 이름을 지정하는 데 사용되는 ID입니다. - owner_schema
str– 관리 에이전트 메모리 테이블을 소유하는 스키마입니다. - 주요
list[Principal]– OCI IAM 그룹 또는 로컬 Deep Data Security 최종 사용자가 정책을 손실합니다. - 정책
list[DeepDataSecurityPolicy]– 취소할 에이전트 메모리 정책입니다. 누락된 지정은 무시됩니다.
- 접속
- 발생 값:
- TypeError – 주체가
OciGroupPrincipal또는LocalEndUserPrincipal가 아니거나policies에 Oracle Agent Memory에서 제공하는 정책 유형이 아닌 다른 정책 유형이 포함된 경우 - ValueError – OCI IAM 그룹 이름이 지원되지 않는 형식을 사용하는 경우
- RuntimeError –
connection에 활성 일반 사용자 보안 컨텍스트가 있는 경우 정책 관리는 전용 보안 관리 세션을 사용해야 합니다.
- TypeError – 주체가
- 반환 유형: 없음
예제
OCI IAM 그룹에서 고유 행 액세스 취소:
revoke_agent_memory_policies(
connection,
memory_store_id="MEMORY",
owner_schema="MY_OWNER_SCHEMA",
principals=[OciGroupPrincipal("ORACLEAGENTMEMORY_USERS")],
policies=[UserOwnRowsDeepDataSecurityPolicy()],
)
oracleagentmemory.core.deepsec.list_agent_memory_granted_policies
각 주체에 지정된 주체 및 에이전트 메모리 정책을 나열합니다.
- 매개변수:
- 연결
Any–SYS.DBA_DATA_ROLE_GRANTS,SYS.DBA_DATA_ROLES및SYS.DBA_DATA_GRANTS에 액세스하여 Oracle AI Database 관리 연결을 엽니다. - memory_store_id
str– 관리 에이전트 메모리 스키마 객체의 이름을 지정하는 데 사용되는 ID입니다. - owner_schema
str– 관리 에이전트 메모리 테이블을 소유하는 스키마입니다.
- 연결
- 반환: 결정적 순서의 주체 및 정책 쌍입니다. OCI IAM 그룹 지정은
OciGroupPrincipal인스턴스로 반환되고, 로컬 최종 사용자 지정은LocalEndUserPrincipal인스턴스로 반환됩니다. - 반환 유형: list[tuple[Principal, list[DeepDataSecurityPolicy]]]
- 라이즈: RuntimeError –
connection에 활성 일반 사용자 보안 컨텍스트가 있는 경우입니다. 정책 관리는 전용 보안 관리 세션을 사용해야 합니다.
예제
정책 지정 나열:
assignments = list_agent_memory_granted_policies(
connection,
memory_store_id="MEMORY",
owner_schema="MY_OWNER_SCHEMA",
)
len(assignments) >= 0
True
런타임 보안 컨텍스트
OracleMemoryEndUserSecurityContext는 에이전트 메모리 작업에 대해 python-oracledb 보안 컨텍스트를 범위 지정합니다. 컨텍스트에는 최종 사용자 토큰과 데이터베이스 액세스 토큰이 포함됩니다. Oracle AI Database는 이를 검증하고 청구에서 활성 데이터 역할을 도출합니다. SDK는 획득한 각 물리적 연결에 컨텍스트를 연결하고 해당 연결을 풀로 반환하기 전에 해당 연결을 지웁니다.
보안 모델은 Oracle의 End-User Security Context를 참조하고 검증, 롤 해결, 접속 재사용 및 컨텍스트 정리는 How the Database Server Manages an End-User Security Context을 참조하십시오.
클래스 oracleagentmemory.core.deepsec.OracleMemoryEndUserSecurityContext
기준: object
에이전트 메모리 작업에 Oracle 일반 사용자 보안 컨텍스트를 적용합니다.
이 컨텍스트 관리자를 입력하면 현재 실행 컨텍스트에서 사용된 Oracle 지원 에이전트 메모리 저장소에서 security_context를 사용할 수 있습니다. 각 데이터베이스 작업은 물리적 연결을 획득한 후 컨텍스트를 적용하고, 일반 사용자 ID가 활성 상태인지 확인하고, 연결을 해제하기 전에 컨텍스트를 지웁니다. 이 동작은 직접 연결 및 연결 풀 모두에서 작동합니다.
범위가 대기 중인 비동기 에이전트 메모리 호출로 전달됩니다. with 또는 async with 블록을 능가하는 호출자 작업은 만료된 범위를 사용할 수 없습니다. 블록 내에서 허용된 백그라운드 메모리 추출 작업은 블록이 종료된 후 완료될 수 있도록 전용 스냅샷을 보유합니다.
일반 사용자 또는 데이터베이스 액세스 토큰이 변경되는 경우 새 oracledb.EndUserSecurityContext를 사용합니다. Oracle AI Database는 제공된 토큰의 클레임에서 사용으로 설정된 데이터 역할을 파생합니다. 이 관리자는 OAuth 토큰을 새로고침, 취소 또는 검사하지 않습니다.
- 매개변수: security_context
Any–oracledb.create_end_user_security_context()에서 반환된 최종 사용자 보안 컨텍스트입니다. - 발생 값:
- TypeError –
security_context가None인 경우 - RuntimeError – 동일한 관리자가 일치하는 활성 항목 없이 종료된 경우 만료 후 상속된 범위가 사용되거나 SDK가 획득한 Oracle 연결에서 컨텍스트를 안전하게 연결하고 확인할 수 없습니다.
- TypeError –
노트
이 클래스는 Oracle Agent 메모리 작업을 범위화합니다. SDK 외부의 응용 프로그램 SQL에서 직접 사용하는 임의의 연결은 수정하지 않습니다. 동일한 관리자 인스턴스 중첩을 포함하여 중첩이 지원됩니다. 각 종료는 일치하는 항목에서 컨텍스트를 복원합니다.
예제
동기 에이전트 메모리 작업에 OAuth 파생 컨텍스트 적용:
import oracledb
from oracleagentmemory.core.deepsec import (
OracleMemoryEndUserSecurityContext,
)
user_context = oracledb.create_end_user_security_context(
end_user_identity=end_user_token,
database_access_token=database_access_token,
)
with OracleMemoryEndUserSecurityContext(user_context):
memory_store.add(
["Remember this preference."],
record_type="memory",
)
동일한 관리자가 비동기 호출을 지원합니다.
async with OracleMemoryEndUserSecurityContext(user_context):
await memory_store.add_async(
["Remember this preference."],
record_type="memory",
)
method __aenter__(비동기)
대기 중인 에이전트 메모리 작업의 범위를 입력합니다.
- 반환: 이 컨텍스트 관리자입니다.
- 반환 유형: OracleMemoryEndUserSecurityContext
method __aexit__(비동기)
블록 예외를 억제하지 않고 비동기 범위를 종료합니다.
- 매개변수:
- exc_type
Any– 관리 블록의 예외 유형 또는None입니다. - exc
Any– 관리 블록의 예외 인스턴스 또는None입니다. - traceback
Any– 관리 블록 또는None의 예외사항 추적입니다.
- exc_type
- 반환 유형: 없음
메소드 __enter__
범위를 입력하고 이 컨텍스트 관리자를 반환합니다.
현재 실행 컨텍스트에서 시작된 에이전트 메모리 작업은 일치가 종료될 때까지 이 관리자의 일반 사용자 보안 컨텍스트를 사용합니다.
- 반환: 이 컨텍스트 관리자입니다.
- 반환 유형: OracleMemoryEndUserSecurityContext
방법 __exit__
범위를 종료하고 상속된 호출자 작업이 재사용되지 않도록 합니다.
관리되는 블록의 예외는 변경되지 않고 전달됩니다.
- 매개변수:
- exc_type
Any– 관리 블록의 예외 유형 또는None입니다. - exc
Any– 관리 블록의 예외 인스턴스 또는None입니다. - traceback
Any– 관리 블록 또는None의 예외사항 추적입니다.
- exc_type
- 반환 유형: 없음
oracleagentmemory.core.deepsec.get_end_user_username
Oracle DB 연결에 연결된 일반 유저 유저 이름을 반환합니다.
Deep Data Security는 데이터베이스 연결에 연결된 최종 사용자 보안 컨텍스트를 사용하여 데이터 권한 부여를 평가합니다. 이 도우미는 해당 컨텍스트에서 username 속성을 읽습니다. 물리적 연결을 설정하는 데 사용되는 데이터베이스 계정은 반환되지 않습니다.
- 매개변수: connection
Any– 열린 Oracle DB 연결입니다. 결과적으로 보호된 작업을 실행할 정확한 데이터베이스 세션이 설명되도록 연결 풀이 아닌 획득한 연결을 전달합니다. - 반환: 인증된 일반 사용자 사용자 이름 또는 접속에 일반 사용자 보안 컨텍스트가 포함되지 않은 경우
None입니다. - 반환 유형: str 또는 None
예제
접속에 연결된 일반 사용자 ID가 있는지 여부를 확인합니다.
get_end_user_username(conn) is None
True
감사 중
Deep Sec는 Oracle AI Database 통합 감사를 사용합니다. 데이터베이스 관리자는 데이터 롤 및 데이터 권한 부여 생성 또는 삭제, 데이터 롤 부여 또는 취소, 일반 유저 및 일반 유저 컨텍스트 생성 또는 삭제와 같은 Deep Sec 구성 작업에 대한 통합 감사 정책을 생성할 수 있습니다. 감사 레코드는 UNIFIED_AUDIT_TRAIL를 통해 사용할 수 있으며 최종 사용자 보안 컨텍스트에서 수행되는 작업에 대한 최종 사용자 ID 및 보안 컨텍스트 식별자를 포함할 수 있습니다.
CREATE END USER SECURITY CONTEXT 작업은 보안 컨텍스트 생성을 기록합니다. Oracle은 많은 레코드를 생성할 수 있으며 ACTIONS ALL에 포함되지 않는다는 점에 유의하십시오. 수명 주기 이벤트를 감사해야 하는 경우 명시적으로 지정합니다. 배포의 보안 및 규정 준수 요구사항에 따라 감사 작업 및 보존을 선택합니다. SDK 애플리케이션 로그는 진단 로그이며 데이터베이스 감사 추적을 대체하지 않습니다.
Oracle Deep Data Security Operations 감사 및 Deep Sec Auditable Actions의 공식 목록을 참조하십시오.
취소 시간 계약
데이터베이스 정책 취소 및 OCI IAM 그룹 멤버쉽 제거의 유효 시간이 서로 다릅니다.
| 관리 조치 | 유효 기간 |
|---|---|
전화 revoke_agent_memory_policies() |
이 함수는 반환하기 전에 저장소별 데이터베이스 지정 및 커밋을 제거합니다. 이후 보호된 데이터베이스 문은 더 이상 해당 정책을 수신하지 않습니다. 이미 실행 중인 명령문이 소급 취소되지 않았습니다. |
| OCI IAM의 피부여자 그룹에서 사용자 제거 | 새로 발행된 액세스 토큰은 업데이트된 멤버쉽을 반영합니다. 사용자에게 이미 발행된 액세스 토큰은 여전히 group 클레임을 포함하며 해당 토큰이 만료될 때까지 해당 Deep Sec 데이터 롤에 계속 권한을 부여할 수 있습니다. |
따라서 IAM 전용 취소에 대한 유효 상한은 발행된 토큰의 exp 클레임에서 남은 수명입니다. OCI IAM 액세스 토큰 수명은 구성 가능하며, 리소스-애플리케이션, 사용자 세션 또는 사용자 정의 만료가 설정되지 않은 경우 문서화된 기본값은 3600초입니다. 응용 프로그램은 만료된 토큰의 재사용을 중지하고 클레임이 현재 멤버쉽을 반영하는 새 토큰을 획득해야 합니다.
긴급 취소의 경우 먼저 revoke_agent_memory_policies()를 호출하여 후속 명령문에 대한 데이터베이스 지정을 즉시 제거한 다음 OCI IAM 그룹에서 사용자를 제거합니다. 전체 그룹이 액세스를 다시 얻어야 하는 경우에만 데이터베이스 정책을 다시 부여합니다. 그룹에 권한이 부여된 상태로 한 멤버만 제거해야 하는 경우 토큰 만료에 의존하거나 배치별 짧은 액세스 토큰 수명 및 재인증 정책을 사용합니다.
위의 Deep Sec 보안 컨텍스트 수명 주기 참조와 함께 OCI IAM의 API를 사용한 권한 부여 관리 및 토큰 만료 테이블을 참조하십시오.