Udostępnij za pośrednictwem


Atrybuty programowania i ochrony hosta programu 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ą atrybut HostProtectionAttribute zastosowany. 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 wymusza model programowania, który pomaga chronić stabilność hosta.

Uwaga / Notatka

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 wartość HostProtectionResource, SharedState, Synchronization, MayLeakOnAbort lub 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 członkowie

W poniższej tabeli przedstawiono typy i członków, których HostProtectionResource wartości są niedozwolone w programie SQL Server.

Namespace Typ lub element członkowski
Microsoft.Win32 PowerModeChangedEventArgs klasa

PowerModeChangedEventHandler delegat / delegować

SessionEndedEventArgs klasa

SessionEndedEventHandler delegat / delegować

SessionEndingEventArgs klasa

SessionEndingEventHandler delegat / delegować

SessionSwitchEventArgs klasa

SessionSwitchEventHandler delegat / delegować

SystemEvents klasa

TimerElapsedEventArgs klasa

TimerElapsedEventHandler delegat / delegować

UserPreferenceChangedEventArgs klasa

UserPreferenceChangingEventArgs klasa
System.Collections Metoda ArrayList.Synchronized

Metoda Hashtable.Synchronized

Metoda Queue.Synchronized

Metoda SortedList.Synchronized

Metoda Stack.Synchronized
System.ComponentModel AddingNewEventArgs klasa

AddingNewEventHandler delegat / delegować

ArrayConverter klasa

AsyncCompletedEventArgs klasa

AsyncCompletedEventHandler delegat / delegować

AsyncOperation klasa

AsyncOperationManager klasa

AttributeCollection klasa

BackgroundWorker klasa

BaseNumberConverter klasa

BindingList<T> klasa

BooleanConverter klasa

ByteConverter klasa

CancelEventArgs klasa

CancelEventHandler delegat / delegować

CharConverter klasa

CollectionChangeEventArgs klasa

CollectionChangeEventHandler delegat / delegować

CollectionConverter klasa

ComponentCollection klasa

ComponentConverter klasa

ComponentEditor klasa

ComponentResourceManager klasa

Container klasa

ContainerFilterService klasa

CultureInfoConverter klasa

CustomTypeDescriptor klasa

DateTimeConverter klasa

DecimalConverter klasa

ActiveDesignerEventArgs klasa

ActiveDesignerEventHandler delegat / delegować

CheckoutException klasa

CommandID klasa

ComponentChangedEventArgs klasa

ComponentChangedEventHandler delegat / delegować

ComponentChangingEventArgs klasa

ComponentChangingEventHandler delegat / delegować

ComponentEventArgs klasa

ComponentEventHandler delegat / delegować

ComponentRenameEventArgs klasa

ComponentRenameEventHandler delegat / delegować

DesignerCollection klasa

DesignerEventArgs klasa

DesignerEventHandler delegat / delegować

DesignerOptionService klasa

DesignerTransaction klasa

DesignerTransactionCloseEventArgs klasa

DesignerTransactionCloseEventHandler delegat / delegować

DesignerVerb klasa

DesignerVerbCollection klasa

DesigntimeLicenseContext klasa

DesigntimeLicenseContextSerializer klasa

MenuCommand klasa

ComponentSerializationService klasa

ContextStack klasa

DesignerLoader klasa

InstanceDescriptor klasa

MemberRelationshipService klasa

ResolveNameEventArgs klasa

ResolveNameEventHandler delegat / delegować

SerializationStore klasa

ServiceContainer klasa

ServiceCreatorCallback delegat / delegować

StandardCommands klasa

StandardToolWindows klasa

DoubleConverter klasa

DoWorkEventArgs klasa

DoWorkEventHandler delegat / delegować

EnumConverter klasa

EventDescriptor klasa

EventDescriptorCollection klasa

EventHandlerList klasa

ExpandableObjectConverter klasa

HandledEventArgs klasa

HandledEventHandler delegat / delegować

InstanceCreationEditor klasa

Int16Converter klasa

Int32Converter klasa

Int64Converter klasa

InvalidAsynchronousStateException klasa

InvalidEnumArgumentException klasa

Metoda BeginInvoke

License klasa

LicenseContext klasa

LicenseException klasa

LicenseManager klasa

LicenseProvider klasa

LicFileLicenseProvider klasa

ListChangedEventArgs klasa

ListChangedEventHandler delegat / delegować

ListSortDescription klasa

ListSortDescriptionCollection klasa

MaskedTextProvider klasa

MemberDescriptor klasa

MultilineStringConverter klasa

NestedContainer klasa

NullableConverter klasa

ProgressChangedEventArgs klasa

ProgressChangedEventHandler delegat / delegować

PropertyChangedEventArgs klasa

PropertyChangedEventHandler delegat / delegować

PropertyDescriptor klasa

PropertyDescriptorCollection klasa

ReferenceConverter klasa

RefreshEventArgs klasa

RefreshEventHandler delegat / delegować

RunWorkerCompletedEventArgs klasa

RunWorkerCompletedEventHandler delegat / delegować

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 klasa
System.Diagnostics Debug.Listeners własność

Trace.Listeners własność

EventLog.SynchronizingObject własność

ConsoleTraceListener klasa

DefaultTraceListener klasa

DelimitedListTraceListener klasa

EventLogTraceListener klasa

PerformanceCounter klasa

PerformanceCounterCategory klasa

Process klasa

ProcessStartInfo klasa

TextWriterTraceListener klasa

TraceListener klasa

XmlWriterTraceListener klasa

TraceSource.Listeners własność
System.IO Metoda Stream.Synchronized

Metoda TextReader.Synchronized

Metoda TextWriter.Synchronized
System.Reflection.Emit ConstructorBuilder klasa

EventBuilder klasa

FieldBuilder klasa

MethodBuilder klasa

CustomAttributeBuilder klasa

MethodRental klasa

ModuleBuilder klasa

PropertyBuilder klasa

TypeBuilder klasa

UnmanagedMarshal klasa
System.Text Metoda Group.Synchronized

Metoda Match.Synchronized
System.Threading AutoResetEvent klasa

EventWaitHandle klasa

ManualResetEvent klasa

Monitor klasa

Mutex klasa

ReaderWriterLock klasa

Semaphore klasa

Metoda 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

ThreadPool klasa

Timer klasa
System.Timers Timer klasa
System.Web.Configuration MachineKeyValidationConverter klasa
System.Windows.Forms AutoCompleteStringCollection.SyncRoot własność

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ń BEZPIECZNY EXTERNAL-ACCESS NIEBEZPIECZNY
Zabezpieczenie dostępu do 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.

EXTERNAL-ACCESS zapewnia pośrednią opcję zabezpieczeń, umożliwiając kodowi dostęp do zasobów spoza bazy danych, zachowując jednocześnie niezawodność i bezpieczeństwo SAFE.

NIEBEZPIECZNY jest przeznaczony dla wysoce zaufanego kodu, który można utworzyć tylko przez administratorów bazy danych. Kod ten, jako zaufany, nie podlega żadnym ograniczeniom dostępu i może wywoływać kod niezarządzany (natywny).

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 i 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 także