Dela via


SQL Server-programmerings- och värdskyddsattribut

Möjligheten att läsa in och köra hanterad kod i en SQL Server-värd kräver att värdens krav för både kodåtkomstsäkerhet och värdresursskydd uppfylls. Säkerhetskraven för kodåtkomst anges av en av tre SQL Server-behörighetsuppsättningar: SAFE, EXTERNAL-ACCESS eller UNSAFE. Kod som körs i behörighetsuppsättningarna SAFE eller EXTERNAL-ACCESS måste undvika vissa typer eller medlemmar som har HostProtectionAttribute attributet tillämpat. HostProtectionAttribute är inte en säkerhetsbehörighet så mycket som en tillförlitlighetsgaranti eftersom den identifierar specifika kodkonstruktioner, antingen typer eller metoder, som värden kan neka. Användningen av HostProtectionAttribute den framtvingar en programmeringsmodell som hjälper till att skydda värdens stabilitet.

Kommentar

Code Access Security (CAS) har föråldrats i alla versioner av .NET Framework och .NET. De senaste versionerna av .NET följer inte CAS-anteckningar och skapar fel om CAS-relaterade API:er används. Utvecklare bör söka alternativa sätt att utföra säkerhetsuppgifter.

Värdskyddsattribut

Värdskyddsattribut identifierar typer eller medlemmar som inte passar värdprogrammeringsmodellen och representerar följande ökande nivåer av tillförlitlighetshot:

  • Är annars godartade.

  • Kan leda till destabilisering av serverhanterad användarkod.

  • Kan leda till destabilisering av själva serverprocessen.

SQL Server tillåter inte användning av en typ eller medlem som har en HostProtectionAttribute som anger HostProtectionResource värdet SharedState, Synchronization, MayLeakOnAborteller ExternalProcessMgmt. Detta förhindrar att sammansättningarna anropar medlemmar som aktiverar delningstillstånd, utför synkronisering, kan orsaka en resursläcka vid avslutning eller påverka integriteten i SQL Server-processen.

Otillåtna typer och medlemmar

I följande tabell identifieras typer och medlemmar vars värden inte tillåts HostProtectionResource av SQL Server.

Namnområde Typ eller medlem
Microsoft.Win32 PowerModeChangedEventArgs Klass

PowerModeChangedEventHandler Delegera

SessionEndedEventArgs Klass

SessionEndedEventHandler Delegera

SessionEndingEventArgs Klass

SessionEndingEventHandler Delegera

SessionSwitchEventArgs Klass

SessionSwitchEventHandler Delegera

SystemEvents Klass

TimerElapsedEventArgs Klass

TimerElapsedEventHandler Delegera

UserPreferenceChangedEventArgs Klass

UserPreferenceChangingEventArgs Klass
System.Collections ArrayList.Synchronized Metod

Hashtable.Synchronized Metod

Queue.Synchronized Metod

SortedList.Synchronized Metod

Stack.Synchronized Metod
System.ComponentModel AddingNewEventArgs Klass

AddingNewEventHandler Delegera

ArrayConverter Klass

AsyncCompletedEventArgs Klass

AsyncCompletedEventHandler Delegera

AsyncOperation Klass

AsyncOperationManager Klass

AttributeCollection Klass

BackgroundWorker Klass

BaseNumberConverter Klass

BindingList<T> Klass

BooleanConverter Klass

ByteConverter Klass

CancelEventArgs Klass

CancelEventHandler Delegera

CharConverter Klass

CollectionChangeEventArgs Klass

CollectionChangeEventHandler Delegera

CollectionConverter Klass

ComponentCollection Klass

ComponentConverter Klass

ComponentEditor Klass

ComponentResourceManager Klass

Container Klass

ContainerFilterService Klass

CultureInfoConverter Klass

CustomTypeDescriptor Klass

DateTimeConverter Klass

DecimalConverter Klass

ActiveDesignerEventArgs Klass

ActiveDesignerEventHandler Delegera

CheckoutException Klass

CommandID Klass

ComponentChangedEventArgs Klass

ComponentChangedEventHandler Delegera

ComponentChangingEventArgs Klass

ComponentChangingEventHandler Delegera

ComponentEventArgs Klass

ComponentEventHandler Delegera

ComponentRenameEventArgs Klass

ComponentRenameEventHandler Delegera

DesignerCollection Klass

DesignerEventArgs Klass

DesignerEventHandler Delegera

DesignerOptionService Klass

DesignerTransaction Klass

DesignerTransactionCloseEventArgs Klass

DesignerTransactionCloseEventHandler Delegera

DesignerVerb Klass

DesignerVerbCollection Klass

DesigntimeLicenseContext Klass

DesigntimeLicenseContextSerializer Klass

MenuCommand Klass

ComponentSerializationService Klass

ContextStack Klass

DesignerLoader Klass

InstanceDescriptor Klass

MemberRelationshipService Klass

ResolveNameEventArgs Klass

ResolveNameEventHandler Delegera

SerializationStore Klass

ServiceContainer Klass

ServiceCreatorCallback Delegera

StandardCommands Klass

StandardToolWindows Klass

DoubleConverter Klass

DoWorkEventArgs Klass

DoWorkEventHandler Delegera

EnumConverter Klass

EventDescriptor Klass

EventDescriptorCollection Klass

EventHandlerList Klass

ExpandableObjectConverter Klass

HandledEventArgs Klass

HandledEventHandler Delegera

InstanceCreationEditor Klass

Int16Converter Klass

Int32Converter Klass

Int64Converter Klass

InvalidAsynchronousStateException Klass

InvalidEnumArgumentException Klass

BeginInvoke Metod

License Klass

LicenseContext Klass

LicenseException Klass

LicenseManager Klass

LicenseProvider Klass

LicFileLicenseProvider Klass

ListChangedEventArgs Klass

ListChangedEventHandler Delegera

ListSortDescription Klass

ListSortDescriptionCollection Klass

MaskedTextProvider Klass

MemberDescriptor Klass

MultilineStringConverter Klass

NestedContainer Klass

NullableConverter Klass

ProgressChangedEventArgs Klass

ProgressChangedEventHandler Delegera

PropertyChangedEventArgs Klass

PropertyChangedEventHandler Delegera

PropertyDescriptor Klass

PropertyDescriptorCollection Klass

ReferenceConverter Klass

RefreshEventArgs Klass

RefreshEventHandler Delegera

RunWorkerCompletedEventArgs Klass

RunWorkerCompletedEventHandler Delegera

SByteConverter Klass

SingleConverter Klass

StringConverter Klass

SyntaxCheck Klass

TimeSpanConverter Klass

TypeConverter Klass

TypeDescriptionProvider Klass

TypeDescriptor Klass

TypeListConverter Klass

UInt16Converter Klass

UInt32Converter Klass

UInt64Converter Klass

WarningException Klass

Win32Exception Klass
System.Diagnostics Debug.Listeners Egenskapen

Trace.Listeners Egenskapen

EventLog.SynchronizingObject Egenskapen

ConsoleTraceListener Klass

DefaultTraceListener Klass

DelimitedListTraceListener Klass

EventLogTraceListener Klass

PerformanceCounter Klass

PerformanceCounterCategory Klass

Process Klass

ProcessStartInfo Klass

TextWriterTraceListener Klass

TraceListener Klass

XmlWriterTraceListener Klass

TraceSource.Listeners Egenskapen
System.IO Stream.Synchronized Metod

TextReader.Synchronized Metod

TextWriter.Synchronized Metod
System.Reflection.Emit ConstructorBuilder Klass

EventBuilder Klass

FieldBuilder Klass

MethodBuilder Klass

CustomAttributeBuilder Klass

MethodRental Klass

ModuleBuilder Klass

PropertyBuilder Klass

TypeBuilder Klass

UnmanagedMarshal Klass
System.Text Group.Synchronized Metod

Match.Synchronized Metod
System.Threading AutoResetEvent Klass

EventWaitHandle Klass

ManualResetEvent Klass

Monitor Klass

Mutex Klass

ReaderWriterLock Klass

Semaphore Klass

Thread.AllocateNamedDataSlot Metod

Thread.BeginCriticalRegion Metod

Thread.EndCriticalRegion Metod

Thread.FreeNamedDataSlot Metod

Thread.GetData Metod

Thread.Join Metod

Thread.SetApartmentState Metod

Thread.SetData Metod

Thread.SpinWait Metod

Thread.Start Metod

Thread.TrySetApartmentState Metod

ThreadPool Klass

Timer Klass
System.Timers Timer Klass
System.Web.Configuration MachineKeyValidationConverter Klass
System.Windows.Forms AutoCompleteStringCollection.SyncRoot Egenskapen

SQL Server-behörighetsuppsättningar

MED SQL Server kan användarna ange tillförlitlighetskraven för kod som distribueras till en databas. När sammansättningar laddas upp till databasen kan författaren till sammansättningen ange en av tre behörighetsuppsättningar för den sammansättningen: SAFE, EXTERNAL-ACCESS eller UNSAFE.

Behörighetsuppsättning SÄKER EXTERN ÅTKOMST OSÄKRA
Kodåtkomstsäkerhet Kör endast Kör + åtkomst till externa resurser Obegränsat
Begränsningar för programmeringsmodell Ja Ja Inga begränsningar
Verifierbarhetskrav Ja Ja Nej
Möjlighet att anropa intern kod Nej No Ja

SAFE är det mest tillförlitliga och säkra läget med tillhörande begränsningar när det gäller den tillåtna programmeringsmodellen. SAFE-kod har hög tillförlitlighet och säkerhetsfunktioner. SAFE-sammansättningar har tillräcklig behörighet för att köra, utföra beräkningar och ha åtkomst till den lokala databasen. SAFE-sammansättningar måste vara verifierbart typsäkra och får inte anropa ohanterad kod.

EXTERN ÅTKOMST ger ett mellanliggande säkerhetsalternativ som ger kod åtkomst till resurser utanför databasen men som fortfarande har tillförlitligheten och säkerheten för SAFE.

UNSAFE är för mycket betrodd kod som bara kan skapas av databasadministratörer. Den här betrodda koden har inga begränsningar för kodåtkomst och kan anropa ohanterad (intern) kod.

SQL Server använder säkerhetsprinciplagret för kodåtkomst på värdnivå för att konfigurera en värdprincip som ger en av de tre uppsättningarna behörigheter baserat på behörighetsuppsättningen som lagras i SQL Server-kataloger. Hanterad kod som körs i databasen hämtar alltid en av dessa kodåtkomstbehörighetsuppsättningar.

Begränsningar för programmeringsmodell

Programmeringsmodellen för hanterad kod i SQL Server kräver funktioner, procedurer och typer som inte kräver användning av tillstånd för flera anrop eller delning av tillstånd över flera användarsessioner. Som tidigare beskrivits kan förekomsten av delat tillstånd orsaka kritiska undantag som påverkar programmets skalbarhet och tillförlitlighet.

Med tanke på dessa överväganden tillåter SQL Server inte användning av statiska variabler och statiska datamedlemmar. För SAFE- och EXTERNAL-ACCESS-sammansättningar undersöker SQL Server metadata för sammansättningen vid CREATE ASSEMBLY-tiden och misslyckas med att skapa sådana sammansättningar om den hittar användningen av statiska datamedlemmar och variabler.

Se även