CREATE TRUSTED CONTEXT문
CREATE TRUSTED CONTEXT문은 현재 서버에서 신뢰할 수 있는 컨텍스트를 정의합니다.
호출
이 명령문은 애플리케이션 프로그램에 임베드되거나 대화식으로 실행될 수 있습니다. 이는 DYNAMICRULES 실행 동작이 패키지에 영향을 주는 경우에만 동적으로 준비될 수 있는 실행문입니다(SQLSTATE 42509).
권한 부여
명령문의 권한 부여 ID에서 보유하는 특권에는 SECADM 권한이 포함되어야 합니다.
구문
>>-CREATE TRUSTED CONTEXT--context-name-------------------------> >--BASED UPON CONNECTION USING----------------------------------> >--SYSTEM AUTHID--authorization-name--●--ATTRIBUTES-------------> .-,-----------------------------------------------------------------------. V (1) | >--(----------+-ADDRESS--address-value--+-----------------------------------+-+-+--)--●--> | '-WITH ENCRYPTION--encryption-value-' | | (2) | '-------ENCRYPTION--encryption-value----------------------------' .-NO DEFAULT ROLE---------. .-DISABLE-. >--+-------------------------+--●--+---------+--●---------------> '-DEFAULT ROLE--role-name-' '-ENABLE--' >--+-------------------------------------------------------------------------------------------+--> | .-,-----------------------------------------------------------------------. | | V .-WITHOUT AUTHENTICATION-. | | '-WITH USE FOR----+-authorization-name--+-----------------+-+--+------------------------+-+-' | '-ROLE--role-name-' | '-WITH AUTHENTICATION----' '-PUBLIC----------------------------------' >--●-----------------------------------------------------------><
참고:
- 속성 이름 및 해당 값의 각 조합(쌍으로)은 고유해야 합니다(SQLSTATE 4274D).
- ENCRYPTION은 두 번 이상 지정될 수 없습니다(SQLSTATE 42614). 그러나, WITH ENCRYPTION은 지정된 각각의 ADDRESS에 대해 지정될 수 있습니다.
설명
- context-name
- 신뢰할 수 있는 컨텍스트의 이름을 지정합니다. 이는 한 부분의 이름입니다. 이는 SQL ID(일반 또는 분리)입니다. 이름은 현재 서버에 이미 존재하는 신뢰할 수 있는 컨텍스트를 식별하지 않습니다(SQLSTATE 42710). 이름은 'SYS' 문자로 시작되지 않아야 합니다(SQLSTATE 42939).
- BASED UPON CONNECTION USING SYSTEM AUTHID authorization-name
- 컨텍스트가 기존 신뢰할 수 있는 컨텍스트와 연관되지 않아야 하는 시스템 권한 부여 ID authorization-name에서 설정하는 연결임을 지정합니다(SQLSTATE 428GL). 이는 명령문의 권한 부여 ID일 수 없습니다(SQLSTATE 42502).
- ATTRIBUTES (...)
- 신뢰할 수 있는 컨텍스트를 정의하는 하나 이상의 연결 신뢰 속성 목록을 지정합니다.
- ADDRESS address-value
- 데이터베이스 서버와 통신하기 위해 클라이언트가 사용하는
실제 통신 주소를 지정합니다. 지원되는 유일한 프로토콜은
TCP/IP입니다. ADDRESS 속성은 여러 번 지정될 수 있지만,
각 address-value 쌍은 속성 세트에 대해
고유해야 합니다(SQLSTATE 4274D).
신뢰할 수 있는 연결을 설정할 때 여러 값이 신뢰할 수 있는 컨텍스트의 ADDRESS 속성에 대해 정의되는 경우, 연결에서 사용하는 주소가 신뢰할 수 있는 컨텍스트의 ADDRESS 속성에 대해 정의된 값 중 하나와 일치하면 후보 연결과 이 속성을 일치시켜야 합니다.
- address-value
- ADDRESS 신뢰 속성과 연관되는 값을 포함하는 문자열 상수를 지정합니다. address-value는
IPv4 주소, IPv6 주소 또는 보안 도메인 이름이어야 합니다.
- IPv4 주소는 선행 공백을 포함하지 않아야 하고 점 10진수 주소로서 표시됩니다. IPv4 주소의 예제는 9.112.46.111입니다. 값 'localhost' 또는 동등한 표시 '127.0.0.1'이 일치하지 않습니다. 대신, 호스트의 실제 IPv4 주소가 지정되어야 합니다.
- IPv6 주소는 선행 공백을 포함하지 않아야 하고 콜론 16진수 주소로서 표시됩니다. IPv6 주소의 예제는 2001:0DB8:0000:0000:0008:0800:200C:417A입니다. IPv4 맵핑 IPv6 주소(예: ::ffff:192.0.2.128)가 일치하지 않습니다. 마찬가지로, 'localhost' 또는 IPv6 짧은 표시 '::1'이 일치하지 않습니다.
- 결과 IPv4 또는 IPv6 주소가 판별되는 도메인 이름 서버에 의해 도메인 이름이 IP 주소로 변환됩니다. 도메인 이름의 예제는 corona.torolab.ibm.com입니다. 도메인 이름이 IP 주소로 변환될 때, 이 변환의 결과는 하나 이상의 IP 주소 세트일 수 있습니다. 이 경우, 연결이 발생하는 IP 주소가 도메인 이름이 변환된 임의의 IP 주소와 일치하면 수신 연결이 신뢰할 수 있는 컨텍스트 오브젝트의 ADDRESS 속성과 일치한다고 합니다. 신뢰할 수 있는 컨텍스트 오브젝트를 작성할 때, 특히 DHCP(Dynamic Host Configuration Protocol) 환경에서 정적 IP 주소 대신 ADDRESS 속성에 대한 도메인 이름 값을 제공하는 것이 좋습니다. DHCP를 사용하면 네트워크에 연결될 때마다 디바이스가 다른 IP 주소를 가질 수 있습니다. 따라서, 정적 IP 주소가 신뢰할 수 있는 컨텍스트 오브젝트의 ADDRESS 속성에 제공되는 경우, 일부 디바이스에 본의 아니게 신뢰할 수 있는 연결을 얻을 수 있습니다. 신뢰할 수 있는 컨텍스트 오브젝트의 ADDRESS 속성에 도메인 이름을 제공하면 DHCP 환경에서 이 문제를 피할 수 있습니다.
- WITH ENCRYPTION encryption-value
- 이 특정 address-value에 대한 네트워크 암호화 또는 데이터 스트림의 암호화의 최소 레벨을 지정합니다.
이 encryption-value는 이 특정 address-value에 대한 글로벌 ENCRYPTION 속성 설정을 겹쳐씁니다.
- encryption-value
- 이 특정 address-value에 대한 ENCRYPTION 신뢰 속성과 연관되는 값을 포함하는 문자열 상수를 지정합니다.
encryption-value는 다음 값 중 하나여야 합니다(SQLSTATE 42615).
- NONE, 특정 암호화 레벨이 요청되지 않음
- LOW, 최소 모드의 암호화가 요청됨. 수신 연결을 이 특정 주소에 대한 암호화 설정과 일치시키려면 데이터베이스 관리자의 인증 유형이 DATA_ENCRYPT여야 함
- HIGH, SSL(Secure Sockets Layer) 암호화 또는 이에 해당하는 기능은 수신 연결을 이 특정 주소에 대한 암호화 설정과 일치시키려면 데이터베이스 클라이언트와 데이터베이스 서버 간의 데이터 통신에 사용되어야 함
- ENCRYPTION encryption-value
- 데이터 스트림 또는 네트워크 암호화의 최소 암호화 레벨을
지정합니다. 기본값은 NONE입니다.
- encryption-value
- 이 특정 address-value에 대한 ENCRYPTION 신뢰 속성과 연관되는 값을 포함하는 문자열 상수를 지정합니다.
encryption-value는 다음 값 중 하나여야 합니다(SQLSTATE 42615).
- NONE, 이 신뢰할 수 있는 컨텍스트 오브젝트의 ENCRYPTION 속성을 일치시키기 위해 수신 연결에 필요한 특정 암호화 레벨이 없음
- LOW, 최소 모드의 암호화가 요청됨. 수신 연결을 신뢰할 수 있는 컨텍스트 오브젝트의 ENCRYPTION 속성과 일치시키려면 데이터베이스 관리자의 인증 유형이 DATA_ENCRYPT여야 함
- HIGH, SSL(Secure Sockets Layer) 암호화 또는 이에 해당하는 기능은 수신 연결을 신뢰할 수 있는 컨텍스트 오브젝트의 ENCRYPTION 속성과 일치시키려는 경우 데이터베이스 클라이언트와 데이터베이스 서버 간의 데이터 통신에 사용되어야 합니다.
표 1. 암호화 및 신뢰할 수 있는 컨텍스트 기존 연결에서 사용하는 암호화 신뢰할 수 있는 컨텍스트에 대한 ENCRYPTION 값 신뢰할 수 있는 컨텍스트를 연결에 사용할 수 있습니까? 암호화 없음 'NONE' 예 암호화 없음 'LOW' 아니오 암호화 없음 'HIGH' 아니오 낮은 암호화(DATA_ENCRYPT) 'NONE' 예 낮은 암호화(DATA_ENCRYPT) 'LOW' 예 낮은 암호화(DATA_ENCRYPT) 'HIGH' 아니오 높은 암호화(SSL) 'NONE' 예 높은 암호화(SSL) 'LOW' 예 높은 암호화(SSL) 'HIGH' 예
- NO DEFAULT ROLE 또는 DEFAULT ROLE role-name
- 신뢰할 수 있는 컨텍스트를 기반으로 하는 신뢰할 수 있는
연결과 기본 역할을 연관시킬지 여부를 지정합니다. 기본값은 NO
DEFAULT ROLE입니다.
- NO DEFAULT ROLE
- 신뢰할 수 있는 컨텍스트에 기본 역할이 없음을 지정합니다.
- DEFAULT ROLE role-name
- role-name이 신뢰할 수 있는 컨텍스트에 대한 기본 역할임을 지정합니다. role-name은 현재 서버에 존재하는 역할을 식별해야 합니다(SQLSTATE 42704). 이 역할은 신뢰할 수 있는 컨텍스트 정의의 일부로서 정의되는 사용자 특정 역할이 사용자에게 없을 때 이 신뢰할 수 있는 컨텍스트를 기반으로 신뢰할 수 있는 연결에서 사용자가 이 역할을 사용합니다.
- DISABLE 또는 ENABLE
- 사용 가능하거나 사용 불가능한 상태에서 신뢰할 수 있는 컨텍스트가
작성되는지 여부를 지정합니다. 기본값은 DISABLE입니다.
- DISABLE
- 사용 불가능한 상태에서 신뢰할 수 있는 컨텍스트가 작성됨을 지정합니다. 사용 불가능한 신뢰할 수 있는 컨텍스트는 신뢰할 수 있는 연결이 설정될 때 고려되지 않습니다.
- ENABLE
- 사용 가능한 상태에서 신뢰할 수 있는 컨텍스트가 작성됨을 지정합니다.
- WITH USE FOR
- 이 신뢰할 수 있는 컨텍스트를 기반으로 하는 신뢰할 수 있는 연결을 사용할 수 있는 사용자를 지정합니다.
- authorization-name
- 지정된 authorization-name에서 신뢰할 수 있는 연결을 사용할 수 있음을 지정합니다.
authorization-name은 WITH USE FOR절에서 여러 번 지정되지 않아야 합니다(SQLSTATE 428GM). 이는 명령문의 권한 부여 ID가 아니어야 합니다(SQLSTATE 42502).신뢰할 수 있는 컨텍스트의
정의가 PUBLIC 및 사용자 목록 모두에 의한 액세스를 허용하는 경우,
사용자에 대한 스펙이 PUBLIC에 대한 스펙을 겹쳐씁니다. 예를 들어,
PUBLIC WITH AUTHENTICATION 및 JOE WITHOUT
AUTHENTICATION 모두에 의한 액세스를 허용하는 신뢰할 수 있는 컨텍스트가 정의된다고 가정하십시오. JOE가 신뢰할 수 있는 컨텍스트를 사용하는 경우, 인증이 필요하지 않습니다. 그러나, GEORGE가 신뢰할
수 있는 컨텍스트를 사용하는 경우,
인증이 필요합니다.
- ROLE role-name
- role-name은 신뢰할 수 있는 연결이 신뢰할 수 있는 컨텍스트를 사용 중일 때 사용자에게 사용되는 역할입니다. role-name은 현재 서버에 존재하는 역할을 식별해야 합니다(SQLSTATE 42704). 사용자에 명시적으로 지정된 역할이 신뢰할 수 있는 컨텍스트와 연관되는 기본 역할을 겹쳐씁니다.
- PUBLIC
- 이 신뢰할 수 있는 컨텍스트를 기반으로 하는 신뢰할 수 있는 연결이 임의의 사용자에 의해 사용될 수 있음을 지정합니다. PUBLIC은 여러 번 지정되지 않아야 합니다(SQLSTATE 428GM). 그러한 신뢰할 수 있는 연결을 사용하는 모든 사용자는 연관된 신뢰할 수 있는 컨텍스트에 기본 역할과 연관되는 특권을 사용합니다. 기본 역할이 신뢰할 수 있는 컨텍스트에 정의되지 않으면 이 신뢰할 수 있는 컨텍스트를 기반으로 하는 신뢰할 수 있는 연결을 사용하는 사용자와 연관된 역할이 없습니다.
- WITHOUT AUTHENTICATION 또는 WITH AUTHENTICATION
- 신뢰할 수 있는 연결에서 사용자 전환에
사용자의 인증이 필요한지 여부를 지정합니다. 기본값은 WITHOUT
AUTHENTICATION입니다.
- WITHOUT AUTHENTICATION
- 신뢰할 수 있는 연결의 현재 사용자를 해당 사용자로 전환하는 것에 인증이 필요하지 않음을 지정합니다.
- WITH AUTHENTICATION
- 신뢰할 수 있는 연결의 현재 사용자를 해당 사용자로 전환하는 것에 인증이 필요함을 지정합니다.
규칙
- 신뢰할 수 있는 컨텍스트 독점 SQL문 다음에
COMMIT 또는 ROLLBACK문이 있어야 합니다(SQLSTATE 5U021). 신뢰할 수 있는 컨텍스트 독점
SQL문은 다음과 같습니다.
- CREATE TRUSTED CONTEXT, ALTER TRUSTED CONTEXT 또는 DROP(TRUSTED CONTEXT)
- 신뢰할 수 있는 컨텍스트 독점 SQL문을 전역 트랜잭션 내에서 실행할 수 없습니다(예: 페더레이티드 트랜잭션에 대한 2단계 커미트의 일부로 시작되는 전역 트랜잭션 또는 XA 트랜잭션)(SQLSTATE 51041).
참고
- 신뢰할 수 있는 컨텍스트 정의의 일부로서 IP 주소를 제공할 때 주소는 네트워크에 유효한 형식이어야 합니다. 예를 들어, 네트워크가 IPv4일 때 IPv6 형식으로 주소를 제공하는 것은 일치하지 않습니다. 혼합 환경에서 주소의 IPv4 및 IPv6 표현 모두를 지정하는 것이 좋지만, 주소 형식 세부사항을 숨기는 보안 도메인 이름(예: corona.torolab.ibm.com)을 지정하는 것이 더 좋습니다.
- 신뢰할 수 있는 컨텍스트의 정의에 역할 지정: 신뢰할 수 있는 컨텍스트의 정의는 특정 권한 부여 ID에 대한 역할을 지정하고 신뢰할 수 있는 컨텍스트의 정의에 특정 역할이 지정되지 않은 권한 부여 ID에 사용할 기본 역할을 지정할 수 있습니다. 이 역할은 신뢰할 수 있는 컨텍스트를 기반으로 하는 신뢰할 수 있는 연결과 함께 사용될 수 있지만, 신뢰할 수 있는 컨텍스트를 기반으로 하는 신뢰할 수 있는 연결의 외부에서 역할을 사용할 수 있도록 하지 않습니다.
- 신뢰할 수 있는 연결을 사용하여 데이터 처리 언어(DML) SQL문을 실행할 때 명령문의 권한 부여 ID가 직접적으로 보유하는 기타 특권 또는 명령문의 권한 부여 ID가 간접적으로 보유하는 기타 역할 뿐만 아니라 연관된 신뢰할 수 있는 컨텍스트 정의 내에서 권한 부여 ID에 실행되는 컨텍스트 지정 역할이 보유하는 특권이 고려됩니다.
- 연관된 신뢰할 수 있는 컨텍스트 정의 내에서 권한 부여 ID에 실행되는 컨텍스트 지정 역할이 보유하는 특권이 데이터 정의 언어(DDL) SQL문을 위해 고려되지 않습니다. 예를 들어, 오브젝트를 작성하려면 명령문의 권한 부여 ID가 컨텍스트 지정 역할이 보유하는 특권을 포함하지 않고 작성할 수 있어야 합니다.
- 동일한 머신에서 기존 애플리케이션과 동일한 신임 정보를 사용하여 데이터베이스 서버에 대해 인증하고 신뢰할 수 있는 컨텍스트를 이용하는 새로운 애플리케이션을 설치할 때, 새 애플리케이션은 신뢰할 수 있는 동일한 컨텍스트 오브젝트를 선택할 수도 있습니다(예: 신뢰할 수 있는 컨텍스트 역할 상속). 이는 보안 관리자의 의도가 아닐 수 있습니다. 보안 관리자는 애플리케이션이 신뢰할 수 있는 컨텍스트 오브젝트를 사용한다는 것을 찾아내기 위해 데이터베이스 감사 기능을 켤 수도 있습니다.
- 모든 데이터베이스 파티션에서 한 번에 하나의 커미트되지 않은 신뢰할 수 있는 컨텍스트 독점 SQL문만 허용됩니다. 커미트되지 않은 신뢰할 수 있는 컨텍스트 독점 SQL문이 실행되는 경우, 신뢰할 수 있는 연속 컨텍스트 독점 SQL문은 신뢰할 수 있는 현재 컨텍스트 독점 SQL문이 커미트되거나 롤백될 때까지 기다립니다.
- 시스템 카탈로그에 변경사항이 작성되지만, 명령문을 실행하는 연결일지라도 변경사항이 커미트될 때까지 적용되지 않습니다.
예
- 예제 1: 이 신뢰할 수 있는 컨텍스트를 기반으로 하는
신뢰할 수 있는 연결의 현재 사용자가 두 개의 다른 사용자 ID로
전환될 수 있도록 신뢰할 수 있는 컨텍스트를 작성하십시오. 연결의 현재 사용자가
사용자 ID JOE로 전환될 때, 인증은 필요하지 않습니다. 그러나,
연결의 현재 사용자가 사용자 ID BOB로 전환될 때는 인증이 필요합니다. 신뢰할 수 있는 컨텍스트에
context-role이라는 기본 역할이 있다는 것에 주의하십시오. 이는
신뢰할 수 있는 컨텍스트의 한계 내에서 작업하는 사용자가
context-role 역할과 연관된 특권을 상속한다는 것을 의미합니다.
CREATE TRUSTED CONTEXT APPSERVER BASED UPON CONNECTION USING SYSTEM AUTHID WRJAIBI DEFAULT ROLE CONTEXT_ROLE ENABLE ATTRIBUTES (ADDRESS '9.26.113.204') WITH USE FOR JOE WITHOUT AUTHENTICATION BOB WITH AUTHENTICATION - 예제 2: 이 신뢰할 수 있는 컨텍스트를 기반으로 하는
신뢰할 수 있는 연결의 현재 사용자가 인증 없이 임의의 사용자 ID로
전환될 수 있도록 신뢰할 수 있는 컨텍스트를 작성하십시오.
CREATE TRUSTED CONTEXT SECUREROLE BASED UPON CONNECTION USING SYSTEM AUTHID PBIRD ENABLE ATTRIBUTES (ADDRESS '9.26.113.204') WITH USE FOR PUBLIC WITHOUT AUTHENTICATION - 예제 3: 이 신뢰할 수 있는 컨텍스트를 기반으로 하는
신뢰할 수 있는 연결의 현재 사용자가 인증 없이 임의의 사용자 ID로
전환될 수 있도록 신뢰할 수 있는 컨텍스트를 작성하십시오.이 신뢰할 수 있는 컨텍스트와 예제 2에서 작성된 신뢰할 수 있는 컨텍스트 사이의 차이는
이 신뢰할 수 있는 컨텍스트에 ENCRYPTION이라는 추가 속성이 있다는 것입니다. 이 신뢰할 수 있는 컨텍스트 속성을 일치시키기 위해 연결에서 사용하는 암호화 설정이 적어도 "낮은 암호화"(표 1 참조)에 있어야 하는
신뢰할 수 있는 컨텍스트 SECUREROLEENCRYPT 상태에 대한 ENCRYPTION 속성 설정입니다.
CREATE TRUSTED CONTEXT SECUREROLEENCRYPT BASED UPON CONNECTION USING SYSTEM AUTHID SHARPER ENABLE ATTRIBUTES (ADDRESS '9.26.113.204' ENCRYPTION 'LOW') WITH USE FOR PUBLIC WITHOUT AUTHENTICATION - 예제 4: 주소 9.26.146.201 및 9.26.146.203에서 사용자
WRJAIBI가 작성하는 연결이 사용되는 암호화가 없을 때 신뢰되지만,
주소 9.26.146.202에서 사용자 WRJAIBI가 작성하는 연결에는
신뢰할 암호화의 낮은 레벨이 요청되도록 신뢰할 수 있는 컨텍스트를
작성하십시오.
CREATE TRUSTED CONTEXT WALIDLOCSENSITIVE BASED UPON CONNECTION USING SYSTEM AUTHID WRJAIBI ENABLE ATTRIBUTES (ADDRESS '9.26.146.201', ADDRESS '9.26.146.202' WITH ENCRYPTION 'LOW', ADDRESS '9.26.146.203' ENCRYPTION 'NONE')
