2010-07-09 2 views
3

.net 3.5에서 물건을 사용하는 저장 프로 시저를 만들려면 CLR을 사용해야합니다. 나는 그것을 할 수 없습니다 PERMISSION_SET = 안전하지 않은 넣지 않으면 그냥 죽게이 오류를 나에게SQL 2005에 PERMISSION_SET = UNSAFE를 넣는 것은 좋지 않습니까?

배포 오류 SQL01268 줄 것이다 : 닷넷하는 SqlClient 데이터 공급자 : 메시지 6503, 수준 16, 상태 (12) , Line 1 Assembly 'system.core, version = 3.5.0.0, culture = 중립, publickeytoken = b77a5c561934e089.' 이 (가) SQL 카탈로그에 없습니다. 배치가 실행되는 동안 오류가 발생했습니다.

그래서이 기사

http://weblogs.asp.net/paulomorgado/archive/2009/06/13/playing-with-sql-server-clr-integration-part-iv-deploying-to-sql-server-2005.aspx

을 발견 그리고 마지막 줄이

"이제 DBA가 확실히 나에게 이것을 사용하지 것이라고하지만, 그것을 구축하는 재미 . " 그가 안전하지 않은 것으로 설정된 권한을 언급하고 있는지 확실하지 않습니다.

이렇게하면 큰 구멍이 생길 수 있습니까?

답변

5

이 어셈블리가

SAFE 수행 할 수있는 작업을 제한하는 세 가지 PERMISSION_SET 옵션은 - 관리 코드

EXTERNAL_ACCESS에 어셈블리를 제한 - 등등 파일, 네트워크 리소스에 액세스 할 수 있습니다

UNSAFE - 무제한 액세스 - 관리되지 않는 코드의 실행 포함

MSDN docs는 다음과 같은 GUI를 제공합니다. 댄스

UNSAFE를 지정하면 어셈블리의 코드가 SQL Server 프로세스 공간에서 자유롭게 SQL Server의 견고성을 손상시킬 수있는 작업을 자유롭게 수행 할 수 있습니다. UNSAFE 어셈블리는 잠재적으로 SQL Server 또는 공용 언어 런타임의 보안 시스템을 파괴 할 수도 있습니다. UNSAFE 사용 권한은 신뢰할 수있는 어셈블리에만 부여해야합니다.

어셈블리에 .NET 3.5의 기능 만 사용하는 경우 왜 UNSAFE 액세스 권한이 필요한지 알 수 없습니다.

System.Core 라이브러리에서 허용되지 않는 유형 또는 멤버 중 하나를 사용하고있을 가능성이 있습니다. Microsoft에는 이러한 목록이 있습니다. Disallowed Types and Members in System.Core.dll

여기에 더 많은 정보가 있습니다. Host Protection Attributes and CLR Integration Programming

+0

그래서 system.core는 꽤 좋을 것입니다. 그때에 신뢰해야합니까? – chobo2

+0

잘 모르겠습니다 - 편집의 두 링크를 살펴보십시오. –

+0

난 그냥 SQL Server 2005 CLR 사용자 정의 함수에서 확장 메서드를 사용하여 노력하고 동일한 문제가있었습니다. 내 로컬 컴퓨터에서 잘 작동했다, SQL 2008 dev에 버전을 실행 해요. 내 확장 클래스가 Static으로 표시 되었기 때문에 위의 링크를 통해 읽은 후에는 안전하지 않을 수 있다고 생각합니다. 스레딩 때문에 가능하지 않을 수 있습니다. 그래서 확장 메서드를 제거하고 별도의 유틸리티 클래스를 만들었고 모두 잘되었습니다. –

-3

"UNSAFE"의 명확한 부분은 유감이지만 죄송합니다.

할 수 있습니다 :

를 추가 누수 소개 SQL 서버 및 OS 설치를 파괴 후자의 두 가지 부작용이있을 수 있습니다 ...

+0

안전하지 않은 것은 많은 것을 의미 할 수 있습니다. 설치하려고하는 것이 확인되지 않은 제 3 자로부터 왔고 나쁜 일을 할 수 있음을 의미 할 수 있습니다. – chobo2

+0

"안전하지 않음"을 의미하지만, SQL Server는 내 것이 아닙니다. UNSAFE가 필요한 것은 물론 클라이언트에 있어야합니다. – gbn

관련 문제