부분적으로 신뢰할 수 있는 호출자 허용

코드 라이브러리 공유는 CLR(공용 언어 런타임) 통합에서의 일반적인 시나리오입니다. 이 경우 사용자 정의 형식, 저장 프로시저, 사용자 정의 함수, 사용자 정의 집계, 트리거 또는 유틸리티 클래스가 포함된 어셈블리를 다른 어셈블리나 응용 프로그램에서 액세스하는 경우가 많습니다. 여러 응용 프로그램에서 공유할 코드 라이브러리는 강력한 이름으로 서명되어야 합니다.

런타임 코드 액세스 보안 시스템에서 완전히 신뢰하는 응용 프로그램만 명시적으로 System.Security.AllowPartiallyTrustedCallers 특성이 표시되지 않은 공유 관리 코드 어셈블리에 액세스할 수 있습니다. 부분적으로 신뢰할 수 있는 어셈블리(SAFE 또는 EXTERNAL_ACCESS 권한 집합으로 SQL Server에 등록된 어셈블리)가 이 특성 없이 강력한 이름으로 서명된 어셈블리에 액세스하려고 하면 System.Security.SecurityException이 throw됩니다. 표시되는 오류 메시지는 다음과 유사합니다.

Msg 6522, Level 16, State 1, Procedure usp_RSTest, Line 0
A .NET Framework error occurred during execution of user defined
routine or aggregate 'usp_RSTest':  System.Security.SecurityException: That assembly does not allow partially trusted callers.
System.Security.SecurityException: at
System.Security.CodeAccessSecurityEngine.ThrowSecurityException(
Assembly asm, PermissionSet granted,PermissionSet refused,
RuntimeMethodHandle rmh, SecurityAction action, Object demand,
IPermission permThatFailed) at
Microsoft.Samples.SqlServer.TestResultSet.Test()

전역 어셈블리 캐시에 추가된 어셈블리를 제외하고 SQL Server에 등록된 모든 어셈블리에 AllowPartiallyTrustedCallers 특성을 표시하여 SQL Server에서 로드한 어셈블리가 서로 액세스할 수 있도록 하는 것이 좋습니다. AllowPartiallyTrustedCallers 특성을 추가하면 예기치 않은 컨텍스트에서 부분적으로 신뢰할 수 있는 호출자가 어셈블리를 사용할 수 있으므로 안전을 위해 특성을 추가하기 전에 전역 어셈블리 캐시에 추가할 어셈블리를 철저하게 검토해야 합니다. 어셈블리를 완전히 신뢰할 수 있게 만들면 안 됩니다(UNSAFE 권한 집합으로 SQL Server에 등록됨).

자세한 내용은 .NET Framework 소프트웨어 개발 키트의 "부분적으로 신뢰할 수 있는 코드에서 라이브러리 사용"을 참조하십시오.

많은 서버측 CLR 통합 응용 프로그램에 유용한 유틸리티 클래스가 있다고 가정합니다. 예를 들어 이 클래스는 쿼리 호출 결과를 나타내는 클래스일 수 있습니다. 이 구성 요소를 공유할 수 있도록 이 유틸리티 클래스는 별도의 어셈블리에 배치됩니다. 그러면 CLR 통합 개체가 포함된 다른 여러 어셈블리에서 해당 어셈블리가 참조됩니다. 이 유틸리티 클래스는 다양한 서버 응용 프로그램에서 사용되므로 신중하게 검토되고 모든 보안 문제가 해결됩니다. 그런 후에 이 유틸리티 클래스가 포함된 어셈블리에 AllowPartiallyTrustedCallers 특성이 적용되어 SAFE 또는 EXTERNAL_ACCESS 권한 집합으로 표시된 어셈블리에 포함된 CLR 통합 개체에서 유틸리티 클래스와 메서드가 별도의 어셈블리에 있는 경우에도 사용할 수 있게 합니다. AllowPartiallyTrustedCallers 특성이 어떻게 사용되는지에 대한 예를 보려면 CodePlex에서 제공하는 결과 집합 예제를 참조하십시오. 자세한 내용은 SQL Server 데이터베이스 엔진 예제를 참조하십시오.

참고 항목

개념