programmazione per SQL Server e attributi di protezione hostSQL Server Programming and Host Protection Attributes

Per poter caricare ed eseguire codice gestito in un host di SQL Server, è necessario soddisfare i requisiti dell'host sia per la sicurezza dall'accesso di codice che per la protezione delle risorse dell'host.The ability to load and execute managed code in a SQL Server host requires meeting the host's requirements for both code access security and host resource protection. I requisiti di sicurezza di accesso di codice sono specificati da uno dei tre set di autorizzazioni di SQL Server: -SAFE, EXTERNAL-ACCESS o UNSAFE.The code access security requirements are specified by one of three SQL Server permission sets: SAFE, EXTERNAL-ACCESS, or UNSAFE. L'esecuzione del codice nell'ambito del set di autorizzazioni SAFE o EXTERNAL-ACCESS deve evitare alcuni tipi o membri con l'attributo HostProtectionAttribute applicato.Code executing within the SAFE or EXTERNAL-ACCESS permission sets must avoid certain types or members that have the HostProtectionAttribute attribute applied. HostProtectionAttribute non è un'autorizzazione di sicurezza, ma piuttosto una garanzia di affidabilità perché identifica specifici costrutti del codice, tipi o metodi, che l'host potrebbe non consentire.The HostProtectionAttribute is not a security permission as much as a reliability guarantee in that it identifies specific code constructs, either types or methods, that the host may disallow. L'uso di HostProtectionAttribute impone un modello di programmazione che contribuisce alla protezione della stabilità dell'host.The use of the HostProtectionAttribute enforces a programming model that helps protect the stability of the host.

Attributi di protezione dell'hostHost Protection Attributes

Gli attributi di protezione dell'host identificano i tipi o membri non idonei per il modello di programmazione dell'host e che rappresentano i seguenti livelli crescenti di minaccia per l'affidabilità:Host protection attributes identify types or members that do not fit the host programming model and represent the following increasing levels of reliability threat:

  • Sono altrimenti innocui.Are otherwise benign.

  • Potrebbero portare alla destabilizzazione del codice utente gestito dal server.Could lead to destabilization of server-managed user code.

  • Potrebbero portare alla destabilizzazione del processo del server stesso.Could lead to destabilization of the server process itself.

SQL Server non consente l'uso di un tipo o membro con HostProtectionAttribute che specifica un valore HostProtectionResource uguale a SharedState, Synchronization, MayLeakOnAbort o ExternalProcessMgmt.SQL Server disallows the use of a type or member that has a HostProtectionAttribute that specifies a HostProtectionResource value of SharedState, Synchronization, MayLeakOnAbort, or 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.This prevents the assemblies from calling members that enable sharing state, perform synchronization, might cause a resource leak on termination, or affect the integrity of the SQL Server process.

Tipi e membri non consentitiDisallowed Types and Members

La tabella seguente identifica i tipi e membri i cui valori HostProtectionResource non sono consentiti da SQL Server.The following table identifies types and members whose HostProtectionResource values are disallowed by SQL Server.

Spazio dei nomiNamespace Tipo o membroType or member
Microsoft.Win32 Classe PowerModeChangedEventArgsPowerModeChangedEventArgs class

Delegato PowerModeChangedEventHandlerPowerModeChangedEventHandler delegate

Classe SessionEndedEventArgsSessionEndedEventArgs class

Delegato SessionEndedEventHandlerSessionEndedEventHandler delegate

Classe SessionEndingEventArgsSessionEndingEventArgs class

Delegato SessionEndingEventHandlerSessionEndingEventHandler delegate

Classe SessionSwitchEventArgsSessionSwitchEventArgs class

Delegato SessionSwitchEventHandlerSessionSwitchEventHandler delegate

Classe SystemEventsSystemEvents class

Classe TimerElapsedEventArgsTimerElapsedEventArgs class

Delegato TimerElapsedEventHandlerTimerElapsedEventHandler delegate

Classe UserPreferenceChangedEventArgsUserPreferenceChangedEventArgs class

Classe UserPreferenceChangingEventArgsUserPreferenceChangingEventArgs class
System.Collections Metodo ArrayList.SynchronizedArrayList.Synchronized method

Metodo Hashtable.SynchronizedHashtable.Synchronized method

Metodo Queue.SynchronizedQueue.Synchronized method

Metodo SortedList.SynchronizedSortedList.Synchronized method

Metodo Stack.SynchronizedStack.Synchronized method
System.ComponentModel Classe AddingNewEventArgsAddingNewEventArgs class

Delegato AddingNewEventHandlerAddingNewEventHandler delegate

Classe ArrayConverterArrayConverter class

Classe AsyncCompletedEventArgsAsyncCompletedEventArgs class

Delegato AsyncCompletedEventHandlerAsyncCompletedEventHandler delegate

Classe AsyncOperationAsyncOperation class

Classe AsyncOperationManagerAsyncOperationManager class

Classe AttributeCollectionAttributeCollection class

Classe BackgroundWorkerBackgroundWorker class

Classe BaseNumberConverterBaseNumberConverter class

Classe BindingList<T>BindingList<T> class

Classe BooleanConverterBooleanConverter class

Classe ByteConverterByteConverter class

Classe CancelEventArgsCancelEventArgs class

Delegato CancelEventHandlerCancelEventHandler delegate

Classe CharConverterCharConverter class

Classe CollectionChangeEventArgsCollectionChangeEventArgs class

Delegato CollectionChangeEventHandlerCollectionChangeEventHandler delegate

Classe CollectionConverterCollectionConverter class

Classe ComponentCollectionComponentCollection class

Classe ComponentConverterComponentConverter class

Classe ComponentEditorComponentEditor class

Classe ComponentResourceManagerComponentResourceManager class

Classe ContainerContainer class

Classe ContainerFilterServiceContainerFilterService class

Classe CultureInfoConverterCultureInfoConverter class

Classe CustomTypeDescriptorCustomTypeDescriptor class

Classe DateTimeConverterDateTimeConverter class

Classe DecimalConverterDecimalConverter class

Classe ActiveDesignerEventArgsActiveDesignerEventArgs class

Delegato ActiveDesignerEventHandlerActiveDesignerEventHandler delegate

Classe CheckoutExceptionCheckoutException class

Classe CommandIDCommandID class

Classe ComponentChangedEventArgsComponentChangedEventArgs class

Delegato ComponentChangedEventHandlerComponentChangedEventHandler delegate

Classe ComponentChangingEventArgsComponentChangingEventArgs class

Delegato ComponentChangingEventHandlerComponentChangingEventHandler delegate

Classe ComponentEventArgsComponentEventArgs class

Delegato ComponentEventHandlerComponentEventHandler delegate

Classe ComponentRenameEventArgsComponentRenameEventArgs class

Delegato ComponentRenameEventHandlerComponentRenameEventHandler delegate

Classe DesignerCollectionDesignerCollection class

Classe DesignerEventArgsDesignerEventArgs class

Delegato DesignerEventHandlerDesignerEventHandler delegate

Classe DesignerOptionServiceDesignerOptionService class

Classe DesignerTransactionDesignerTransaction class

Classe DesignerTransactionCloseEventArgsDesignerTransactionCloseEventArgs class

Delegato DesignerTransactionCloseEventHandlerDesignerTransactionCloseEventHandler delegate

Classe DesignerVerbDesignerVerb class

Classe DesignerVerbCollectionDesignerVerbCollection class

Classe DesigntimeLicenseContextDesigntimeLicenseContext class

Classe DesigntimeLicenseContextSerializerDesigntimeLicenseContextSerializer class

Classe MenuCommandMenuCommand class

Classe ComponentSerializationServiceComponentSerializationService class

Classe ContextStackContextStack class

Classe DesignerLoaderDesignerLoader class

Classe InstanceDescriptorInstanceDescriptor class

Classe MemberRelationshipServiceMemberRelationshipService class

Classe ResolveNameEventArgsResolveNameEventArgs class

Delegato ResolveNameEventHandlerResolveNameEventHandler delegate

Classe SerializationStoreSerializationStore class

Classe ServiceContainerServiceContainer class

Delegato ServiceCreatorCallbackServiceCreatorCallback delegate

Classe StandardCommandsStandardCommands class

Classe StandardToolWindowsStandardToolWindows class

Classe DoubleConverterDoubleConverter class

Classe DoWorkEventArgsDoWorkEventArgs class

Delegato DoWorkEventHandlerDoWorkEventHandler delegate

Classe EnumConverterEnumConverter class

Classe EventDescriptorEventDescriptor class

Classe EventDescriptorCollectionEventDescriptorCollection class

Classe EventHandlerListEventHandlerList class

Classe ExpandableObjectConverterExpandableObjectConverter class

Classe HandledEventArgsHandledEventArgs class

Delegato HandledEventHandlerHandledEventHandler delegate

Classe InstanceCreationEditorInstanceCreationEditor class

Classe Int16ConverterInt16Converter class

Classe Int32ConverterInt32Converter class

Classe Int64ConverterInt64Converter class

Classe InvalidAsynchronousStateExceptionInvalidAsynchronousStateException class

Classe InvalidEnumArgumentExceptionInvalidEnumArgumentException class

Metodo BeginInvokeBeginInvoke method

Classe LicenseLicense class

Classe LicenseContextLicenseContext class

Classe LicenseExceptionLicenseException class

Classe LicenseManagerLicenseManager class

Classe LicenseProviderLicenseProvider class

Classe LicFileLicenseProviderLicFileLicenseProvider class

Classe ListChangedEventArgsListChangedEventArgs class

Delegato ListChangedEventHandlerListChangedEventHandler delegate

Classe ListSortDescriptionListSortDescription class

Classe ListSortDescriptionCollectionListSortDescriptionCollection class

Classe MaskedTextProviderMaskedTextProvider class

Classe MemberDescriptorMemberDescriptor class

Classe MultilineStringConverterMultilineStringConverter class

Classe NestedContainerNestedContainer class

Classe NullableConverterNullableConverter class

Classe ProgressChangedEventArgsProgressChangedEventArgs class

Delegato ProgressChangedEventHandlerProgressChangedEventHandler delegate

Classe PropertyChangedEventArgsPropertyChangedEventArgs class

Delegato PropertyChangedEventHandlerPropertyChangedEventHandler delegate

Classe PropertyDescriptorPropertyDescriptor class

Classe PropertyDescriptorCollectionPropertyDescriptorCollection class

Classe ReferenceConverterReferenceConverter class

Classe RefreshEventArgsRefreshEventArgs class

Delegato RefreshEventHandlerRefreshEventHandler delegate

Classe RunWorkerCompletedEventArgsRunWorkerCompletedEventArgs class

Delegato RunWorkerCompletedEventHandlerRunWorkerCompletedEventHandler delegate

Classe SByteConverterSByteConverter class

Classe SingleConverterSingleConverter class

Classe StringConverterStringConverter class

Classe SyntaxCheckSyntaxCheck class

Classe TimeSpanConverterTimeSpanConverter class

Classe TypeConverterTypeConverter class

Classe TypeDescriptionProviderTypeDescriptionProvider class

Classe TypeDescriptorTypeDescriptor class

Classe TypeListConverterTypeListConverter class

Classe UInt16ConverterUInt16Converter class

Classe UInt32ConverterUInt32Converter class

Classe UInt64ConverterUInt64Converter class

Classe WarningExceptionWarningException class

Classe Win32ExceptionWin32Exception class
System.Diagnostics ProprietàDebug.Listeners Debug.Listeners property

ProprietàTrace.Listeners Trace.Listeners property

ProprietàEventLog.SynchronizingObject EventLog.SynchronizingObject property

Classe ConsoleTraceListenerConsoleTraceListener class

Classe DefaultTraceListenerDefaultTraceListener class

Classe DelimitedListTraceListenerDelimitedListTraceListener class

Classe EventLogTraceListenerEventLogTraceListener class

Classe PerformanceCounterPerformanceCounter class

Classe PerformanceCounterCategoryPerformanceCounterCategory class

Classe ProcessProcess class

Classe ProcessStartInfoProcessStartInfo class

Classe TextWriterTraceListenerTextWriterTraceListener class

Classe TraceListenerTraceListener class

Classe XmlWriterTraceListenerXmlWriterTraceListener class

ProprietàTraceSource.Listeners TraceSource.Listeners property
System.IO Metodo Stream.SynchronizedStream.Synchronized method

Metodo TextReader.SynchronizedTextReader.Synchronized method

Metodo TextWriter.SynchronizedTextWriter.Synchronized method
System.Reflection.Emit Classe ConstructorBuilderConstructorBuilder class

Classe EventBuilderEventBuilder class

Classe FieldBuilderFieldBuilder class

Classe MethodBuilderMethodBuilder class

Classe CustomAttributeBuilderCustomAttributeBuilder class

Classe MethodRentalMethodRental class

Classe ModuleBuilderModuleBuilder class

Classe PropertyBuilderPropertyBuilder class

Classe TypeBuilderTypeBuilder class

Classe UnmanagedMarshalUnmanagedMarshal class
System.Text Metodo Group.SynchronizedGroup.Synchronized method

Metodo Match.SynchronizedMatch.Synchronized method
System.Threading Classe AutoResetEventAutoResetEvent class

Classe EventWaitHandleEventWaitHandle class

Classe ManualResetEventManualResetEvent class

Classe MonitorMonitor class

Classe MutexMutex class

Classe ReaderWriterLockReaderWriterLock class

Classe SemaphoreSemaphore class

Metodo Thread.AllocateNamedDataSlotThread.AllocateNamedDataSlot method

Metodo Thread.BeginCriticalRegionThread.BeginCriticalRegion method

Metodo Thread.EndCriticalRegionThread.EndCriticalRegion method

Metodo Thread.FreeNamedDataSlotThread.FreeNamedDataSlot method

Metodo Thread.GetDataThread.GetData method

Metodo Thread.JoinThread.Join method

Metodo Thread.SetApartmentStateThread.SetApartmentState method

Metodo Thread.SetDataThread.SetData method

Metodo Thread.SpinWaitThread.SpinWait method

Metodo Thread.StartThread.Start method

Metodo Thread.TrySetApartmentStateThread.TrySetApartmentState method

Classe ThreadPoolThreadPool class

Classe TimerTimer class
System.Timers Classe TimerTimer class
System.Web.Configuration Classe MachineKeyValidationConverterMachineKeyValidationConverter class
System.Windows.Forms ProprietàAutoCompleteStringCollection.SyncRoot AutoCompleteStringCollection.SyncRoot property

Set di autorizzazioni di SQL ServerSQL Server Permission Sets

SQL Server consente agli utenti di specificare i requisiti di affidabilità per il codice distribuito in un database.SQL Server allows users to specify the reliability requirements for code deployed into a 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.When assemblies are uploaded into the database, the author of the assembly can specify one of three permission sets for that assembly: SAFE, EXTERNAL-ACCESS, or UNSAFE.

Set di autorizzazioniPermission set SAFESAFE EXTERNAL-ACCESSEXTERNAL-ACCESS UNSAFEUNSAFE
Sicurezza dall'accesso di codiceCode access security Sola esecuzioneExecute only Esecuzione più accesso alle risorse esterneExecute + access to external resources Senza restrizioniUnrestricted
Restrizioni relative al modello di programmazioneProgramming model restrictions YesYes YesYes Nessuna restrizioneNo restrictions
Requisito di verificabilitàVerifiability requirement YesYes YesYes NoNo
Possibilità di chiamare codice nativoAbility to call native code NoNo NoNo YesYes

SAFE è la modalità più affidabile e sicura con le restrizioni associate in termini di modello di programmazione consentito.SAFE is the most reliable and secure mode with associated restrictions in terms of the allowed programming model. Il codice SAFE dispone di funzionalità di sicurezza e affidabilità elevata.SAFE code has high reliability and security features. Agli assembly SAFE vengono concesse autorizzazioni sufficienti per l'esecuzione, l'esecuzione di calcoli e l'accesso al database locale.SAFE assemblies are given enough permission to run, perform computations, and have access to the local database. Gli assembly SAFE devono essere indipendenti dai tipi in modo verificabile e non possono chiamare codice non gestito.SAFE assemblies need to be verifiably type safe and are not allowed to call unmanaged code.

Il livello EXTERNAL-ACCESS rappresenta un'opzione di sicurezza intermedia, consentendo al codice di accedere alle risorse esterne al database, ma comunque con l'affidabilità e la protezione del livello SAFE.EXTERNAL-ACCESS provides an intermediate security option, allowing code to access resources external to the database but still having the reliability and safety of SAFE.

Il livello UNSAFE è destinato a codice altamente attendibile che può essere creato solo dagli amministratori di database.UNSAFE is for highly trusted code that can only be created by database administrators. Questo codice attendibile non presenta alcuna restrizione di accesso di codice e può chiamare codice non gestito (nativo).This trusted code has no code access restrictions, and it can call unmanaged (native) code.

SQL Server usa il livello dei criteri di sicurezza dall'accesso di codice a livello dell'host per configurare criteri host che concedono uno dei tre set di autorizzazioni in base al set di autorizzazioni archiviato nei cataloghi di SQL Server.SQL Server uses the host-level code access security policy layer to set up a host policy that grants one of the three sets of permissions based on the permission set stored in SQL Server catalogs. Al codice gestito in esecuzione all'interno del database viene sempre assegnato uno di questi set di autorizzazioni per l'accesso di codice.Managed code running inside the database always gets one of these code access permission sets.

Restrizioni relative al modello di programmazioneProgramming Model Restrictions

Il modello di programmazione per il codice gestito in SQL Server richiede funzioni, procedure e tipi che non richiedono l'uso dello stato mantenuto tra più chiamate né la condivisione dello stato tra più sessioni utente.The programming model for managed code in SQL Server requires functions, procedures, and types which do not require the use of state held across multiple invocations or the sharing of state across multiple user sessions. Inoltre, come descritto in precedenza, la presenza di uno stato condiviso può causare eccezioni critiche che influiscono sulla scalabilità e l'affidabilità dell'applicazione.Further, as described earlier, the presence of shared state can cause critical exceptions that impact the scalability and the reliability of the application.

Considerati questi aspetti, SQL Server non consente l'uso di variabili statiche e membri dati statici.Given these considerations, SQL Server disallows the use of static variables and static data members. Per gli assembly SAFE ed EXTERNAL-ACCESS, SQL Server esamina i metadati dell'assembly nella fase CREATE ASSEMBLY e la creazione di tali assembly ha esito negativo se viene rilevato l'uso di membri dati e variabili statici.For SAFE and EXTERNAL-ACCESS assemblies, SQL Server examines the metadata of the assembly at CREATE ASSEMBLY time, and fails the creation of such assemblies if it finds the use of static data members and variables.

Vedere ancheSee also