Megosztás a következőn keresztül:


SQL Server programozási és gazdagépvédelmi attribútumok

A felügyelt kód SQL Server-gazdagépen való betöltéséhez és végrehajtásához meg kell felelnie a gazdagépnek a kódhozzáférés biztonságára és a gazdagép erőforrás-védelmére vonatkozó követelményeinek. A kódhozzáférés biztonsági követelményeit az SQL Server három engedélykészletének egyike határozza meg: SAFE, EXTERNAL-ACCESS vagy UNSAFE. A SAFE vagy a EXTERNAL-ACCESS engedélykészleten belül végrehajtó kódnak kerülnie kell az attribútummal rendelkező HostProtectionAttribute bizonyos típusokat vagy tagokat. Ez HostProtectionAttribute nem olyan biztonsági engedély, mint megbízhatósági garancia abban, hogy azonosítja azokat a kódszerkezeteket, akár típusokat, akár módszereket, amelyeket a gazdagép elutasíthat. A használata kényszeríti a HostProtectionAttribute programozási modellt, amely segít megvédeni a gazdagép stabilitását.

Feljegyzés

A Code Access Security (CAS) elavult a .NET-keretrendszer és a .NET összes verziójában. A .NET legújabb verziói nem tartják tiszteletben a CAS-megjegyzéseket, és cas-okkal kapcsolatos API-k használata esetén hibákat okoznak. A fejlesztőknek alternatív módot kell keresnie a biztonsági feladatok elvégzésére.

Gazdagépvédelmi attribútumok

A gazdagépvédelmi attribútumok olyan típusokat vagy tagokat azonosítanak, amelyek nem felelnek meg a gazdagép programozási modelljének, és a megbízhatósági fenyegetés következő növekvő szintjét képviselik:

  • Egyébként jóindulatúak.

  • A kiszolgáló által felügyelt felhasználói kód destabilizálásához vezethet.

  • A kiszolgálói folyamat destabilizálásához vezethet.

Az SQL Server nem engedélyezi olyan típus vagy tag használatát, amely HostProtectionAttributeHostProtectionResourceSharedStatea , Synchronization, MayLeakOnAbortvagy .ExternalProcessMgmt Ez megakadályozza, hogy a szerelvények olyan tagokat hívjanak meg, amelyek engedélyezik a megosztási állapotot, szinkronizálást hajtanak végre, erőforrásszivárgást okozhatnak a leállításkor, vagy befolyásolhatják az SQL Server-folyamat integritását.

Nem engedélyezett típusok és tagok

Az alábbi táblázat azokat a típusokat és tagokat azonosítja, amelyek HostProtectionResource értékeit az SQL Server nem engedélyezi.

Névtér Típus vagy tag
Microsoft.Win32 PowerModeChangedEventArgs Osztály

PowerModeChangedEventHandler Küldött

SessionEndedEventArgs Osztály

SessionEndedEventHandler Küldött

SessionEndingEventArgs Osztály

SessionEndingEventHandler Küldött

SessionSwitchEventArgs Osztály

SessionSwitchEventHandler Küldött

SystemEvents Osztály

TimerElapsedEventArgs Osztály

TimerElapsedEventHandler Küldött

UserPreferenceChangedEventArgs Osztály

UserPreferenceChangingEventArgs Osztály
System.Collections ArrayList.Synchronized Módszer

Hashtable.Synchronized Módszer

Queue.Synchronized Módszer

SortedList.Synchronized Módszer

Stack.Synchronized Módszer
System.ComponentModel AddingNewEventArgs Osztály

AddingNewEventHandler Küldött

ArrayConverter Osztály

AsyncCompletedEventArgs Osztály

AsyncCompletedEventHandler Küldött

AsyncOperation Osztály

AsyncOperationManager Osztály

AttributeCollection Osztály

BackgroundWorker Osztály

BaseNumberConverter Osztály

BindingList<T> Osztály

BooleanConverter Osztály

ByteConverter Osztály

CancelEventArgs Osztály

CancelEventHandler Küldött

CharConverter Osztály

CollectionChangeEventArgs Osztály

CollectionChangeEventHandler Küldött

CollectionConverter Osztály

ComponentCollection Osztály

ComponentConverter Osztály

ComponentEditor Osztály

ComponentResourceManager Osztály

Container Osztály

ContainerFilterService Osztály

CultureInfoConverter Osztály

CustomTypeDescriptor Osztály

DateTimeConverter Osztály

DecimalConverter Osztály

ActiveDesignerEventArgs Osztály

ActiveDesignerEventHandler Küldött

CheckoutException Osztály

CommandID Osztály

ComponentChangedEventArgs Osztály

ComponentChangedEventHandler Küldött

ComponentChangingEventArgs Osztály

ComponentChangingEventHandler Küldött

ComponentEventArgs Osztály

ComponentEventHandler Küldött

ComponentRenameEventArgs Osztály

ComponentRenameEventHandler Küldött

DesignerCollection Osztály

DesignerEventArgs Osztály

DesignerEventHandler Küldött

DesignerOptionService Osztály

DesignerTransaction Osztály

DesignerTransactionCloseEventArgs Osztály

DesignerTransactionCloseEventHandler Küldött

DesignerVerb Osztály

DesignerVerbCollection Osztály

DesigntimeLicenseContext Osztály

DesigntimeLicenseContextSerializer Osztály

MenuCommand Osztály

ComponentSerializationService Osztály

ContextStack Osztály

DesignerLoader Osztály

InstanceDescriptor Osztály

MemberRelationshipService Osztály

ResolveNameEventArgs Osztály

ResolveNameEventHandler Küldött

SerializationStore Osztály

ServiceContainer Osztály

ServiceCreatorCallback Küldött

StandardCommands Osztály

StandardToolWindows Osztály

DoubleConverter Osztály

DoWorkEventArgs Osztály

DoWorkEventHandler Küldött

EnumConverter Osztály

EventDescriptor Osztály

EventDescriptorCollection Osztály

EventHandlerList Osztály

ExpandableObjectConverter Osztály

HandledEventArgs Osztály

HandledEventHandler Küldött

InstanceCreationEditor Osztály

Int16Converter Osztály

Int32Converter Osztály

Int64Converter Osztály

InvalidAsynchronousStateException Osztály

InvalidEnumArgumentException Osztály

BeginInvoke Módszer

License Osztály

LicenseContext Osztály

LicenseException Osztály

LicenseManager Osztály

LicenseProvider Osztály

LicFileLicenseProvider Osztály

ListChangedEventArgs Osztály

ListChangedEventHandler Küldött

ListSortDescription Osztály

ListSortDescriptionCollection Osztály

MaskedTextProvider Osztály

MemberDescriptor Osztály

MultilineStringConverter Osztály

NestedContainer Osztály

NullableConverter Osztály

ProgressChangedEventArgs Osztály

ProgressChangedEventHandler Küldött

PropertyChangedEventArgs Osztály

PropertyChangedEventHandler Küldött

PropertyDescriptor Osztály

PropertyDescriptorCollection Osztály

ReferenceConverter Osztály

RefreshEventArgs Osztály

RefreshEventHandler Küldött

RunWorkerCompletedEventArgs Osztály

RunWorkerCompletedEventHandler Küldött

SByteConverter Osztály

SingleConverter Osztály

StringConverter Osztály

SyntaxCheck Osztály

TimeSpanConverter Osztály

TypeConverter Osztály

TypeDescriptionProvider Osztály

TypeDescriptor Osztály

TypeListConverter Osztály

UInt16Converter Osztály

UInt32Converter Osztály

UInt64Converter Osztály

WarningException Osztály

Win32Exception Osztály
System.Diagnostics Debug.Listeners Tulajdonság

Trace.Listeners Tulajdonság

EventLog.SynchronizingObject Tulajdonság

ConsoleTraceListener Osztály

DefaultTraceListener Osztály

DelimitedListTraceListener Osztály

EventLogTraceListener Osztály

PerformanceCounter Osztály

PerformanceCounterCategory Osztály

Process Osztály

ProcessStartInfo Osztály

TextWriterTraceListener Osztály

TraceListener Osztály

XmlWriterTraceListener Osztály

TraceSource.Listeners Tulajdonság
System.IO Stream.Synchronized Módszer

TextReader.Synchronized Módszer

TextWriter.Synchronized Módszer
System.Reflection.Emit ConstructorBuilder Osztály

EventBuilder Osztály

FieldBuilder Osztály

MethodBuilder Osztály

CustomAttributeBuilder Osztály

MethodRental Osztály

ModuleBuilder Osztály

PropertyBuilder Osztály

TypeBuilder Osztály

UnmanagedMarshal Osztály
System.Text Group.Synchronized Módszer

Match.Synchronized Módszer
System.Threading AutoResetEvent Osztály

EventWaitHandle Osztály

ManualResetEvent Osztály

Monitor Osztály

Mutex Osztály

ReaderWriterLock Osztály

Semaphore Osztály

Thread.AllocateNamedDataSlot Módszer

Thread.BeginCriticalRegion Módszer

Thread.EndCriticalRegion Módszer

Thread.FreeNamedDataSlot Módszer

Thread.GetData Módszer

Thread.Join Módszer

Thread.SetApartmentState Módszer

Thread.SetData Módszer

Thread.SpinWait Módszer

Thread.Start Módszer

Thread.TrySetApartmentState Módszer

ThreadPool Osztály

Timer Osztály
System.Timers Timer Osztály
System.Web.Configuration MachineKeyValidationConverter Osztály
System.Windows.Forms AutoCompleteStringCollection.SyncRoot Tulajdonság

SQL Server engedélykészletek

Az SQL Server lehetővé teszi, hogy a felhasználók megadják az adatbázisba telepített kód megbízhatósági követelményeit. Amikor a szerelvényeket feltölti az adatbázisba, a szerelvény szerzője három engedélykészlet egyikét adhatja meg az adott szerelvényhez: SAFE, EXTERNAL-ACCESS vagy UNSAFE.

Engedélykészlet BIZTONSÁGOS KÜLSŐ HOZZÁFÉRÉS BIZTONSÁGOS
Kódhozzáférés biztonsága Csak végrehajtás Végrehajtás + hozzáférés külső erőforrásokhoz Nem korlátozott
Programozási modell korlátozásai Igen Igen Nincsenek korlátozások
Ellenőrizhetőségi követelmény Igen Igen Nem
Natív kód meghívásának képessége Nem Nem Igen

A SAFE a legmegbízhatóbb és legbiztonságosabb mód az engedélyezett programozási modellre vonatkozó korlátozásokkal. A SAFE-kód magas megbízhatósági és biztonsági funkciókkal rendelkezik. A SAFE szerelvények elegendő engedélyt kapnak a futtatáshoz, a számítások elvégzéséhez és a helyi adatbázishoz való hozzáféréshez. A SAFE szerelvényeknek ellenőrizhetően biztonságosnak kell lenniük, és nem hívhatnak nem felügyelt kódot.

Az EXTERNAL-ACCESS egy köztes biztonsági lehetőséget biztosít, amely lehetővé teszi, hogy a kód hozzáférjen az adatbázison kívüli erőforrásokhoz, de továbbra is rendelkezik a SAFE megbízhatóságával és biztonságosságával.

A UNSAFE olyan megbízható kód, amelyet csak adatbázis-rendszergazdák hozhatnak létre. Ez a megbízható kód nem rendelkezik kódhozzáférés-korlátozásokkal, és meghívhat nem felügyelt (natív) kódot.

Az SQL Server a gazdagépszintű kódhozzáférési biztonsági házirendréteg használatával állít be egy gazdagépházirendet, amely az SQL Server-katalógusokban tárolt engedélykészlet alapján a három engedélycsoport egyikét biztosítja. Az adatbázisban futó felügyelt kód mindig megkapja az ilyen kódhozzáférés-engedélykészletek egyikét.

Programozási modell korlátozásai

Az SQL Server felügyelt kódjának programozási modellje olyan függvényeket, eljárásokat és típusokat igényel, amelyek nem igénylik a több meghívásban vagy az állapot több felhasználói munkamenetben való megosztását. A korábban leírtaknak megfelelően a megosztott állapot jelenléte kritikus kivételeket okozhat, amelyek befolyásolják az alkalmazás méretezhetőségét és megbízhatóságát.

Ezen szempontok figyelembevételével az SQL Server nem engedélyezi a statikus változók és a statikus adattagok használatát. A SAFE és EXTERNAL-ACCESS szerelvények esetében az SQL Server a CREATE AS Standard kiadás MBLY időpontban megvizsgálja a szerelvény metaadatait, és nem hozza létre az ilyen szerelvényeket, ha statikus adattagok és változók használatát találja.

Lásd még