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.

Przestrzeń nazw Typ lub element członkowski
Microsoft.Win32 Klasa PowerModeChangedEventArgs

PowerModeChangedEventHandler Delegata

Klasa SessionEndedEventArgs

SessionEndedEventHandler Delegata

Klasa SessionEndingEventArgs

SessionEndingEventHandler Delegata

Klasa SessionSwitchEventArgs

SessionSwitchEventHandler Delegata

Klasa SystemEvents

Klasa TimerElapsedEventArgs

TimerElapsedEventHandler Delegata

Klasa UserPreferenceChangedEventArgs

Klasa UserPreferenceChangingEventArgs
System.Collections ArrayList.Synchronized Metoda

Hashtable.Synchronized Metoda

Queue.Synchronized Metoda

SortedList.Synchronized Metoda

Stack.Synchronized Metoda
System.ComponentModel Klasa AddingNewEventArgs

AddingNewEventHandler Delegata

Klasa ArrayConverter

Klasa AsyncCompletedEventArgs

AsyncCompletedEventHandler Delegata

Klasa AsyncOperation

Klasa AsyncOperationManager

Klasa AttributeCollection

Klasa BackgroundWorker

Klasa BaseNumberConverter

Klasa BindingList<T>

Klasa BooleanConverter

Klasa ByteConverter

Klasa CancelEventArgs

CancelEventHandler Delegata

Klasa CharConverter

Klasa CollectionChangeEventArgs

CollectionChangeEventHandler Delegata

Klasa CollectionConverter

Klasa ComponentCollection

Klasa ComponentConverter

Klasa ComponentEditor

Klasa ComponentResourceManager

Klasa Container

Klasa ContainerFilterService

Klasa CultureInfoConverter

Klasa CustomTypeDescriptor

Klasa DateTimeConverter

Klasa DecimalConverter

Klasa ActiveDesignerEventArgs

ActiveDesignerEventHandler Delegata

Klasa CheckoutException

Klasa CommandID

Klasa ComponentChangedEventArgs

ComponentChangedEventHandler Delegata

Klasa ComponentChangingEventArgs

ComponentChangingEventHandler Delegata

Klasa ComponentEventArgs

ComponentEventHandler Delegata

Klasa ComponentRenameEventArgs

ComponentRenameEventHandler Delegata

Klasa DesignerCollection

Klasa DesignerEventArgs

DesignerEventHandler Delegata

Klasa DesignerOptionService

Klasa DesignerTransaction

Klasa DesignerTransactionCloseEventArgs

DesignerTransactionCloseEventHandler Delegata

Klasa DesignerVerb

Klasa DesignerVerbCollection

Klasa DesigntimeLicenseContext

Klasa DesigntimeLicenseContextSerializer

Klasa MenuCommand

Klasa ComponentSerializationService

Klasa ContextStack

Klasa DesignerLoader

Klasa InstanceDescriptor

Klasa MemberRelationshipService

Klasa ResolveNameEventArgs

ResolveNameEventHandler Delegata

Klasa SerializationStore

Klasa ServiceContainer

ServiceCreatorCallback Delegata

Klasa StandardCommands

Klasa StandardToolWindows

Klasa DoubleConverter

Klasa DoWorkEventArgs

DoWorkEventHandler Delegata

Klasa EnumConverter

Klasa EventDescriptor

Klasa EventDescriptorCollection

Klasa EventHandlerList

Klasa ExpandableObjectConverter

Klasa HandledEventArgs

HandledEventHandler Delegata

Klasa InstanceCreationEditor

Klasa Int16Converter

Klasa Int32Converter

Klasa Int64Converter

Klasa InvalidAsynchronousStateException

Klasa InvalidEnumArgumentException

BeginInvoke Metoda

Klasa License

Klasa LicenseContext

Klasa LicenseException

Klasa LicenseManager

Klasa LicenseProvider

Klasa LicFileLicenseProvider

Klasa ListChangedEventArgs

ListChangedEventHandler Delegata

Klasa ListSortDescription

Klasa ListSortDescriptionCollection

Klasa MaskedTextProvider

Klasa MemberDescriptor

Klasa MultilineStringConverter

Klasa NestedContainer

Klasa NullableConverter

Klasa ProgressChangedEventArgs

ProgressChangedEventHandler Delegata

Klasa PropertyChangedEventArgs

PropertyChangedEventHandler Delegata

Klasa PropertyDescriptor

Klasa PropertyDescriptorCollection

Klasa ReferenceConverter

Klasa RefreshEventArgs

RefreshEventHandler Delegata

Klasa RunWorkerCompletedEventArgs

RunWorkerCompletedEventHandler Delegata

Klasa SByteConverter

Klasa SingleConverter

Klasa StringConverter

Klasa SyntaxCheck

Klasa TimeSpanConverter

Klasa TypeConverter

Klasa TypeDescriptionProvider

Klasa TypeDescriptor

Klasa TypeListConverter

Klasa UInt16Converter

Klasa UInt32Converter

Klasa UInt64Converter

Klasa WarningException

Klasa Win32Exception
System.Diagnostics Debug.Listeners Właściwość

Trace.Listeners Właściwość

EventLog.SynchronizingObject Właściwość

Klasa ConsoleTraceListener

Klasa DefaultTraceListener

Klasa DelimitedListTraceListener

Klasa EventLogTraceListener

Klasa PerformanceCounter

Klasa PerformanceCounterCategory

Klasa Process

Klasa ProcessStartInfo

Klasa TextWriterTraceListener

Klasa TraceListener

Klasa XmlWriterTraceListener

TraceSource.Listeners Właściwość
System.IO Stream.Synchronized Metoda

TextReader.Synchronized Metoda

TextWriter.Synchronized Metoda
System.Reflection.Emit Klasa ConstructorBuilder

Klasa EventBuilder

Klasa FieldBuilder

Klasa MethodBuilder

Klasa CustomAttributeBuilder

Klasa MethodRental

Klasa ModuleBuilder

Klasa PropertyBuilder

Klasa TypeBuilder

Klasa UnmanagedMarshal
System.Text Group.Synchronized Metoda

Match.Synchronized Metoda
System.Threading Klasa AutoResetEvent

Klasa EventWaitHandle

Klasa ManualResetEvent

Klasa Monitor

Klasa Mutex

Klasa ReaderWriterLock

Klasa Semaphore

Thread.AllocateNamedDataSlot Metoda

Thread.BeginCriticalRegion Metoda

Thread.EndCriticalRegion Metoda

Thread.FreeNamedDataSlot Metoda

Thread.GetData Metoda

Thread.Join Metoda

Thread.SetApartmentState Metoda

Thread.SetData Metoda

Thread.SpinWait Metoda

Thread.Start Metoda

Thread.TrySetApartmentState Metoda

Klasa ThreadPool

Klasa Timer
System.Timers Klasa Timer
System.Web.Configuration Klasa MachineKeyValidationConverter
System.Windows.Forms AutoCompleteStringCollection.SyncRoot Właściwość

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.

Zobacz też