출처 : http://www.overtop.co.kr/226



CLR을 사용하는 사용자데이터베이스를 이전 후 CLR 의 함수들을 호출하면 오류가 발생한다.

 

[오류메세지]

메시지 10314, 수준 16, 상태 11, 줄 6

어셈블리 ID 65536을(를) 로드하는 동안 Microsoft .NET Framework에서 오류가 발생했습니다. 서버의 리소스가 부족하거나 어셈블리가 PERMISSION_SET = EXTERNAL_ACCESS 또는 UNSAFE로 트러스트되지 않은 것 같습니다. 쿼리를 다시 실행하거나 설명서에서 어셈블리 트러스트 문제를 해결하는 방법을 참조하십시오. 이 오류에 대한 자세한 내용은 다음을 참조하십시오:

System.IO.FileLoadException: 파일이나 어셈블리 'valiatephonenumbers, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 보안 관련 오류가 발생했습니다. (예외가 발생한 HRESULT: 0x8013150A)

 

[해결책]

You may receive an error message when you try to run an existing CLR object or create an assembly that has the external_access or unsafe permission set on a database that is attached or restored from a different server

https://support.microsoft.com/en-us/kb/918040

 

[설명]

CLR 의 권한중 외부엑세스(Extername_Acess) or 제한없음(UnSafe) 로 설정되어 있는 데이터베이스를 다른 서버로 이전 후 CLR을 호출하면 오류가 발생한다.

 

오류가 2가지 발생하는 듯하다.

1. SET TRUSTWORTHY ON 옵션상태인 데이터베이스를 백업하거나 COPY해서 복원을 하게되면 OFF 상태로 복원이 된다. 신기하다. ㅋㅋ

2. 데이터베이스 소유자가 틀리면 오류가 발생한다.

USE [CLRTest]

GO

 

EXEC sp_changedbowner 'sa'

 

위 2가지를 확인하여 트러블슈팅을 하면 될 것 같다.

 

 

 

#. Case

ALTER ASSEMBLY [ValiatePhoneNumbers]

WITH PERMISSION_SET = EXTERNAL_ACCESS;

 

/*

OR

CREATE ASSEMBLY ValiatePhoneNumbers from 'E:\SQLData9\ValiatePhoneNumbers.dll'

WITH PERMISSION_SET = EXTERNAL_ACCESS;

 

*/

/*

메시지 10327, 수준 14, 상태 1, 줄 12

어셈블리 'ValiatePhoneNumbers'에 PERMISSION_SET = EXTERNAL_ACCESS에 대한 권한이 없으므로 어셈블리

'ValiatePhoneNumbers'에 대한 ALTER ASSEMBLY가 실패했습니다. 어셈블리는 DBO(데이터베이스 소유자)에게 EXTERNAL ACCESS ASSEMBLY 권한이 있고 데이터베이스에 TRUSTWORTHY 데이터베이스 속성이 있는 경우 또는 어셈블리가 현재 인증서로 서명되어 있거나 EXTERNAL ACCESS ASSEMBLY 권한이 있는 관련 로그인을 소유한 비대칭 키로 서명되어 있는 경우에 권한이 부여됩니다.

*/

 

[해결]

// EXTERNAL_ACCESS or unsafe 로 설정을 하기 위해서는 아래와 같은 옵션 이어야 가능하다.

 

ALTER DATABASE CLRTest SET TRUSTWORTHY ON;

 

 

[참고문서]

TRUSTWORTHY 데이터베이스 속성

https://msdn.microsoft.com/ko-kr/library/ms187861(v=sql.120).aspx



출처: http://www.overtop.co.kr/226 [SQLin]

Posted by 요지
,