Condividi tramite


Attributi di programmazione e protezione host di SQL Server

La possibilità di caricare ed eseguire codice gestito in un host di SQL Server richiede soddisfare i requisiti dell'host sia per la sicurezza dell'accesso al codice che per la protezione delle risorse host. I requisiti di sicurezza dell'accesso al codice vengono specificati da uno dei tre set di autorizzazioni di SQL Server: SAFE, EXTERNAL-ACCESS o UNSAFE. Il codice in esecuzione all'interno dei set di autorizzazioni SAFE o EXTERNAL-ACCESS deve evitare determinati tipi o membri a cui è applicato l'attributo HostProtectionAttribute . Il HostProtectionAttribute non è un'autorizzazione di sicurezza, quanto piuttosto una garanzia di affidabilità, poiché identifica costrutti di codice specifici, come tipi o metodi, che l'host potrebbe vietare. L'uso del HostProtectionAttribute applica un modello di programmazione che consente di proteggere la stabilità dell'host.

Annotazioni

La sicurezza dall'accesso al codice è stata deprecata in tutte le versioni di .NET Framework e .NET. Le versioni recenti di .NET non rispettano le annotazioni CAS e generano errori se vengono usate API correlate a CAS. Gli sviluppatori devono cercare mezzi alternativi per eseguire attività di sicurezza.

Attributi di protezione host

Gli attributi di protezione host identificano i tipi o i membri che non rientrano nel modello di programmazione host e rappresentano i livelli crescenti di minaccia per l'affidabilità seguenti:

  • Sono altrimenti innocui.

  • Possono determinare la destabilizzazione del codice utente gestito dal server.

  • Possono determinare la destabilizzazione del processo del server stesso.

SQL Server non consente l'uso di un tipo o di un membro che ha un HostProtectionAttribute che specifica un HostProtectionResource valore di SharedState, Synchronization, MayLeakOnAbort, o ExternalProcessMgmt. In questo modo si impedisce agli assembly di chiamare membri che consentono la condivisione dello stato, eseguono sincronizzazioni, possono causare perdite di risorse al momento della terminazione o compromettono l'integrità del processo di SQL Server.

Tipi e membri non consentiti

La tabella seguente identifica i tipi e i membri i cui HostProtectionResource valori non sono consentiti da SQL Server.

Namespace Tipo o membro
Microsoft.Win32 Classe PowerModeChangedEventArgs

PowerModeChangedEventHandler delegato

Classe SessionEndedEventArgs

SessionEndedEventHandler delegato

Classe SessionEndingEventArgs

SessionEndingEventHandler delegato

Classe SessionSwitchEventArgs

SessionSwitchEventHandler delegato

Classe SystemEvents

Classe TimerElapsedEventArgs

TimerElapsedEventHandler delegato

Classe UserPreferenceChangedEventArgs

Classe UserPreferenceChangingEventArgs
System.Collections Metodo ArrayList.Synchronized

Metodo Hashtable.Synchronized

Metodo Queue.Synchronized

Metodo SortedList.Synchronized

Metodo Stack.Synchronized
System.ComponentModel Classe AddingNewEventArgs

AddingNewEventHandler delegato

Classe ArrayConverter

Classe AsyncCompletedEventArgs

AsyncCompletedEventHandler delegato

Classe AsyncOperation

Classe AsyncOperationManager

Classe AttributeCollection

Classe BackgroundWorker

Classe BaseNumberConverter

Classe BindingList<T>

Classe BooleanConverter

Classe ByteConverter

Classe CancelEventArgs

CancelEventHandler delegato

Classe CharConverter

Classe CollectionChangeEventArgs

CollectionChangeEventHandler delegato

Classe CollectionConverter

Classe ComponentCollection

Classe ComponentConverter

Classe ComponentEditor

Classe ComponentResourceManager

Classe Container

Classe ContainerFilterService

Classe CultureInfoConverter

Classe CustomTypeDescriptor

Classe DateTimeConverter

Classe DecimalConverter

Classe ActiveDesignerEventArgs

ActiveDesignerEventHandler delegato

Classe CheckoutException

Classe CommandID

Classe ComponentChangedEventArgs

ComponentChangedEventHandler delegato

Classe ComponentChangingEventArgs

ComponentChangingEventHandler delegato

Classe ComponentEventArgs

ComponentEventHandler delegato

Classe ComponentRenameEventArgs

ComponentRenameEventHandler delegato

Classe DesignerCollection

Classe DesignerEventArgs

DesignerEventHandler delegato

Classe DesignerOptionService

Classe DesignerTransaction

Classe DesignerTransactionCloseEventArgs

DesignerTransactionCloseEventHandler delegato

Classe DesignerVerb

Classe DesignerVerbCollection

Classe DesigntimeLicenseContext

Classe DesigntimeLicenseContextSerializer

Classe MenuCommand

Classe ComponentSerializationService

Classe ContextStack

Classe DesignerLoader

Classe InstanceDescriptor

Classe MemberRelationshipService

Classe ResolveNameEventArgs

ResolveNameEventHandler delegato

Classe SerializationStore

Classe ServiceContainer

ServiceCreatorCallback delegato

Classe StandardCommands

Classe StandardToolWindows

Classe DoubleConverter

Classe DoWorkEventArgs

DoWorkEventHandler delegato

Classe EnumConverter

Classe EventDescriptor

Classe EventDescriptorCollection

Classe EventHandlerList

Classe ExpandableObjectConverter

Classe HandledEventArgs

HandledEventHandler delegato

Classe InstanceCreationEditor

Classe Int16Converter

Classe Int32Converter

Classe Int64Converter

Classe InvalidAsynchronousStateException

Classe InvalidEnumArgumentException

Metodo BeginInvoke

Classe License

Classe LicenseContext

Classe LicenseException

Classe LicenseManager

Classe LicenseProvider

Classe LicFileLicenseProvider

Classe ListChangedEventArgs

ListChangedEventHandler delegato

Classe ListSortDescription

Classe ListSortDescriptionCollection

Classe MaskedTextProvider

Classe MemberDescriptor

Classe MultilineStringConverter

Classe NestedContainer

Classe NullableConverter

Classe ProgressChangedEventArgs

ProgressChangedEventHandler delegato

Classe PropertyChangedEventArgs

PropertyChangedEventHandler delegato

Classe PropertyDescriptor

Classe PropertyDescriptorCollection

Classe ReferenceConverter

Classe RefreshEventArgs

RefreshEventHandler delegato

Classe RunWorkerCompletedEventArgs

RunWorkerCompletedEventHandler delegato

Classe SByteConverter

Classe SingleConverter

Classe StringConverter

Classe SyntaxCheck

Classe TimeSpanConverter

Classe TypeConverter

Classe TypeDescriptionProvider

Classe TypeDescriptor

Classe TypeListConverter

Classe UInt16Converter

Classe UInt32Converter

Classe UInt64Converter

Classe WarningException

Classe Win32Exception
System.Diagnostics Debug.Listeners proprietà

Trace.Listeners proprietà

EventLog.SynchronizingObject proprietà

Classe ConsoleTraceListener

Classe DefaultTraceListener

Classe DelimitedListTraceListener

Classe EventLogTraceListener

Classe PerformanceCounter

Classe PerformanceCounterCategory

Classe Process

Classe ProcessStartInfo

Classe TextWriterTraceListener

Classe TraceListener

Classe XmlWriterTraceListener

TraceSource.Listeners proprietà
System.IO Metodo Stream.Synchronized

Metodo TextReader.Synchronized

Metodo TextWriter.Synchronized
System.Reflection.Emit Classe ConstructorBuilder

Classe EventBuilder

Classe FieldBuilder

Classe MethodBuilder

Classe CustomAttributeBuilder

Classe MethodRental

Classe ModuleBuilder

Classe PropertyBuilder

Classe TypeBuilder

Classe UnmanagedMarshal
System.Text Metodo Group.Synchronized

Metodo Match.Synchronized
System.Threading Classe AutoResetEvent

Classe EventWaitHandle

Classe ManualResetEvent

Classe Monitor

Classe Mutex

Classe ReaderWriterLock

Classe Semaphore

Metodo Thread.AllocateNamedDataSlot

Metodo Thread.BeginCriticalRegion

Metodo Thread.EndCriticalRegion

Metodo Thread.FreeNamedDataSlot

Metodo Thread.GetData

Metodo Thread.Join

Metodo Thread.SetApartmentState

Metodo Thread.SetData

Metodo Thread.SpinWait

Metodo Thread.Start

Metodo Thread.TrySetApartmentState

Classe ThreadPool

Classe Timer
System.Timers Classe Timer
System.Web.Configuration Classe MachineKeyValidationConverter
System.Windows.Forms AutoCompleteStringCollection.SyncRoot proprietà

Set di autorizzazioni di SQL Server

SQL Server consente agli utenti di specificare i requisiti di affidabilità per il codice distribuito in un database. Quando gli assembly vengono caricati nel database, l'autore dell'assembly può specificare uno dei tre set di autorizzazioni per tale assembly: SAFE, EXTERNAL-ACCESS o UNSAFE.

Set di autorizzazioni CASSAFORTE EXTERNAL-ACCESS PERICOLOSO
Sicurezza dell'accesso al codice Sola esecuzione Esecuzione più accesso a risorse esterne Illimitato
Restrizioni del modello di programmazione Nessuna restrizione
Requisito di verificabilità NO
Possibilità di chiamare il codice nativo NO NO

Grazie alle restrizioni associate in termini di modello di programmazione consentito, SAFE rappresenta la modalità più affidabile e protetta. Il codice SAFE ha funzionalità di sicurezza e affidabilità elevate. Gli assembly SAFE dispongono di autorizzazioni sufficienti per l'esecuzione, l'elaborazione di calcoli e l'accesso al database locale. Gli assembly SAFE devono essere effettivamente indipendenti dai tipi e non possono chiamare codice non gestito.

EXTERNAL-ACCESS offre un'opzione di sicurezza intermedia, consentendo al codice di accedere alle risorse esterne al database, ma mantenendo l'affidabilità e la sicurezza di SAFE.

UNSAFE è un set di autorizzazioni per codice altamente attendibile, che può essere creato solo dagli amministratori di database. Questo codice attendibile non ha restrizioni di accesso al codice e può chiamare codice non gestito (nativo).

SQL Server usa il livello dei criteri di sicurezza per l'accesso al codice a livello di host per configurare un criterio host che concede uno dei tre set di autorizzazioni in base al set di autorizzazioni archiviato nei cataloghi di SQL Server. Il codice gestito in esecuzione all'interno del database ottiene sempre uno di questi set di autorizzazioni di accesso per il codice.

Restrizioni del modello di programmazione

Il modello di programmazione per il codice gestito in SQL Server richiede funzioni, procedure e tipi che non richiedono l'uso dello stato tra più chiamate o la condivisione dello stato tra più sessioni utente. Come descritto in precedenza, la presenza dello stato condiviso può inoltre determinare eccezioni critiche che influiscono sulla scalabilità e l'affidabilità dell'applicazione.

Considerate queste considerazioni, SQL Server non consente l'uso di variabili statiche e membri dati statici. Per gli assembly SAFE e EXTERNAL-ACCESS, SQL Server esamina i metadati dell'assembly in fase DI CREAZIONE ASSEMBLY e non riesce a creare tali assembly se rileva l'uso di membri dati statici e variabili.

Vedere anche