Atrybuty ochrony hosta i programowanie SQL Server
Możliwość ładowania i wykonywania kodu zarządzanego na hoście programu SQL Server wymaga spełnienia wymagań hosta dotyczących zabezpieczeń dostępu kodu i ochrony zasobów hosta. Wymagania dotyczące zabezpieczeń dostępu do kodu są określane przez jeden z trzech zestawów uprawnień programu SQL Server: SAFE, EXTERNAL-ACCESS lub UNSAFE. Kod wykonywany w zestawach uprawnień SAFE lub EXTERNAL-ACCESS musi unikać niektórych typów lub elementów członkowskich, które mają HostProtectionAttribute zastosowany atrybut. Element HostProtectionAttribute nie jest uprawnieniem do zabezpieczeń tak samo jak gwarancja niezawodności, ponieważ identyfikuje określone konstrukcje kodu, typy lub metody, których host może nie zezwalać. Użycie HostProtectionAttribute modelu programowania, który pomaga chronić stabilność hosta.
Uwaga
Zabezpieczenia dostępu kodu (CAS) zostały wycofane we wszystkich wersjach programu .NET Framework i .NET. Najnowsze wersje platformy .NET nie honorują adnotacji CAS i generują błędy, jeśli są używane interfejsy API związane z usługą CAS. Deweloperzy powinni szukać alternatywnych sposobów wykonywania zadań zabezpieczeń.
Atrybuty ochrony hosta
Atrybuty ochrony hosta identyfikują typy lub elementy członkowskie, które nie pasują do modelu programowania hosta i reprezentują następujące rosnące poziomy zagrożenia niezawodności:
Są łagodne.
Może prowadzić do destabilizacji kodu użytkownika zarządzanego przez serwer.
Może prowadzić do destabilizacji samego procesu serwera.
Program SQL Server nie zezwala na użycie typu lub elementu członkowskiego, który HostProtectionAttribute określa HostProtectionResource wartość SharedState, , SynchronizationMayLeakOnAbortlub ExternalProcessMgmt. Uniemożliwia to wywoływanie elementów członkowskich, które umożliwiają udostępnianie stanu, wykonywanie synchronizacji, może spowodować wyciek zasobów po zakończeniu lub wpłynąć na integralność procesu programu SQL Server.
Niedozwolone typy i składowe
W poniższej tabeli przedstawiono typy i elementy członkowskie, których HostProtectionResource wartości są niedozwolone przez program SQL Server.
Zestawy uprawnień programu SQL Server
Program SQL Server umożliwia użytkownikom określenie wymagań dotyczących niezawodności kodu wdrożonego w bazie danych. Gdy zestawy są przekazywane do bazy danych, autor zestawu może określić jeden z trzech zestawów uprawnień dla tego zestawu: BEZPIECZNY, DOSTĘP ZEWNĘTRZNY lub NIEBEZPIECZNY.
Zestaw uprawnień | SAFE | DOSTĘP ZEWNĘTRZNY | NIEBEZPIECZNE |
---|---|---|---|
Zabezpieczenia dostępu kodu | Wykonaj tylko | Wykonywanie i dostęp do zasobów zewnętrznych | Bez ograniczeń |
Ograniczenia modelu programowania | Tak | Tak | Brak ograniczeń |
Wymaganie dotyczące weryfikowania | Tak | Tak | Nie. |
Możliwość wywoływania kodu natywnego | Nie | Nie. | Tak |
SAFE to najbardziej niezawodny i bezpieczny tryb ze skojarzonymi ograniczeniami w zakresie dozwolonego modelu programowania. Kod SAFE ma wysoką niezawodność i funkcje zabezpieczeń. Zestawy SAFE mają wystarczające uprawnienia do uruchamiania, wykonywania obliczeń i uzyskiwania dostępu do lokalnej bazy danych. Zestawy SAFE muszą być bezpieczne w trybie weryfikowalnym i nie mogą wywoływać kodu niezarządzanych.
FUNKCJA EXTERNAL-ACCESS zapewnia pośrednią opcję zabezpieczeń, umożliwiając kodowi dostęp do zasobów spoza bazy danych, ale nadal ma niezawodność i bezpieczeństwo.
NIEBEZPIECZNY jest przeznaczony dla wysoce zaufanego kodu, który można utworzyć tylko przez administratorów bazy danych. Ten zaufany kod nie ma ograniczeń dostępu do kodu i może wywoływać niezarządzany (natywny) kod.
Program SQL Server używa warstwy zasad zabezpieczeń dostępu kodu na poziomie hosta do konfigurowania zasad hosta, które udzielają jednego z trzech zestawów uprawnień na podstawie zestawu uprawnień przechowywanych w wykazach programu SQL Server. Kod zarządzany uruchomiony wewnątrz bazy danych zawsze pobiera jeden z tych zestawów uprawnień dostępu do kodu.
Ograniczenia modelu programowania
Model programowania dla kodu zarządzanego w programie SQL Server wymaga funkcji, procedur i typów, które nie wymagają użycia stanu przechowywanego w wielu wywołaniach ani udostępniania stanu w wielu sesjach użytkownika. Ponadto, jak opisano wcześniej, obecność stanu współużytkowanego może spowodować krytyczne wyjątki wpływające na skalowalność i niezawodność aplikacji.
Biorąc pod uwagę te zagadnienia, program SQL Server nie zezwala na używanie zmiennych statycznych i elementów członkowskich danych statycznych. W przypadku zestawów SAFE and EXTERNAL-ACCESS program SQL Server analizuje metadane zestawu w czasie TWORZENIA ZESTAWU i kończy się niepowodzeniem podczas tworzenia takich zestawów, jeśli znajdzie użycie statycznych elementów członkowskich i zmiennych danych.