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_ACCESS
lub 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:
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 uprawnieniamiUNSAFE ASSEMBLY
(w przypadku niebezpiecznych zestawów).Właściciel bazy danych (DBO) ma uprawnienie
EXTERNAL ACCESS ASSEMBLY
(dla zestawówEXTERNAL ACCESS
) lubUNSAFE ASSEMBLY
(w przypadku zestawówUNSAFE
), a baza danych ma właściwość bazy danych TRUSTWORTHY ustawioną naON
.
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.
Powiązana zawartość
- zarządzanie zestawami integracji CLR
- alter an assembly
- usuwanie zestawu
- zabezpieczeń dostępu kodu integracji środowiska CLR
- właściwość godnej zaufania bazy danych