Udostępnij za pośrednictwem


Tworzenie zestawu

Dotyczy:programu SQL Server

Zarządzane obiekty bazy danych, takie jak procedury składowane lub wyzwalacze, są kompilowane, a następnie wdrażane w jednostkach nazywanych zestawem. Zarządzane zestawy DLL muszą być zarejestrowane w programie SQL Server, zanim będzie można używać funkcji, które udostępnia zestaw. Aby zarejestrować zestaw w bazie danych programu SQL Server, użyj instrukcji CREATE ASSEMBLY. W tym artykule omówiono sposób rejestrowania zestawu w bazie danych przy użyciu instrukcji CREATE ASSEMBLY oraz sposobu określania ustawień zabezpieczeń zestawu.

Instrukcja CREATE ASSEMBLY

Instrukcja CREATE ASSEMBLY służy do tworzenia zestawu w bazie danych. Oto przykład:

CREATE ASSEMBLY SQLCLRTest
    FROM 'C:\MyDBApp\SQLCLRTest.dll';

Klauzula FROM określa nazwę ścieżki zestawu do utworzenia. Ta ścieżka może być ścieżką Universal Naming Convention (UNC) lub ścieżką pliku fizycznego, która jest lokalna dla maszyny.

Program SQL Server nie zezwala na rejestrowanie różnych wersji zestawu o tej samej nazwie, kulturze i kluczu publicznym.

Istnieje możliwość utworzenia zestawów odwołujących się do innych zestawów. Po utworzeniu zestawu w programie SQL Server program SQL Server tworzy również zestawy, do których odwołuje się zestaw na poziomie głównym, jeśli przywoływały zestawy nie zostały jeszcze utworzone w bazie danych.

Użytkownicy bazy danych lub role użytkowników otrzymują uprawnienia do tworzenia, a zatem własnych zestawów w bazie danych. Aby tworzyć zestawy, użytkownik bazy danych lub rola powinna mieć uprawnienie CREATE ASSEMBLY.

Zestaw może się odwoływać tylko do innych zestawów, jeśli:

  • Zestaw, który jest wywoływany lub przywoływał, jest własnością tego samego użytkownika lub roli.
  • Zestaw, który jest wywoływany lub przywoływał, został utworzony w tej samej bazie danych.

Określanie zabezpieczeń podczas tworzenia zestawów

Podczas tworzenia zestawu w bazie danych programu SQL Server można określić jeden z trzech różnych poziomów zabezpieczeń, w których kod może działać: SAFE, EXTERNAL_ACCESSlub UNSAFE. Po uruchomieniu instrukcji CREATE ASSEMBLY niektóre kontrole są wykonywane na zestawie kodu, co może spowodować niepowodzenie rejestracji zestawu na serwerze.

SAFE jest domyślnym zestawem uprawnień i działa w większości scenariuszy. Aby określić dany poziom zabezpieczeń, należy zmodyfikować składnię instrukcji CREATE ASSEMBLY w następujący sposób:

CREATE ASSEMBLY SQLCLRTest
    FROM 'C:\MyDBApp\SQLCLRTest.dll'
    WITH PERMISSION_SET = SAFE;

Istnieje również możliwość utworzenia zestawu z zestawem z uprawnieniami SAFE przez pominięcie trzeciego wiersza poprzedniego.

CREATE ASSEMBLY SQLCLRTest
    FROM 'C:\MyDBApp\SQLCLRTest.dll';

Gdy kod w zestawie działa w ramach zestawu SAFE zestawu uprawnień, może wykonywać tylko obliczenia i dostęp do danych na serwerze za pośrednictwem dostawcy zarządzanego w procesie.

Tworzenie zestawów EXTERNAL_ACCESS i NIEBEZPIECZNYCH

EXTERNAL_ACCESS dotyczy scenariuszy, w których kod musi uzyskiwać dostęp do zasobów spoza serwera, takich jak pliki, sieć, rejestr i zmienne środowiskowe. Za każdym razem, gdy serwer uzyskuje dostęp do zasobu zewnętrznego, personifikuje kontekst zabezpieczeń użytkownika wywołującego kod zarządzany.

UNSAFE uprawnienie do kodu dotyczy sytuacji, w których zestaw nie jest weryfikowalny lub wymaga dodatkowego dostępu do ograniczonych zasobów, takich jak interfejs API Win32.

Aby utworzyć zestaw EXTERNAL_ACCESS lub UNSAFE w programie SQL Server, należy spełnić jeden z następujących dwóch warunków:

  1. Zestaw ma silną nazwę podpisaną lub Authenticode podpisaną przy użyciu certyfikatu. Ta silna nazwa (lub certyfikat) jest tworzona wewnątrz programu SQL Server jako klucz asymetryczny (lub certyfikat) i ma odpowiednie identyfikatory logowania z uprawnieniami EXTERNAL ACCESS ASSEMBLY (w przypadku zestawów dostępu zewnętrznego) lub uprawnieniami UNSAFE ASSEMBLY (w przypadku niebezpiecznych zestawów).

  2. Właściciel bazy danych (DBO) ma uprawnienie EXTERNAL ACCESS ASSEMBLY (dla zestawów EXTERNAL ACCESS) lub UNSAFE ASSEMBLY (w przypadku zestawów UNSAFE), a baza danych ma właściwość bazy danych TRUSTWORTHY ustawioną na ON.

Dwa wymienione wcześniej warunki są również sprawdzane w czasie ładowania zestawu (w tym wykonywanie). Aby załadować zestaw, należy spełnić co najmniej jeden z warunków.

Zalecamy, aby właściwość bazy danych GODNA ZAUFANIA w bazie danych nie jest ustawiona na ON tylko do uruchamiania kodu środowiska uruchomieniowego języka wspólnego (CLR) w procesie serwera. Zamiast tego zalecamy utworzenie klucza asymetrycznego z pliku zestawu w bazie danych master. Następnie należy utworzyć identyfikator logowania mapowany na ten klucz asymetryczny, a nazwa logowania musi zostać udzielona EXTERNAL ACCESS ASSEMBLY lub UNSAFE ASSEMBLY uprawnienia.

Poniższe instrukcje Transact-SQL wykonują kroki wymagane do utworzenia klucza asymetrycznego, zamapuj identyfikator logowania na ten klucz, a następnie przyznaj EXTERNAL_ACCESS uprawnienia do logowania. Przed uruchomieniem instrukcji CREATE ASSEMBLY należy uruchomić następujące instrukcje Transact-SQL.

USE master;
GO

CREATE ASYMMETRIC KEY SQLCLRTestKey
     FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';

CREATE LOGIN SQLCLRTestLogin
    FROM ASYMMETRIC KEY SQLCLRTestKey;

GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;
GO

Nuta

Aby skojarzyć się z kluczem asymetrycznym, musisz utworzyć nowe dane logowania. To logowanie jest używane tylko do udzielania uprawnień. Nie musi być skojarzona z użytkownikiem ani używana w aplikacji.

Aby utworzyć zestaw EXTERNAL ACCESS, twórca musi określić uprawnienia EXTERNAL ACCESS podczas tworzenia zestawu:

CREATE ASSEMBLY SQLCLRTest
    FROM 'C:\MyDBApp\SQLCLRTest.dll'
    WITH PERMISSION_SET = EXTERNAL_ACCESS;

Poniższe instrukcje Transact-SQL wykonują kroki wymagane do utworzenia klucza asymetrycznego, zamapuj identyfikator logowania na ten klucz, a następnie przyznaj UNSAFE uprawnienia do logowania. Przed uruchomieniem instrukcji CREATE ASSEMBLY należy uruchomić następujące instrukcje Transact-SQL.

USE master;
GO

CREATE ASYMMETRIC KEY SQLCLRTestKey
     FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';

CREATE LOGIN SQLCLRTestLogin
    FROM ASYMMETRIC KEY SQLCLRTestKey;

GRANT UNSAFE ASSEMBLY TO SQLCLRTestLogin;
GO

Aby określić, że zestaw jest ładowany z uprawnieniami UNSAFE, należy określić zestaw uprawnień UNSAFE podczas ładowania zestawu na serwer:

CREATE ASSEMBLY SQLCLRTest
    FROM 'C:\MyDBApp\SQLCLRTest.dll'
    WITH PERMISSION_SET = UNSAFE;

Aby uzyskać więcej informacji na temat uprawnień dla każdego z ustawień, zobacz zabezpieczenia integracji środowiska CLR.