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 dat wordt uitgevoerd binnen de SAFE- of EXTERNAL-ACCESS-machtigingssets, moet bepaalde typen of leden vermijden waarop het HostProtectionAttribute kenmerk is 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 de HostProtectionAttribute dwingt een programmeermodel af waarmee de stabiliteit van de host wordt beschermd.

Opmerking

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 niet toe dat een HostProtectionAttribute met een HostProtectionResource-waarde van SharedState, Synchronization, MayLeakOnAbort of ExternalProcessMgmt specificeert. 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.

Namespace Type of lid
Microsoft.Win32 PowerModeChangedEventArgs klas

PowerModeChangedEventHandler delegeren

SessionEndedEventArgs klas

SessionEndedEventHandler delegeren

SessionEndingEventArgs klas

SessionEndingEventHandler delegeren

SessionSwitchEventArgs klas

SessionSwitchEventHandler delegeren

SystemEvents klas

TimerElapsedEventArgs klas

TimerElapsedEventHandler delegeren

UserPreferenceChangedEventArgs klas

UserPreferenceChangingEventArgs klas
System.Collections ArrayList.Synchronized methode

Hashtable.Synchronized methode

Queue.Synchronized methode

SortedList.Synchronized methode

Stack.Synchronized methode
System.ComponentModel AddingNewEventArgs klas

AddingNewEventHandler delegeren

ArrayConverter klas

AsyncCompletedEventArgs klas

AsyncCompletedEventHandler delegeren

AsyncOperation klas

AsyncOperationManager klas

AttributeCollection klas

BackgroundWorker klas

BaseNumberConverter klas

BindingList<T> klas

BooleanConverter klas

ByteConverter klas

CancelEventArgs klas

CancelEventHandler delegeren

CharConverter klas

CollectionChangeEventArgs klas

CollectionChangeEventHandler delegeren

CollectionConverter klas

ComponentCollection klas

ComponentConverter klas

ComponentEditor klas

ComponentResourceManager klas

Container klas

ContainerFilterService klas

CultureInfoConverter klas

CustomTypeDescriptor klas

DateTimeConverter klas

DecimalConverter klas

ActiveDesignerEventArgs klas

ActiveDesignerEventHandler delegeren

CheckoutException klas

CommandID klas

ComponentChangedEventArgs klas

ComponentChangedEventHandler delegeren

ComponentChangingEventArgs klas

ComponentChangingEventHandler delegeren

ComponentEventArgs klas

ComponentEventHandler delegeren

ComponentRenameEventArgs klas

ComponentRenameEventHandler delegeren

DesignerCollection klas

DesignerEventArgs klas

DesignerEventHandler delegeren

DesignerOptionService klas

DesignerTransaction klas

DesignerTransactionCloseEventArgs klas

DesignerTransactionCloseEventHandler delegeren

DesignerVerb klas

DesignerVerbCollection klas

DesigntimeLicenseContext klas

DesigntimeLicenseContextSerializer klas

MenuCommand klas

ComponentSerializationService klas

ContextStack klas

DesignerLoader klas

InstanceDescriptor klas

MemberRelationshipService klas

ResolveNameEventArgs klas

ResolveNameEventHandler delegeren

SerializationStore klas

ServiceContainer klas

ServiceCreatorCallback delegeren

StandardCommands klas

StandardToolWindows klas

DoubleConverter klas

DoWorkEventArgs klas

DoWorkEventHandler delegeren

EnumConverter klas

EventDescriptor klas

EventDescriptorCollection klas

EventHandlerList klas

ExpandableObjectConverter klas

HandledEventArgs klas

HandledEventHandler delegeren

InstanceCreationEditor klas

Int16Converter klas

Int32Converter klas

Int64Converter klas

InvalidAsynchronousStateException klas

InvalidEnumArgumentException klas

BeginInvoke methode

License klas

LicenseContext klas

LicenseException klas

LicenseManager klas

LicenseProvider klas

LicFileLicenseProvider klas

ListChangedEventArgs klas

ListChangedEventHandler delegeren

ListSortDescription klas

ListSortDescriptionCollection klas

MaskedTextProvider klas

MemberDescriptor klas

MultilineStringConverter klas

NestedContainer klas

NullableConverter klas

ProgressChangedEventArgs klas

ProgressChangedEventHandler delegeren

PropertyChangedEventArgs klas

PropertyChangedEventHandler delegeren

PropertyDescriptor klas

PropertyDescriptorCollection klas

ReferenceConverter klas

RefreshEventArgs klas

RefreshEventHandler delegeren

RunWorkerCompletedEventArgs klas

RunWorkerCompletedEventHandler delegeren

SByteConverter klas

SingleConverter klas

StringConverter klas

SyntaxCheck klas

TimeSpanConverter klas

TypeConverter klas

TypeDescriptionProvider klas

TypeDescriptor klas

TypeListConverter klas

UInt16Converter klas

UInt32Converter klas

UInt64Converter klas

WarningException klas

Win32Exception klas
System.Diagnostics eigenschap Debug.Listeners

eigenschap Trace.Listeners

eigenschap EventLog.SynchronizingObject

ConsoleTraceListener klas

DefaultTraceListener klas

DelimitedListTraceListener klas

EventLogTraceListener klas

PerformanceCounter klas

PerformanceCounterCategory klas

Process klas

ProcessStartInfo klas

TextWriterTraceListener klas

TraceListener klas

XmlWriterTraceListener klas

eigenschap TraceSource.Listeners
System.IO Stream.Synchronized methode

TextReader.Synchronized methode

TextWriter.Synchronized methode
System.Reflection.Emit ConstructorBuilder klas

EventBuilder klas

FieldBuilder klas

MethodBuilder klas

CustomAttributeBuilder klas

MethodRental klas

ModuleBuilder klas

PropertyBuilder klas

TypeBuilder klas

UnmanagedMarshal klas
System.Text Group.Synchronized methode

Match.Synchronized methode
System.Threading AutoResetEvent klas

EventWaitHandle klas

ManualResetEvent klas

Monitor klas

Mutex klas

ReaderWriterLock klas

Semaphore klas

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 klas

Timer klas
System.Timers Timer klas
System.Web.Configuration MachineKeyValidationConverter klas
System.Windows.Forms eigenschap AutoCompleteStringCollection.SyncRoot

SQL Server-machtigingsets

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 VEILIG EXTERNAL-ACCESS ONVEILIG
Beveiliging van codetoegang Alleen uitvoeren Uitvoeren en toegang tot externe resources Onbeperkt
Beperkingen voor programmeermodellen Ja Ja Geen beperkingen
Verifieerbaarheidsvereiste Ja Ja Nee.
Mogelijkheid om systeemeigen code aan te roepen Nee. Nee. 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