Delen via


Sql Server-programmeer- en hostbeveiligingskenmerken

De mogelijkheid om beheerde code in een SQL Server-host te laden en uit te voeren, moet voldoen aan de vereisten van de host voor zowel beveiliging van codetoegang als hostresourcebeveiliging. De beveiligingsvereisten voor codetoegang worden opgegeven door een van de drie SQL Server-machtigingensets: SAFE, EXTERNAL-ACCESS of ONVEILIG. Code die wordt uitgevoerd binnen de machtigingensetS SAFE of EXTERNAL-ACCESS, moet voorkomen dat bepaalde typen of leden het HostProtectionAttribute kenmerk hebben toegepast. Het HostProtectionAttribute is niet zozeer een beveiligingsmachtiging als een betrouwbaarheidsgarantie omdat hiermee specifieke codeconstructies, ofwel typen of methoden, worden geïdentificeerd die de host mogelijk niet toegeeft. Het gebruik van het HostProtectionAttribute dwingt een programmeermodel af waarmee de stabiliteit van de host wordt beschermd.

Notitie

Cas (Code Access Security) is afgeschaft in alle versies van .NET Framework en .NET. Recente versies van .NET respecteren geen CAS-aantekeningen en produceren fouten als CAS-gerelateerde API's worden gebruikt. Ontwikkelaars moeten alternatieve manieren zoeken om beveiligingstaken uit te voeren.

Kenmerken voor hostbeveiliging

Hostbeveiligingskenmerken identificeren typen of leden die niet passen bij het hostprogrammeermodel en vertegenwoordigen de volgende toenemende betrouwbaarheidsbedreigingen:

  • Zijn anders goedaardig.

  • Dit kan leiden tot een destabilisatie van door de server beheerde gebruikerscode.

  • Kan leiden tot een destabilisatie van het serverproces zelf.

SQL Server staat het gebruik van een type of lid dat een HostProtectionAttribute waarde van , Synchronization, of MayLeakOnAbortExternalProcessMgmt.SharedStateHostProtectionResource Hiermee voorkomt u dat de assembly's leden aanroepen die de status delen inschakelen, synchronisatie uitvoeren, een bronlek kunnen veroorzaken bij beëindiging of de integriteit van het SQL Server-proces beïnvloeden.

Niet-toegestane typen en leden

In de volgende tabel worden typen en leden geïdentificeerd waarvan HostProtectionResource de waarden niet zijn toegestaan door SQL Server.

Naamruimte Type of lid
Microsoft.Win32 PowerModeChangedEventArgs Klasse

PowerModeChangedEventHandler Gemachtigde

SessionEndedEventArgs Klasse

SessionEndedEventHandler Gemachtigde

SessionEndingEventArgs Klasse

SessionEndingEventHandler Gemachtigde

SessionSwitchEventArgs Klasse

SessionSwitchEventHandler Gemachtigde

SystemEvents Klasse

TimerElapsedEventArgs Klasse

TimerElapsedEventHandler Gemachtigde

UserPreferenceChangedEventArgs Klasse

UserPreferenceChangingEventArgs Klasse
System.Collections ArrayList.Synchronized Methode

Hashtable.Synchronized Methode

Queue.Synchronized Methode

SortedList.Synchronized Methode

Stack.Synchronized Methode
System.ComponentModel AddingNewEventArgs Klasse

AddingNewEventHandler Gemachtigde

ArrayConverter Klasse

AsyncCompletedEventArgs Klasse

AsyncCompletedEventHandler Gemachtigde

AsyncOperation Klasse

AsyncOperationManager Klasse

AttributeCollection Klasse

BackgroundWorker Klasse

BaseNumberConverter Klasse

BindingList<T> Klasse

BooleanConverter Klasse

ByteConverter Klasse

CancelEventArgs Klasse

CancelEventHandler Gemachtigde

CharConverter Klasse

CollectionChangeEventArgs Klasse

CollectionChangeEventHandler Gemachtigde

CollectionConverter Klasse

ComponentCollection Klasse

ComponentConverter Klasse

ComponentEditor Klasse

ComponentResourceManager Klasse

Container Klasse

ContainerFilterService Klasse

CultureInfoConverter Klasse

CustomTypeDescriptor Klasse

DateTimeConverter Klasse

DecimalConverter Klasse

ActiveDesignerEventArgs Klasse

ActiveDesignerEventHandler Gemachtigde

CheckoutException Klasse

CommandID Klasse

ComponentChangedEventArgs Klasse

ComponentChangedEventHandler Gemachtigde

ComponentChangingEventArgs Klasse

ComponentChangingEventHandler Gemachtigde

ComponentEventArgs Klasse

ComponentEventHandler Gemachtigde

ComponentRenameEventArgs Klasse

ComponentRenameEventHandler Gemachtigde

DesignerCollection Klasse

DesignerEventArgs Klasse

DesignerEventHandler Gemachtigde

DesignerOptionService Klasse

DesignerTransaction Klasse

DesignerTransactionCloseEventArgs Klasse

DesignerTransactionCloseEventHandler Gemachtigde

DesignerVerb Klasse

DesignerVerbCollection Klasse

DesigntimeLicenseContext Klasse

DesigntimeLicenseContextSerializer Klasse

MenuCommand Klasse

ComponentSerializationService Klasse

ContextStack Klasse

DesignerLoader Klasse

InstanceDescriptor Klasse

MemberRelationshipService Klasse

ResolveNameEventArgs Klasse

ResolveNameEventHandler Gemachtigde

SerializationStore Klasse

ServiceContainer Klasse

ServiceCreatorCallback Gemachtigde

StandardCommands Klasse

StandardToolWindows Klasse

DoubleConverter Klasse

DoWorkEventArgs Klasse

DoWorkEventHandler Gemachtigde

EnumConverter Klasse

EventDescriptor Klasse

EventDescriptorCollection Klasse

EventHandlerList Klasse

ExpandableObjectConverter Klasse

HandledEventArgs Klasse

HandledEventHandler Gemachtigde

InstanceCreationEditor Klasse

Int16Converter Klasse

Int32Converter Klasse

Int64Converter Klasse

InvalidAsynchronousStateException Klasse

InvalidEnumArgumentException Klasse

BeginInvoke Methode

License Klasse

LicenseContext Klasse

LicenseException Klasse

LicenseManager Klasse

LicenseProvider Klasse

LicFileLicenseProvider Klasse

ListChangedEventArgs Klasse

ListChangedEventHandler Gemachtigde

ListSortDescription Klasse

ListSortDescriptionCollection Klasse

MaskedTextProvider Klasse

MemberDescriptor Klasse

MultilineStringConverter Klasse

NestedContainer Klasse

NullableConverter Klasse

ProgressChangedEventArgs Klasse

ProgressChangedEventHandler Gemachtigde

PropertyChangedEventArgs Klasse

PropertyChangedEventHandler Gemachtigde

PropertyDescriptor Klasse

PropertyDescriptorCollection Klasse

ReferenceConverter Klasse

RefreshEventArgs Klasse

RefreshEventHandler Gemachtigde

RunWorkerCompletedEventArgs Klasse

RunWorkerCompletedEventHandler Gemachtigde

SByteConverter Klasse

SingleConverter Klasse

StringConverter Klasse

SyntaxCheck Klasse

TimeSpanConverter Klasse

TypeConverter Klasse

TypeDescriptionProvider Klasse

TypeDescriptor Klasse

TypeListConverter Klasse

UInt16Converter Klasse

UInt32Converter Klasse

UInt64Converter Klasse

WarningException Klasse

Win32Exception Klasse
System.Diagnostics Debug.Listeners Eigenschap

Trace.Listeners Eigenschap

EventLog.SynchronizingObject Eigenschap

ConsoleTraceListener Klasse

DefaultTraceListener Klasse

DelimitedListTraceListener Klasse

EventLogTraceListener Klasse

PerformanceCounter Klasse

PerformanceCounterCategory Klasse

Process Klasse

ProcessStartInfo Klasse

TextWriterTraceListener Klasse

TraceListener Klasse

XmlWriterTraceListener Klasse

TraceSource.Listeners Eigenschap
System.IO Stream.Synchronized Methode

TextReader.Synchronized Methode

TextWriter.Synchronized Methode
System.Reflection.Emit ConstructorBuilder Klasse

EventBuilder Klasse

FieldBuilder Klasse

MethodBuilder Klasse

CustomAttributeBuilder Klasse

MethodRental Klasse

ModuleBuilder Klasse

PropertyBuilder Klasse

TypeBuilder Klasse

UnmanagedMarshal Klasse
System.Text Group.Synchronized Methode

Match.Synchronized Methode
System.Threading AutoResetEvent Klasse

EventWaitHandle Klasse

ManualResetEvent Klasse

Monitor Klasse

Mutex Klasse

ReaderWriterLock Klasse

Semaphore Klasse

Thread.AllocateNamedDataSlot Methode

Thread.BeginCriticalRegion Methode

Thread.EndCriticalRegion Methode

Thread.FreeNamedDataSlot Methode

Thread.GetData Methode

Thread.Join Methode

Thread.SetApartmentState Methode

Thread.SetData Methode

Thread.SpinWait Methode

Thread.Start Methode

Thread.TrySetApartmentState Methode

ThreadPool Klasse

Timer Klasse
System.Timers Timer Klasse
System.Web.Configuration MachineKeyValidationConverter Klasse
System.Windows.Forms AutoCompleteStringCollection.SyncRoot Eigenschap

SQL Server-machtigingensets

Met SQL Server kunnen gebruikers de betrouwbaarheidsvereisten opgeven voor code die in een database is geïmplementeerd. Wanneer assembly's worden geüpload naar de database, kan de auteur van de assembly een van de drie machtigingensets voor die assembly opgeven: SAFE, EXTERNAL-ACCESS of ONVEILIG.

Machtigingenset SAFE EXTERNE TOEGANG ONVEILIGE
Beveiliging van codetoegang Alleen uitvoeren Uitvoeren en toegang tot externe resources Onbeperkt
Beperkingen voor programmeermodellen Ja Ja Geen beperkingen
Verifieerbaarheidsvereiste Ja Ja Nr.
Mogelijkheid om systeemeigen code aan te roepen Nee No Ja

SAFE is de meest betrouwbare en veilige modus met bijbehorende beperkingen in termen van het toegestane programmeermodel. SAFE-code heeft hoge betrouwbaarheid en beveiligingsfuncties. VEILIGE assembly's krijgen voldoende machtigingen om uit te voeren, berekeningen uit te voeren en toegang te hebben tot de lokale database. VEILIGE assembly's moeten verifieerbaar type veilig zijn en mogen niet onbeheerde code aanroepen.

EXTERNAL-ACCESS biedt een tussenliggende beveiligingsoptie, waardoor code toegang heeft tot resources buiten de database, maar nog steeds de betrouwbaarheid en veiligheid van SAFE heeft.

ONVEILIG is voor zeer vertrouwde code die alleen kan worden gemaakt door databasebeheerders. Deze vertrouwde code heeft geen toegangsbeperkingen voor code en kan onbeheerde (systeemeigen) code aanroepen.

SQL Server maakt gebruik van de beveiligingslaag voor codetoegang op hostniveau om een hostbeleid in te stellen dat een van de drie sets machtigingen verleent op basis van de machtigingenset die is opgeslagen in SQL Server-catalogi. Beheerde code die in de database wordt uitgevoerd, krijgt altijd een van deze machtigingensets voor codetoegang.

Beperkingen voor programmeermodellen

Voor het programmeermodel voor beheerde code in SQL Server zijn functies, procedures en typen vereist die het gebruik van de status niet vereisen voor meerdere aanroepen of het delen van de status voor meerdere gebruikerssessies. Zoals eerder beschreven, kan de aanwezigheid van de gedeelde status leiden tot kritieke uitzonderingen die van invloed zijn op de schaalbaarheid en de betrouwbaarheid van de toepassing.

Gezien deze overwegingen staat SQL Server het gebruik van statische variabelen en statische gegevensleden niet toe. Voor SAFE- en EXTERNAL ACCESS-assembly's onderzoekt SQL Server de metagegevens van de assembly op het moment VAN CREATE ASSEMBLY en mislukt het maken van dergelijke assembly's als het gebruik van statische gegevensleden en variabelen wordt gevonden.

Zie ook