Zabezpieczenia dostępu kodu integracji środowiska CLR
Dotyczy:programu SQL Server
Środowisko uruchomieniowe języka wspólnego (CLR) obsługuje model zabezpieczeń nazywany zabezpieczeniami dostępu kodu dla kodu zarządzanego. W tym modelu uprawnienia są przyznawane zestawom na podstawie tożsamości kodu. Aby uzyskać więcej informacji, zobacz Code Access Security.
Zasady zabezpieczeń określające uprawnienia przyznane zestawom są zdefiniowane w trzech różnych miejscach:
zasad maszyny: te zasady obowiązują dla całego kodu zarządzanego uruchomionego na maszynie, na której zainstalowano program SQL Server.
zasady użytkownika: te zasady obowiązują w przypadku kodu zarządzanego hostowanego przez proces. W przypadku programu SQL Server zasady użytkownika są specyficzne dla konta systemu Windows, na którym działa usługa SQL Server.
zasady hosta: te zasady są konfigurowane przez hosta środowiska CLR (w tym przypadku programu SQL Server), który jest w mocy dla kodu zarządzanego uruchomionego na tym hoście.
Mechanizm zabezpieczeń dostępu do kodu obsługiwany przez clR jest oparty na założeniu, że środowisko uruchomieniowe może hostować zarówno w pełni zaufany, jak i częściowo zaufany kod. Zasoby chronione przez zabezpieczenia dostępu do kodu CLR są zwykle opakowane przez interfejsy programowania aplikacji zarządzanych, które wymagają odpowiednich uprawnień przed zezwoleniem na dostęp do zasobu. Zapotrzebowanie na uprawnienie jest spełnione tylko wtedy, gdy wszystkie osoby wywołujące (na poziomie zestawu) w stosie wywołań mają odpowiednie uprawnienia do zasobu.
Zestaw uprawnień zabezpieczeń dostępu do kodu, które są przyznawane do kodu zarządzanego podczas uruchamiania w programie SQL Server, jest skrzyżowaniem zestawu uprawnień przyznanych przez poprzednie trzy poziomy zasad. Nawet jeśli program SQL Server przyznaje zestaw uprawnień do zestawu załadowanego w programie SQL Server, ostateczne ustawienie uprawnień nadanych kodowi użytkownika może być bardziej ograniczone przez zasady na poziomie użytkownika i komputera.
Zestawy uprawnień na poziomie zasad hosta programu SQL Server
Zestaw uprawnień zabezpieczeń dostępu kodu przyznanych zestawom przez poziom zasad hosta programu SQL Server jest określany przez zestaw uprawnień określony podczas tworzenia zestawu. Istnieją trzy zestawy uprawnień: SAFE
, EXTERNAL_ACCESS
i UNSAFE
(określone przy użyciu opcji PERMISSION_SET
CREATE ASSEMBLY).
Program SQL Server dostarcza poziom zasad zabezpieczeń na poziomie hosta do środowiska CLR podczas jego hostowania. Te zasady są dodatkowym poziomem zasad poniżej dwóch poziomów zasad, które są zawsze obowiązujące. Te zasady są ustawiane dla każdej domeny aplikacji utworzonej przez program SQL Server. Te zasady nie są przeznaczone dla domyślnej domeny aplikacji, która będzie obowiązywać, gdy program SQL Server tworzy wystąpienie środowiska CLR.
Zasady na poziomie hosta programu SQL Server to kombinacja stałych zasad programu SQL Server dla zestawów systemowych i zasad określonych przez użytkownika dla zestawów użytkowników.
Stałe zasady dla zestawów CLR i zestawów systemowych programu SQL Server przyznaje im pełne zaufanie.
Określona przez użytkownika część zasad hosta programu SQL Server jest oparta na właścicielu zestawu określającym jeden z trzech zasobników uprawnień dla każdego zestawu. Aby uzyskać więcej informacji na temat następujących uprawnień zabezpieczeń, zobacz zestaw .NET Framework SDK.
BEZPIECZNY
Dozwolone są tylko wewnętrzne obliczenia i dostęp do danych lokalnych.
SAFE
jest najbardziej restrykcyjnym zestawem uprawnień. Kod wykonywany przez zestaw z uprawnieniami SAFE
nie może uzyskać dostępu do zewnętrznych zasobów systemowych, takich jak pliki, sieć, zmienne środowiskowe lub rejestr.
SAFE
zestawy mają następujące uprawnienia i wartości:
Pozwolenie | Wartości/opis |
---|---|
SecurityPermission |
Execution : uprawnienie do wykonywania kodu zarządzanego. |
SqlClientPermission |
Context connection = true , context connection = yes : można używać tylko połączenia kontekstowego, a parametry połączenia mogą określać tylko wartość context connection=true lub context connection=yes .AllowBlankPassword = false : puste hasła nie są dozwolone. |
EXTERNAL_ACCESS
EXTERNAL_ACCESS
zestawy mają takie same uprawnienia jak zestawy SAFE
, z dodatkową możliwością uzyskiwania dostępu do zasobów systemu zewnętrznego, takich jak pliki, sieci, zmienne środowiskowe i rejestr.
EXTERNAL_ACCESS
zestawy mają również następujące uprawnienia i wartości:
Pozwolenie | Wartości/opis |
---|---|
DistributedTransactionPermission |
Unrestricted : transakcje rozproszone są dozwolone. |
DNSPermission |
Unrestricted : uprawnienie do żądania informacji z serwerów nazw domeny. |
EnvironmentPermission |
Unrestricted : dozwolony jest pełny dostęp do zmiennych środowiskowych systemu i użytkownika. |
EventLogPermission |
Administer : dozwolone są następujące akcje: tworzenie źródła zdarzeń, odczytywanie istniejących dzienników, usuwanie źródeł zdarzeń lub dzienników, reagowanie na wpisy, czyszczenie dziennika zdarzeń, nasłuchiwanie zdarzeń i uzyskiwanie dostępu do kolekcji wszystkich dzienników zdarzeń. |
FileIOPermission |
Unrestricted : dozwolony jest pełny dostęp do plików i folderów. |
KeyContainerPermission |
Unrestricted : dozwolony jest pełny dostęp do kontenerów kluczy. |
NetworkInformationPermission |
Access : dozwolone jest pingowanie. |
RegistryPermission |
Zezwala na prawa do odczytu do HKEY_CLASSES_ROOT , HKEY_LOCAL_MACHINE , HKEY_CURRENT_USER , HKEY_CURRENT_CONFIG i HKEY_USERS. |
SecurityPermission |
Assertion : możliwość potwierdzenia, że wszystkie wywołujące tego kodu mają wymagane uprawnienia do operacji.ControlPrincipal : możliwość manipulowania obiektem głównym.Execution : uprawnienie do wykonywania kodu zarządzanego.SerializationFormatter : możliwość świadczenia usług serializacji. |
SmtpPermission |
Access : połączenia wychodzące z portem 25 hosta SMTP są dozwolone. |
SocketPermission |
Connect : połączenia wychodzące (wszystkie porty, wszystkie protokoły) na adresie transportu są dozwolone. |
SqlClientPermission |
Unrestricted : dozwolony jest pełny dostęp do źródła danych. |
StorePermission |
Unrestricted : dozwolony jest pełny dostęp do magazynów certyfikatów X.509. |
WebPermission |
Connect : połączenia wychodzące z zasobami internetowymi są dozwolone. |
NIEBEZPIECZNY
UNSAFE
umożliwia zestawom nieograniczony dostęp do zasobów zarówno w programie SQL Server, jak i poza nimi. Kod wykonywany z poziomu zestawu UNSAFE
może również wywoływać kod niezarządzany.
zestawy UNSAFE
otrzymują FullTrust
.
Zalecane ustawienia uprawnień
SAFE
jest zalecanym ustawieniem uprawnień dla zestawów, które wykonują zadania obliczeniowe i zarządzania danymi bez uzyskiwania dostępu do zasobów poza programem SQL Server.
EXTERNAL_ACCESS
jest zalecana w przypadku zestawów, które uzyskują dostęp do zasobów spoza programu SQL Server.
EXTERNAL_ACCESS
zestawy domyślnie są wykonywane jako konto usługi programu SQL Server. Istnieje możliwość, że kod EXTERNAL_ACCESS
jawnie personifikować kontekst zabezpieczeń uwierzytelniania systemu Windows obiektu wywołującego. Ponieważ ustawieniem domyślnym jest wykonanie jako konto usługi programu SQL Server, uprawnienie do wykonywania EXTERNAL_ACCESS
powinno być podane tylko dla identyfikatorów logowania zaufanych do uruchamiania jako konta usługi.
Z punktu widzenia zabezpieczeń zestawy EXTERNAL_ACCESS
i UNSAFE
są identyczne. Jednak zestawy EXTERNAL_ACCESS
zapewniają różne zabezpieczenia niezawodności i niezawodności, które nie są w zestawach UNSAFE
.
Określenie UNSAFE
umożliwia kodowi w zestawie wykonywanie nielegalnych operacji na przestrzeni procesów programu SQL Server, co może potencjalnie naruszyć niezawodność i skalowalność programu SQL Server. Aby uzyskać więcej informacji na temat tworzenia zestawów CLR w programie SQL Server, zobacz Zarządzanie zestawami integracji CLR.
Ważny
Program SQL Server zawiera zestawy CLR używane przez aparat bazy danych w celu zapewnienia pewnych funkcji. Zestaw Microsoft.SQLServer.Types
dołączony do instalacji programu SQL Server jest wyświetlany w metadanych jako zestaw UNSAFE
. Jest to zgodnie z projektem. Te zestawy są domyślnie uważane za zaufane & bezpieczne.
Uzyskiwanie dostępu do zasobów zewnętrznych
Jeśli typ zdefiniowany przez użytkownika (UDT), procedura składowana lub inny typ zestawu konstrukcji jest zarejestrowany w zestawie uprawnień SAFE
, to kod zarządzany wykonywany w konstrukcji nie może uzyskać dostępu do zasobów zewnętrznych. Jeśli jednak określono zestawy uprawnień EXTERNAL_ACCESS
lub UNSAFE
, a kod zarządzany próbuje uzyskać dostęp do zasobów zewnętrznych, program SQL Server stosuje następujące reguły:
Jeśli | Wtedy |
---|---|
Kontekst wykonywania odpowiada identyfikatorowi logowania programu SQL Server. | Próby uzyskania dostępu do zasobów zewnętrznych są odrzucane i zgłaszany jest wyjątek zabezpieczeń. |
Kontekst wykonywania odpowiada logowaniu systemu Windows, a kontekst wykonywania jest oryginalnym obiektem wywołującym. | Zasób zewnętrzny jest dostępny w kontekście zabezpieczeń konta usługi programu SQL Server. |
Obiekt wywołujący nie jest oryginalnym obiektem wywołującym. | Odmowa dostępu i zgłaszany jest wyjątek zabezpieczeń. |
Kontekst wykonywania odpowiada logowaniu systemu Windows, a kontekst wykonywania jest oryginalnym obiektem wywołującym, a obiekt wywołujący jest personifikowany. | Program Access używa kontekstu zabezpieczeń obiektu wywołującego, a nie konta usługi. |
Podsumowanie zestawu uprawnień
Poniższy wykres zawiera podsumowanie ograniczeń i uprawnień przyznanych zestawom uprawnień SAFE
, EXTERNAL_ACCESS
i UNSAFE
.
Funkcjonalność | SAFE |
EXTERNAL_ACCESS |
UNSAFE |
---|---|---|---|
Uprawnienia zabezpieczeń dostępu kodu | Wykonaj tylko | Wykonywanie i dostęp do zasobów zewnętrznych | Nieograniczone (w tym P/Invoke) |
Ograniczenia modelu programowania | Tak | Tak | Brak ograniczeń |
Wymaganie dotyczące weryfikowania | Tak | Tak | Nie |
Dostęp do danych lokalnych | Tak | Tak | Tak |
Możliwość wywoływania kodu natywnego | Nie | Nie | Tak |
Powiązana zawartość
- zabezpieczeń integracji środowiska
CLR - atrybuty ochrony hosta i programowanie integracji CLR
- ograniczenia modelu programowania integracji środowiska CLR
- architektura integracji środowiska CLR — środowisko hostowane w środowisku CLR