Dll innej firmy w SQL Server CLR

14

Muszę użyć biblioteki DLL innej firmy w kodzie wyzwalacza c # w programie SQL Server CLR

Ale kiedy próbuję dodać odwołanie, pokazuje tylko niektóre biblioteki DLL z SQL Server.

Jak mogę dodać swoją bibliotekę DLL innej firmy do SQL Server?

Solomon Rutzky
źródło
2
W ten sam sposób dodajesz dowolne zestawy SQL CLR ?

Odpowiedzi:

14

Możesz dodawać odniesienia tylko do tych zestawów, które zostały zarejestrowane na serwerze Sql Server. Jeśli nie są zarejestrowane, nie pojawią się w oknie dialogowym Dodaj odniesienia.

Aby zarejestrować bibliotekę DLL, musisz wykonać kilka czynności, po pierwsze musisz ponownie skonfigurować bazę danych:

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

Po wykonaniu tej czynności serwer Sql jest włączony CLR. Następnie musisz zarejestrować swój zespół:

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

Jeśli ten ostatni skrypt działa poprawnie, zespół jest teraz zarejestrowany i pojawi się w oknie dialogowym Dodaj odniesienia.

Należy jednak wziąć pod uwagę bezpieczeństwo aplikacji w konfiguracji CLR serwera Sql Server:

  1. Wolisz zarejestrować zestaw jako SAFE, tylko w wyjątkowych okolicznościach powinieneś użyć EXTERNAL_ACCESSlub UNSAFE.
  2. Nie oczekuj, że będziesz w stanie zrobić wszystko, co możesz na CLR z pełnym zaufaniem (tj. Nie CLR hostowanym przez Sql Server) - SQLCLR to środowisko uruchomieniowe w trybie piaskownicy.
  3. Nie próbuj ładować zestawów dynamicznie, ponieważ Assembly.Load()jest to celowo ograniczone.
  4. Może być konieczne upewnienie się, że biblioteka innej firmy jest podpisana za pomocą klucza publicznego, jeśli planujesz używać UNSAFE.
  5. Wykonywanie kodu działa w kontekście tożsamości usługi z serwerem Sql Server (myślę!)
  6. Dostęp do bazy danych z hostowanego zestawu (np. Przez context connection = true;) działa w kontekście podłączonego użytkownika, więc musisz upewnić się, że wiesz, jaki dostęp ma ta biblioteka do twoich danych.
Matthew Abbott
źródło
w 4 powyżej piszesz, że musisz podpisać zgromadzenie. Dostaję tę część i byłem w stanie to zrobić za pomocą samopodpisanych instrukcji tutaj: geekswithblogs.net/ktegels/archive/2006/02/16/… Ale jak zainstalować certyfikat, gdy nie masz klucza prywatnego, tj. Kiedy zespół został utworzony i podpisany przez zaufaną stronę trzecią? O ile mogę stwierdzić w powyższym linku, utworzenie certyfikatu wymaga obecności klucza prywatnego. To sprawia, że ​​jest to niemożliwe?
JorgeSandoval,
2
Również - oznaczenie db jako godnego zaufania jest ryzykowne (i nie jest konieczne w przypadku instalacji „Bezpiecznej”). Godny zaufania jest jeden sposób obejścia konieczności podpisywania zespołów w celu uzyskania zewnętrznych / niebezpiecznych uprawnień, ale nie jest to zalecane, ponieważ jakikolwiek zainstalowany zespół CLR będzie zaufany ...
JorgeSandoval
5

Zakładam, że pytasz o alternatywne sposoby instalowania zestawów SQL CLR z Visual Studio.

Posiadanie kodu w Visual Studio nie jest wymagane.

Wdrażanie obiektów bazy danych CLR na MSDN szczegółowo opisuje opcje, w tym instrukcje SQL i skrypty wdrażania.

Oded
źródło
1

Używam bardzo dużej biblioteki DLL innej firmy, która pobiera stronę internetową i konwertuje ją do formatu PDF.

Plik PDF jest zapisywany w udziale plików, a baza danych jest aktualizowana pod względem lokalizacji i typu.

To jest 3-etapowy proces:

  1. Utwórz aplikację konsoli, która korzysta z zewnętrznego pliku DLL do utworzenia pliku PDF i zaakceptuj adres URL i ścieżkę pliku jako parametry oraz zwróci rozmiar pliku PDF i liczbę stron.

  2. Utwórz procedurę składowaną CLR, która następnie wywołuje aplikację konsoli na serwerze

  3. Zawijam to wszystko w jedną procedurę składowaną, która wywołuje aplikację CLR w celu utworzenia pliku PDF, a następnie zapisuję o niej metadane w bazie danych.

Zdaję sobie sprawę, że to nie jest idealne i w żadnym wypadku nie powinieneś robić niczego tak szalonego w środku spustu!

Wspominam o tym tutaj tylko w przypadku innych osób, które mają pytania dotyczące używania bibliotek DLL innych firm w swoich CLR.

Mam nadzieję, że po wyłączeniu konsoli cmd.exe w celu uruchomienia biblioteki DLL innej firmy, zamiast uruchamiać wszystko w procedurze, jeśli ulegnie awarii, nie wpłynie to negatywnie na SQL Server. Mam taką nadzieję.

Proszę o komentarz, jeśli jest to naprawdę złe podejście i dlaczego.

MikeTeeVee
źródło