SQL Server CLR의 타사 dll


14

SQL Server CLR의 트리거 C # 코드에서 타사 DLL을 사용해야합니다.

그러나 참조를 추가하려고하면 SQL Server의 일부 DLL 만 표시됩니다.

타사 dll 을 SQL Server에 어떻게 추가 합니까?


2
같은 방법으로 SQL CLR 어셈블리 를 추가 할 수 있습니까?

답변:


14

Sql Server에 등록 된 어셈블리에만 참조를 추가 할 수 있습니다. 등록되지 않은 경우 참조 추가 대화 상자에 표시되지 않습니다.

DLL을 등록하려면 여러 단계가 필요합니다. 먼저 데이터베이스를 다시 구성해야합니다.

ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;

이 작업이 완료되면 Sql Server는 CLR을 사용할 수 있습니다. 다음으로 어셈블리를 등록해야합니다.

CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE

이 마지막 스크립트가 올바르게 실행되면 이제 어셈블리가 등록되고 참조 추가 대화 상자에 나타납니다.

고려해야 할 사항은 Sql Server CLR 구성의 응용 프로그램 보안입니다.

  1. 같은 어셈블리를 등록 할 안함 SAFE, 단, 예외적 인 경우에만 사용한다 EXTERNAL_ACCESSUNSAFE.
  2. SQL Server가 호스팅하는 CLR이 아닌 완전 신뢰 CLR에서 수행 할 수있는 모든 작업을 수행 할 수있는 것은 아닙니다. SQLCLR은 샌드 박스 된 런타임입니다.
  3. Assembly.Load()의도적으로 제한 되어 있으므로 어셈블리를 동적으로 시도하거나로드하지 마십시오 .
  4. 를 사용하려는 경우 타사 라이브러리에 공개 키로 서명되어 있는지 확인해야 할 수 있습니다 UNSAFE.
  5. 코드 실행은 Sql Server를 실행하는 서비스의 정체성과 관련하여 실행됩니다 (생각합니다!)
  6. 호스팅 된 어셈블리 (예 :를 통해 context connection = true;) 에서 수행 된 데이터베이스 액세스는 연결된 사용자의 컨텍스트에서 실행되므로 해당 라이브러리에서 데이터에 대한 액세스 권한을 알고 있어야합니다.

위의 4에서 어셈블리에 서명해야합니다. 나는 그 부분을 얻었고 여기에 자체 서명 된 지침을 통해 그것을 할 수있었습니다 : geekswithblogs.net/ktegels/archive/2006/02/16/… 그러나 개인 키가 없을 때, 즉 언제 인증서를 설치하는 방법 신뢰할 수있는 제 3자가 어셈블리를 작성하고 서명 했습니까? 위의 링크에서 인증서를 만들려면 개인 키가 있어야합니다. 불가능한 것 같습니까?
JorgeSandoval

2
또한 db를 신뢰할 수있는 것으로 표시하는 것은 위험합니다 ( "안전한"어셈블리 설치에는 필요하지 않음). 신뢰할 수있는 방법은 외부 / 안전하지 않은 권한에 대해 어셈블리에 서명해야하는 한 가지 방법이지만 설치된 CLR 어셈블리는 신뢰할 수 있으므로 권장되지 않습니다 ...
JorgeSandoval

5

Visual Studio에서 SQL CLR 어셈블리를 설치하는 대안에 대해 문의한다고 가정합니다.

Visual Studio에서 코드를 가질 필요는 없습니다.

MSDN에 CLR 데이터베이스 개체 배포 에는 SQL 문 및 배포 스크립트를 포함한 옵션이 자세히 설명되어 있습니다.


1

웹 페이지를 가져 와서 PDF로 변환하는 매우 큰 타사 DLL을 사용합니다.

PDF는 파일 공유에 저장되고 데이터베이스는 위치 및 유형에 따라 업데이트됩니다.

이것은 3 단계 프로세스입니다.

  1. 써드 파티 DLL을 사용하여 PDF를 작성하고 URL 및 FilePath를 매개 변수로 승인하고 PDF 크기와 페이지 수를 리턴하는 콘솔 앱을 작성하십시오.

  2. 서버에서 콘솔 앱을 호출하는 CLR 저장 프로 시저 만들기

  3. 이 모든 것을 CLR 앱을 호출하여 PDF를 생성하는 단일 저장 프로 시저로 래핑 한 다음 메타 데이터를 데이터베이스에 씁니다.

나는 이것이 완벽하지 않다는 것을 알고 있으며, 방아쇠 안에서 너무 미친 짓을해서는 안됩니다!

CLR에서 타사 DLL을 사용하는 방법에 대한 질문이있는 다른 사람들에게만 언급합니다.

cmd.exe 콘솔을 회전시켜 타사 DLL을 실행하여 모든 in-proc을 실행하는 대신 충돌이 발생하더라도 SQL Server에 큰 영향을 미치지 않기를 바랍니다. 그것이 내가 희망하는 것입니다.

이것이 정말 나쁜 접근 방법인지 왜 그런지 의견을 말하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.