Udostępnij za pośrednictwem


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_ACCESSi UNSAFE (określone przy użyciu opcji PERMISSION_SETCREATE 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_CONFIGi 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.

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_ACCESSi 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