관리 코드가 외부 리소스에 액세스하는 경우 SQL Server는 루틴이 실행되는 현재 실행 컨텍스트를 자동으로 가장하지 않습니다. 코드 인 EXTERNAL_ACCESS 및 UNSAFE 어셈블리는 현재 실행 컨텍스트를 명시적으로 가장할 수 있습니다.
비고
가장의 동작 변경에 대한 자세한 내용은 SQL Server 2014의 데이터베이스 엔진 기능에 대한 주요 변경 내용을 참조하세요.
In-Process 데이터 액세스 공급자는 현재 보안 컨텍스트와 연결된 토큰을 검색하는 데 사용할 수 있는 애플리케이션 프로그래밍 인터페이스 SqlContext.WindowsIdentity를 제공합니다. 관리 코드 및 UNSAFE 어셈블리는 EXTERNAL_ACCESS 이 메서드를 사용하여 컨텍스트를 검색하고 .NET Framework WindowsIdentity.Impersonate 메서드를 사용하여 해당 컨텍스트를 가장할 수 있습니다. 사용자 코드가 명시적으로 가장하는 경우 다음 제한 사항이 적용됩니다.
관리 코드가 가장된 상태인 경우 In-Process 데이터 액세스가 허용되지 않습니다. 코드는 가장을 실행 취소한 다음, In-Process 데이터 액세스를 호출할 수 있습니다. 이렇게 하려면 원래
Impersonate메서드의 반환 값(WindowsImpersonationContext개체)을 저장하고 이WindowsImpersonationContext메서드를Undo호출해야 합니다.이 제한은 In-Process 데이터 액세스가 발생할 때 항상 세션에 적용되는 현재 보안 컨텍스트의 컨텍스트에 있음을 의미합니다. 관리 코드 내에서 명시적 가장으로 수정할 수 없습니다.
비동기적으로 실행되는 관리 코드의 경우(예: 스레드를 만들고 코드를 비동기적으로 실행하는 어셈블리를 통해
UNSAFE) In-Process 데이터 액세스는 허용되지 않습니다. 이는 가장이 있는지 여부에 관계없이 마찬가지입니다.
코드가 SQL Server와 다른 가장된 컨텍스트에서 실행 중인 경우 프로세스 내 데이터 액세스 호출을 수행할 수 없습니다. 프로세스 내 데이터 액세스 호출을 수행하기 전에 가장 컨텍스트를 실행 취소해야 합니다. 관리 코드에서 in-process 데이터 액세스가 이루어지면 관리 코드에 대한 Transact-SQL 진입점의 원래 실행 컨텍스트가 항상 권한 부여에 사용됩니다.
어셈블리와 UNSAFE 어셈블리는 EXTERNAL_ACCESS 이전에 설명한 대로 현재 보안 컨텍스트를 자발적으로 가장하지 않는 한 SQL Server 서비스 계정으로 운영 체제 리소스에 액세스합니다. 이 때문에 어셈블리 작성 EXTERNAL_ACCESS 자는 로그인 수준 권한으로 지정된 어셈블리보다 SAFE 높은 수준의 신뢰가 EXTERNAL ACCESS 필요합니다. SQL Server 서비스 계정에서 코드를 실행할 수 있는 신뢰할 수 있는 로그인만 사용 권한을 부여 EXTERNAL ACCESS 해야 합니다.