Programación en SQL Server y atributos de protección de hostSQL Server Programming and Host Protection Attributes

La capacidad para cargar y ejecutar código administrado en un host de SQL Server requiere que se cumplan los requisitos del host tanto para la seguridad de acceso del código como para la protección de los recursos del 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. Los requisitos de la seguridad de acceso del código se especifican mediante uno de tres conjuntos de permisos de 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. El código que se ejecuta dentro de los conjuntos de permisos SAFE o EXTERNAL-ACCESS debe evitar ciertos tipos o miembros que tienen aplicado el atributo HostProtectionAttribute.Code executing within the SAFE or EXTERNAL-ACCESS permission sets must avoid certain types or members that have the HostProtectionAttribute attribute applied. HostProtectionAttribute no es un permiso de seguridad, por más que una garantía de confiabilidad identifique construcciones de código específico (ya sean tipos o métodos) que el host podría rechazar.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. El uso de HostProtectionAttribute requiere un modelo de programación que ayude a proteger la estabilidad del host.The use of the HostProtectionAttribute enforces a programming model that helps protect the stability of the host.

Atributos de protección del hostHost Protection Attributes

Los atributos de protección del host identifican los tipos o los miembros que no se ajustan al modelo de programación del host y representan los siguientes niveles crecientes de amenaza de confiabilidad:Host protection attributes identify types or members that do not fit the host programming model and represent the following increasing levels of reliability threat:

  • Son benignos.Are otherwise benign.

  • Podría provocar la desestabilización del código de usuario administrado por el servidor.Could lead to destabilization of server-managed user code.

  • Podría provocar la desestabilización del propio proceso del servidor.Could lead to destabilization of the server process itself.

SQL Server no permite el uso de un tipo o miembro que tiene un HostProtectionAttribute que especifica un valor HostProtectionResource de 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. Esto impide que los ensamblados llamen a los miembros que habilitan el estado compartido, realizan una sincronización, podrían provocar una pérdida de recursos al finalizar o afectan a la integridad del proceso de 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.

Tipos y miembros no permitidosDisallowed Types and Members

En la tabla siguiente se identifican los tipos y miembros cuyos valores HostProtectionResource no están permitidos en SQL Server.The following table identifies types and members whose HostProtectionResource values are disallowed by SQL Server.

Espacio de nombresNamespace Tipo o miembroType or member
Microsoft.Win32 Clase PowerModeChangedEventArgsPowerModeChangedEventArgs class

Delegado PowerModeChangedEventHandlerPowerModeChangedEventHandler delegate

Clase SessionEndedEventArgsSessionEndedEventArgs class

Delegado SessionEndedEventHandlerSessionEndedEventHandler delegate

Clase SessionEndingEventArgsSessionEndingEventArgs class

Delegado SessionEndingEventHandlerSessionEndingEventHandler delegate

Clase SessionSwitchEventArgsSessionSwitchEventArgs class

Delegado SessionSwitchEventHandlerSessionSwitchEventHandler delegate

Clase SystemEventsSystemEvents class

Clase TimerElapsedEventArgsTimerElapsedEventArgs class

Delegado TimerElapsedEventHandlerTimerElapsedEventHandler delegate

Clase UserPreferenceChangedEventArgsUserPreferenceChangedEventArgs class

Clase UserPreferenceChangingEventArgsUserPreferenceChangingEventArgs class
System.Collections Método ArrayList.SynchronizedArrayList.Synchronized method

Método Hashtable.SynchronizedHashtable.Synchronized method

Método Queue.SynchronizedQueue.Synchronized method

Método SortedList.SynchronizedSortedList.Synchronized method

Método Stack.SynchronizedStack.Synchronized method
System.ComponentModel Clase AddingNewEventArgsAddingNewEventArgs class

Delegado AddingNewEventHandlerAddingNewEventHandler delegate

Clase ArrayConverterArrayConverter class

Clase AsyncCompletedEventArgsAsyncCompletedEventArgs class

Delegado AsyncCompletedEventHandlerAsyncCompletedEventHandler delegate

Clase AsyncOperationAsyncOperation class

Clase AsyncOperationManagerAsyncOperationManager class

Clase AttributeCollectionAttributeCollection class

Clase BackgroundWorkerBackgroundWorker class

Clase BaseNumberConverterBaseNumberConverter class

Clase BindingList<T>BindingList<T> class

Clase BooleanConverterBooleanConverter class

Clase ByteConverterByteConverter class

Clase CancelEventArgsCancelEventArgs class

Delegado CancelEventHandlerCancelEventHandler delegate

Clase CharConverterCharConverter class

Clase CollectionChangeEventArgsCollectionChangeEventArgs class

Delegado CollectionChangeEventHandlerCollectionChangeEventHandler delegate

Clase CollectionConverterCollectionConverter class

Clase ComponentCollectionComponentCollection class

Clase ComponentConverterComponentConverter class

Clase ComponentEditorComponentEditor class

Clase ComponentResourceManagerComponentResourceManager class

Clase ContainerContainer class

Clase ContainerFilterServiceContainerFilterService class

Clase CultureInfoConverterCultureInfoConverter class

Clase CustomTypeDescriptorCustomTypeDescriptor class

Clase DateTimeConverterDateTimeConverter class

Clase DecimalConverterDecimalConverter class

Clase ActiveDesignerEventArgsActiveDesignerEventArgs class

Delegado ActiveDesignerEventHandlerActiveDesignerEventHandler delegate

Clase CheckoutExceptionCheckoutException class

Clase CommandIDCommandID class

Clase ComponentChangedEventArgsComponentChangedEventArgs class

Delegado ComponentChangedEventHandlerComponentChangedEventHandler delegate

Clase ComponentChangingEventArgsComponentChangingEventArgs class

Delegado ComponentChangingEventHandlerComponentChangingEventHandler delegate

Clase ComponentEventArgsComponentEventArgs class

Delegado ComponentEventHandlerComponentEventHandler delegate

Clase ComponentRenameEventArgsComponentRenameEventArgs class

Delegado ComponentRenameEventHandlerComponentRenameEventHandler delegate

Clase DesignerCollectionDesignerCollection class

Clase DesignerEventArgsDesignerEventArgs class

Delegado DesignerEventHandlerDesignerEventHandler delegate

Clase DesignerOptionServiceDesignerOptionService class

Clase DesignerTransactionDesignerTransaction class

Clase DesignerTransactionCloseEventArgsDesignerTransactionCloseEventArgs class

Delegado DesignerTransactionCloseEventHandlerDesignerTransactionCloseEventHandler delegate

Clase DesignerVerbDesignerVerb class

Clase DesignerVerbCollectionDesignerVerbCollection class

Clase DesigntimeLicenseContextDesigntimeLicenseContext class

Clase DesigntimeLicenseContextSerializerDesigntimeLicenseContextSerializer class

Clase MenuCommandMenuCommand class

Clase ComponentSerializationServiceComponentSerializationService class

Clase ContextStackContextStack class

Clase DesignerLoaderDesignerLoader class

Clase InstanceDescriptorInstanceDescriptor class

Clase MemberRelationshipServiceMemberRelationshipService class

Clase ResolveNameEventArgsResolveNameEventArgs class

Delegado ResolveNameEventHandlerResolveNameEventHandler delegate

Clase SerializationStoreSerializationStore class

Clase ServiceContainerServiceContainer class

Delegado ServiceCreatorCallbackServiceCreatorCallback delegate

Clase StandardCommandsStandardCommands class

Clase StandardToolWindowsStandardToolWindows class

Clase DoubleConverterDoubleConverter class

Clase DoWorkEventArgsDoWorkEventArgs class

Delegado DoWorkEventHandlerDoWorkEventHandler delegate

Clase EnumConverterEnumConverter class

Clase EventDescriptorEventDescriptor class

Clase EventDescriptorCollectionEventDescriptorCollection class

Clase EventHandlerListEventHandlerList class

Clase ExpandableObjectConverterExpandableObjectConverter class

Clase HandledEventArgsHandledEventArgs class

Delegado HandledEventHandlerHandledEventHandler delegate

Clase InstanceCreationEditorInstanceCreationEditor class

Clase Int16ConverterInt16Converter class

Clase Int32ConverterInt32Converter class

Clase Int64ConverterInt64Converter class

Clase InvalidAsynchronousStateExceptionInvalidAsynchronousStateException class

Clase InvalidEnumArgumentExceptionInvalidEnumArgumentException class

Método BeginInvokeBeginInvoke method

Clase LicenseLicense class

Clase LicenseContextLicenseContext class

Clase LicenseExceptionLicenseException class

Clase LicenseManagerLicenseManager class

Clase LicenseProviderLicenseProvider class

Clase LicFileLicenseProviderLicFileLicenseProvider class

Clase ListChangedEventArgsListChangedEventArgs class

Delegado ListChangedEventHandlerListChangedEventHandler delegate

Clase ListSortDescriptionListSortDescription class

Clase ListSortDescriptionCollectionListSortDescriptionCollection class

Clase MaskedTextProviderMaskedTextProvider class

Clase MemberDescriptorMemberDescriptor class

Clase MultilineStringConverterMultilineStringConverter class

Clase NestedContainerNestedContainer class

Clase NullableConverterNullableConverter class

Clase ProgressChangedEventArgsProgressChangedEventArgs class

Delegado ProgressChangedEventHandlerProgressChangedEventHandler delegate

Clase PropertyChangedEventArgsPropertyChangedEventArgs class

Delegado PropertyChangedEventHandlerPropertyChangedEventHandler delegate

Clase PropertyDescriptorPropertyDescriptor class

Clase PropertyDescriptorCollectionPropertyDescriptorCollection class

Clase ReferenceConverterReferenceConverter class

Clase RefreshEventArgsRefreshEventArgs class

Delegado RefreshEventHandlerRefreshEventHandler delegate

Clase RunWorkerCompletedEventArgsRunWorkerCompletedEventArgs class

Delegado RunWorkerCompletedEventHandlerRunWorkerCompletedEventHandler delegate

Clase SByteConverterSByteConverter class

Clase SingleConverterSingleConverter class

Clase StringConverterStringConverter class

Clase SyntaxCheckSyntaxCheck class

Clase TimeSpanConverterTimeSpanConverter class

Clase TypeConverterTypeConverter class

Clase TypeDescriptionProviderTypeDescriptionProvider class

Clase TypeDescriptorTypeDescriptor class

Clase TypeListConverterTypeListConverter class

Clase UInt16ConverterUInt16Converter class

Clase UInt32ConverterUInt32Converter class

Clase UInt64ConverterUInt64Converter class

Clase WarningExceptionWarningException class

Clase Win32ExceptionWin32Exception class
System.Diagnostics Propiedad Debug.ListenersDebug.Listeners property

Propiedad Trace.ListenersTrace.Listeners property

Propiedad EventLog.SynchronizingObjectEventLog.SynchronizingObject property

Clase ConsoleTraceListenerConsoleTraceListener class

Clase DefaultTraceListenerDefaultTraceListener class

Clase DelimitedListTraceListenerDelimitedListTraceListener class

Clase EventLogTraceListenerEventLogTraceListener class

Clase PerformanceCounterPerformanceCounter class

Clase PerformanceCounterCategoryPerformanceCounterCategory class

Clase ProcessProcess class

Clase ProcessStartInfoProcessStartInfo class

Clase TextWriterTraceListenerTextWriterTraceListener class

Clase TraceListenerTraceListener class

Clase XmlWriterTraceListenerXmlWriterTraceListener class

Propiedad TraceSource.ListenersTraceSource.Listeners property
System.IO Método Stream.SynchronizedStream.Synchronized method

Método TextReader.SynchronizedTextReader.Synchronized method

Método TextWriter.SynchronizedTextWriter.Synchronized method
System.Reflection.Emit Clase ConstructorBuilderConstructorBuilder class

Clase EventBuilderEventBuilder class

Clase FieldBuilderFieldBuilder class

Clase MethodBuilderMethodBuilder class

Clase CustomAttributeBuilderCustomAttributeBuilder class

Clase MethodRentalMethodRental class

Clase ModuleBuilderModuleBuilder class

Clase PropertyBuilderPropertyBuilder class

Clase TypeBuilderTypeBuilder class

Clase UnmanagedMarshalUnmanagedMarshal class
System.Text Método Group.SynchronizedGroup.Synchronized method

Método Match.SynchronizedMatch.Synchronized method
System.Threading Clase AutoResetEventAutoResetEvent class

Clase EventWaitHandleEventWaitHandle class

Clase ManualResetEventManualResetEvent class

Clase MonitorMonitor class

Clase MutexMutex class

Clase ReaderWriterLockReaderWriterLock class

Clase SemaphoreSemaphore class

Método Thread.AllocateNamedDataSlotThread.AllocateNamedDataSlot method

Método Thread.BeginCriticalRegionThread.BeginCriticalRegion method

Método Thread.EndCriticalRegionThread.EndCriticalRegion method

Método Thread.FreeNamedDataSlotThread.FreeNamedDataSlot method

Método Thread.GetDataThread.GetData method

Método Thread.JoinThread.Join method

Método Thread.SetApartmentStateThread.SetApartmentState method

Método Thread.SetDataThread.SetData method

Método Thread.SpinWaitThread.SpinWait method

Método Thread.StartThread.Start method

Método Thread.TrySetApartmentStateThread.TrySetApartmentState method

Clase ThreadPoolThreadPool class

Clase TimerTimer class
System.Timers Clase TimerTimer class
System.Web.Configuration Clase MachineKeyValidationConverterMachineKeyValidationConverter class
System.Windows.Forms Propiedad AutoCompleteStringCollection.SyncRootAutoCompleteStringCollection.SyncRoot property

Conjuntos de permisos de SQL ServerSQL Server Permission Sets

SQL Server permite a los usuarios especificar los requisitos de confiabilidad del código implementado en una base de datos.SQL Server allows users to specify the reliability requirements for code deployed into a database. Al cargar los ensamblados en la base de datos, el autor del ensamblado puede especificar uno de los tres conjuntos de permisos para dicho ensamblado: 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.

Conjunto de permisosPermission set SAFESAFE EXTERNAL-ACCESSEXTERNAL-ACCESS UNSAFEUNSAFE
Seguridad de acceso del códigoCode access security Solo ejecuciónExecute only Ejecución + acceso a recursos externosExecute + access to external resources Sin restricciónUnrestricted
Restricciones del modelo de programaciónProgramming model restrictions Yes Yes Sin restriccionesNo restrictions
Requisito de verificabilidadVerifiability requirement Yes Yes NoNo
Capacidad para llamar a código nativoAbility to call native code NoNo NoNo Yes

SAFE es el modo más confiable y seguro y cuenta con restricciones asociadas relativas al modelo de programación permitido.SAFE is the most reliable and secure mode with associated restrictions in terms of the allowed programming model. El código SAFE dispone de características de seguridad y de gran confiabilidad.SAFE code has high reliability and security features. Los ensamblados SAFE tienen permisos suficientes para ejecutarse, efectuar cálculos y obtener acceso a la base de datos local.SAFE assemblies are given enough permission to run, perform computations, and have access to the local database. Los ensamblados SAFE deben ser de un tipo comprobable y no pueden llamar al código no administrado.SAFE assemblies need to be verifiably type safe and are not allowed to call unmanaged code.

EXTERNAL-ACCESS proporciona una opción de seguridad intermedia y permite que el código obtenga acceso a los recursos externos a la base de datos, pero manteniendo la confiabilidad y la seguridad de 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.

UNSAFE está pensado para el código de plena confianza que solo pueden crear los administradores de base de datos.UNSAFE is for highly trusted code that can only be created by database administrators. Este código de confianza no tiene ninguna restricción de acceso y puede llamar a un código no administrado (nativo).This trusted code has no code access restrictions, and it can call unmanaged (native) code.

SQL Server usa la capa de directiva de seguridad de acceso del código del nivel de host para configurar una directiva de host que conceda uno de los tres conjuntos de permisos según el conjunto de permisos almacenado en los catálogos de 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. El código administrado que se ejecuta dentro de la base de datos siempre obtiene uno de estos conjuntos de permisos de acceso del código.Managed code running inside the database always gets one of these code access permission sets.

Restricciones del modelo de programaciónProgramming Model Restrictions

El modelo de programación del código administrado de SQL Server requiere funciones, procedimientos y tipos que no requieren el uso del estado mantenido en varias invocaciones ni del estado compartido en varias sesiones de usuario.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. Además, como se ha descrito anteriormente, la presencia de un estado compartido puede generar excepciones críticas que afecten a la escalabilidad y a la confiabilidad de la aplicación.Further, as described earlier, the presence of shared state can cause critical exceptions that impact the scalability and the reliability of the application.

Dadas estas consideraciones, SQL Server no permite el uso de variables estáticas ni de miembros de datos estáticos.Given these considerations, SQL Server disallows the use of static variables and static data members. En cuanto a los ensamblados SAFE y EXTERNAL-ACCESS, SQL Server examina los metadatos del ensamblado al crear el ensamblado (CREATE ASSEMBLY). Se produce un error al crear dichos ensamblados si encuentra el uso de variables y miembros de datos estáticos.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.

Vea tambiénSee Also

HostProtectionAttribute
HostProtectionResource