Projektowanie zestawów
Dotyczy:programu SQL Server
W tym artykule opisano następujące czynniki, które należy wziąć pod uwagę podczas projektowania zestawów:
- Tworzenie pakietów zestawów
- Zarządzanie zabezpieczeniami zestawów
- Ograniczenia dotyczące zestawów
Zestawy pakietów
Zestaw może zawierać funkcje dla więcej niż jednej procedury lub typu programu SQL Server w klasach i metodach. W większości przypadków warto spakować funkcjonalność procedur, które wykonują powiązane funkcje w ramach tego samego zestawu, zwłaszcza jeśli te procedury współdzielą klasy, których metody nazywają siebie nawzajem. Na przykład klasy wykonujące zadania zarządzania wpisami danych dla wyzwalaczy środowiska uruchomieniowego języka wspólnego (CLR) i procedury składowane CLR można spakować w tym samym zestawie. Wynika to z faktu, że metody dla tych klas są bardziej prawdopodobne, aby wywoływać siebie nawzajem niż metody mniej powiązanych zadań.
Podczas pakowania kodu do zestawu należy wziąć pod uwagę następujące kwestie:
Zdefiniowane przez użytkownika typy i indeksy środowiska CLR zależne od funkcji zdefiniowanych przez użytkownika środowiska CLR mogą spowodować, że utrwalone dane będą znajdować się w bazie danych, która zależy od zestawu. Modyfikowanie kodu zestawu jest często bardziej złożone w przypadku utrwalania danych, które zależą od zestawu w bazie danych. Dlatego lepiej jest oddzielić kod, na którym polegają utrwalone zależności danych (takie jak typy zdefiniowane przez użytkownika i indeksy przy użyciu funkcji zdefiniowanych przez użytkownika) z kodu, który nie ma tych trwałych zależności danych. Aby uzyskać więcej informacji, zobacz Implementowanie zestawów i ALTER ASSEMBLY.
Jeśli kawałek kodu zarządzanego wymaga większego uprawnienia, lepiej jest oddzielić ten kod do oddzielnego zestawu od kodu, który nie wymaga wyższych uprawnień.
Zarządzanie zabezpieczeniami zestawów
Możesz kontrolować, ile zestaw może uzyskać dostęp do zasobów chronionych przez zabezpieczenia dostępu kodu platformy .NET podczas uruchamiania kodu zarządzanego. W tym celu należy określić jeden z trzech zestawów uprawnień podczas tworzenia lub modyfikowania zestawu: SAFE
, EXTERNAL_ACCESS
lub UNSAFE
.
Uprawnienie SAFE
SAFE
jest domyślnym zestawem uprawnień i jest najbardziej restrykcyjny. Kod uruchamiany przez zestaw z uprawnieniami SAFE
nie może uzyskać dostępu do zasobów systemu zewnętrznego, takich jak pliki, sieć, zmienne środowiskowe lub rejestr.
SAFE
kod może uzyskiwać dostęp do danych z lokalnych baz danych programu SQL Server lub wykonywać obliczenia i logikę biznesową, które nie obejmują uzyskiwania dostępu do zasobów spoza lokalnych baz danych.
Większość zestawów wykonuje zadania obliczeniowe i zarządzania danymi bez konieczności uzyskiwania dostępu do zasobów poza programem SQL Server. Dlatego zalecamy SAFE
jako zestaw uprawnień zestawu.
uprawnienia EXTERNAL_ACCESS
EXTERNAL_ACCESS
umożliwia zestawom dostęp do niektórych zasobów systemu zewnętrznego, takich jak pliki, sieci, usługi sieci Web, zmienne środowiskowe i rejestr. Tylko identyfikatory logowania programu SQL Server z uprawnieniami EXTERNAL ACCESS
mogą tworzyć zestawy EXTERNAL_ACCESS
.
Zestawy SAFE i EXTERNAL_ACCESS
mogą zawierać tylko kod, który jest weryfikowalny. Oznacza to, że te zestawy mogą uzyskiwać dostęp tylko do klas za pośrednictwem dobrze zdefiniowanych punktów wejścia, które są prawidłowe dla definicji typu. W związku z tym nie mogą oni arbitralnie uzyskiwać dostępu do pamięci, które nie są własnością kodu. Ponadto nie mogą wykonywać operacji, które mogą mieć negatywny wpływ na niezawodność procesu programu SQL Server.
UPRAWNIENIE NIEBEZPIECZNE
UNSAFE
zapewnia zestawom nieograniczony dostęp do zasobów zarówno w programie SQL Server, jak i poza nimi. Kod uruchomiony z poziomu zestawu UNSAFE
może wywoływać kod niezarządzany.
Ponadto określenie UNSAFE
umożliwia kodowi w zestawie wykonywanie operacji uważanych za niebezpieczne dla typu przez weryfikatora CLR. Te operacje mogą potencjalnie uzyskiwać dostęp do pamięci w przestrzeni procesowej programu SQL Server w sposób niekontrolowany.
UNSAFE
zestawy mogą również potencjalnie odwrócić system zabezpieczeń programu SQL Server lub środowiska uruchomieniowego języka wspólnego.
UNSAFE
uprawnienia powinny być przyznawane tylko do wysoce zaufanych zestawów przez doświadczonych deweloperów lub administratorów. Tylko członkowie sysadmin stałej roli serwera mogą tworzyć zestawy UNSAFE
.
Ograniczenia dotyczące zestawów
Program SQL Server wprowadza pewne ograniczenia dotyczące kodu zarządzanego w zestawach, aby upewnić się, że mogą działać w niezawodny i skalowalny sposób. Oznacza to, że niektóre operacje, które mogą naruszyć niezawodność serwera, nie są dozwolone w SAFE
i zestawach EXTERNAL_ACCESS
.
Niedozwolone atrybuty niestandardowe
Zestawy nie mogą być adnotacjami z następującymi atrybutami niestandardowymi:
System.ContextStaticAttribute
System.MTAThreadAttribute
System.Runtime.CompilerServices.MethodImplAttribute
System.Runtime.CompilerServices.CompilationRelaxationsAttribute
System.Runtime.Remoting.Contexts.ContextAttribute
System.Runtime.Remoting.Contexts.SynchronizationAttribute
System.Runtime.InteropServices.DllImportAttribute
System.Security.Permissions.CodeAccessSecurityAttribute
System.STAThreadAttribute
System.ThreadStaticAttribute
Ponadto zestawy SAFE
i EXTERNAL_ACCESS
nie mogą być oznaczone adnotacjami z następującymi atrybutami niestandardowymi:
System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute
Niedozwolone interfejsy API programu .NET Framework
Nie można wywołać żadnego interfejsu API programu .NET Framework z adnotacją z jednym z niedozwolonych HostProtectionAttributes
z SAFE
i zestawów EXTERNAL_ACCESS
.
HostProtectionAttribute.SelfAffectingProcessMgmt
HostProtectionAttribute.SelfAffectingThreading
HostProtectionAttribute.Synchronization
HostProtectionAttribute.SharedState
HostProtectionAttribute.ExternalProcessMgmt
HostProtectionAttribute.ExternalThreading
HostProtectionAttribute.SecurityInfrastructure
HostProtectionAttribute.MayLeakOnAbort
HostProtectionAttribute.UI
Obsługiwane zestawy programu .NET Framework
Każdy zestaw, do którego odwołuje się zestaw niestandardowy, musi zostać załadowany do programu SQL Server przy użyciu CREATE ASSEMBLY
. Następujące zestawy programu .NET Framework są już ładowane do programu SQL Server i dlatego mogą być przywoływane przez zestawy niestandardowe bez konieczności używania CREATE ASSEMBLY
.
mscorlib.dll
CustomMarshalers.dll
Microsoft.VisualBasic.dll
Microsoft.VisualC.dll
System.Configuration.dll
System.Core.dll
System.Data.OracleClient.dll
System.Data.SqlXml.dll
System.Data.dll
System.Deployment.dll
System.Security.dll
System.Transactions.dll
System.Web.Services.dll
System.Xml.Linq.dll
system.Xml.dll
System.dll
Powiązana zawartość
- zestawów
(aparat bazy danych) - zabezpieczeń integracji środowiska
CLR