Compartilhar via


Programação do SQL servidor e atributos de proteção de host

A capacidade de carregar e executar código gerenciado em um host do SQL servidor requer atender aos requisitos do host para a segurança de acesso do código e host recurso proteção.Os requisitos de segurança de acesso do código são especificados por um dos três SQL servidor permissão define: SAFE, EXTERNAL acesso ou UNSAFE.O código executado dentro do SAFE ou EXTERNAL acesso permissão conjuntos devem evitar determinadas tipos ou membros que possuem o HostProtectionAttribute atributo aplicado. The HostProtectionAttribute não é uma permissão de segurança sistema autônomo muito sistema autônomo constrói uma garantia de confiabilidade em que ele identifica o código específico, tipos ou métodos, que pode não permitir que o host. O uso do HostProtectionAttribute aplica um modelo de programação que ajuda a proteger a estabilidade do host.

Atributos de proteção de host

Atributos de proteção de host identificam tipos ou membros que não se ajuste o modelo de programação de host e representam os seguintes níveis cada vez maiores de confiabilidade ameaça:

  • Caso contrário, É benigno.

  • Pode levar a destabilization do código do usuário do servidor gerenciado.

  • Pode levar a destabilization do processo do servidor propriamente dito.

SQL servidor não permite o uso de um tipo ou membro que tenha um HostProtectionAttribute Especifica que um HostProtectionResource valor de SharedState, Synchronization, MayLeakOnAbort, ou ExternalProcessMgmt. Isso impede que os conjuntos de membros de chamada que habilitar o estado de compartilhamento, executar a sincronização, podem causar um perda de recursos na finalização ou afetar a integridade do processo do SQL servidor.

Não são permitidos tipos e membros

A tabela a seguir identifica tipos e membros cujo HostProtectionResource valores não são permitidas pelo SQL servidor.

Namespace

Tipo ou membro

Microsoft.Win32

Classe PowerModeChangedEventArgs

PowerModeChangedEventHandlerdelegado

Classe SessionEndedEventArgs

SessionEndedEventHandlerdelegado

Classe SessionEndingEventArgs

SessionEndingEventHandlerdelegado

Classe SessionSwitchEventArgs

SessionSwitchEventHandlerdelegado

Classe SystemEvents

Classe TimerElapsedEventArgs

TimerElapsedEventHandlerdelegado

Classe UserPreferenceChangedEventArgs

Classe UserPreferenceChangingEventArgs

System.Collections

Método ArrayList.Synchronized

Método Hashtable.Synchronized

Método Queue.Synchronized

Método SortedList.Synchronized

Método Stack.Synchronized

System.ComponentModel

Classe AddingNewEventArgs

AddingNewEventHandlerdelegado

Classe ArrayConverter

Classe AsyncCompletedEventArgs

AsyncCompletedEventHandlerdelegado

Classe AsyncOperation

Classe AsyncOperationManager

Classe AttributeCollection

Classe BackgroundWorker

Classe BaseNumberConverter

Classe BindingList<T>

Classe BooleanConverter

Classe ByteConverter

Classe CancelEventArgs

CancelEventHandlerdelegado

Classe CharConverter

Classe CollectionChangeEventArgs

CollectionChangeEventHandlerdelegado

Classe CollectionConverter

Classe ComponentCollection

Classe ComponentConverter

Classe ComponentEditor

Classe ComponentResourceManager

Classe Container

Classe ContainerFilterService

Classe CultureInfoConverter

Classe CustomTypeDescriptor

Classe DateTimeConverter

Classe DecimalConverter

Classe ActiveDesignerEventArgs

ActiveDesignerEventHandlerdelegado

Classe CheckoutException

Classe CommandID

Classe ComponentChangedEventArgs

ComponentChangedEventHandlerdelegado

Classe ComponentChangingEventArgs

ComponentChangingEventHandlerdelegado

Classe ComponentEventArgs

ComponentEventHandlerdelegado

Classe ComponentRenameEventArgs

ComponentRenameEventHandlerdelegado

Classe DesignerCollection

Classe DesignerEventArgs

DesignerEventHandlerdelegado

Classe DesignerOptionService

Classe DesignerTransaction

Classe DesignerTransactionCloseEventArgs

DesignerTransactionCloseEventHandlerdelegado

Classe DesignerVerb

Classe DesignerVerbCollection

Classe DesigntimeLicenseContext

Classe DesigntimeLicenseContextSerializer

Classe MenuCommand

Classe ComponentSerializationService

Classe ContextStack

Classe DesignerLoader

Classe InstanceDescriptor

Classe MemberRelationshipService

Classe ResolveNameEventArgs

ResolveNameEventHandlerdelegado

Classe SerializationStore

Classe ServiceContainer

ServiceCreatorCallbackdelegado

Classe StandardCommands

Classe StandardToolWindows

Classe DoubleConverter

Classe DoWorkEventArgs

DoWorkEventHandlerdelegado

Classe EnumConverter

Classe EventDescriptor

Classe EventDescriptorCollection

Classe EventHandlerList

Classe ExpandableObjectConverter

Classe HandledEventArgs

HandledEventHandlerdelegado

Classe InstanceCreationEditor

Classe Int16Converter

Classe Int32Converter

Classe Int64Converter

Classe InvalidAsynchronousStateException

Classe InvalidEnumArgumentException

Método BeginInvoke

Classe License

Classe LicenseContext

Classe LicenseException

Classe LicenseManager

Classe LicenseProvider

Classe LicFileLicenseProvider

Classe ListChangedEventArgs

ListChangedEventHandlerdelegado

Classe ListSortDescription

Classe ListSortDescriptionCollection

Classe MaskedTextProvider

Classe MemberDescriptor

Classe MultilineStringConverter

Classe NestedContainer

Classe NullableConverter

Classe ProgressChangedEventArgs

ProgressChangedEventHandlerdelegado

Classe PropertyChangedEventArgs

PropertyChangedEventHandlerdelegado

Classe PropertyDescriptor

Classe PropertyDescriptorCollection

Classe ReferenceConverter

Classe RefreshEventArgs

RefreshEventHandlerdelegado

Classe RunWorkerCompletedEventArgs

RunWorkerCompletedEventHandlerdelegado

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

Propriedade Debug.Listeners

Propriedade Trace.Listeners

Propriedade EventLog.SynchronizingObject

Classe ConsoleTraceListener

Classe DefaultTraceListener

Classe DelimitedListTraceListener

Classe EventLogTraceListener

Classe PerformanceCounter

Classe PerformanceCounterCategory

Classe Process

Classe ProcessStartInfo

Classe TextWriterTraceListener

Classe TraceListener

Classe XmlWriterTraceListener

Propriedade TraceSource.Listeners

System.IO

Método Stream.Synchronized

Método TextReader.Synchronized

Método 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

Método Group.Synchronized

Método Match.Synchronized

System.Threading

Classe AutoResetEvent

Classe EventWaitHandle

Classe ManualResetEvent

Classe Monitor

Classe Mutex

Classe ReaderWriterLock

Classe Semaphore

Método Thread.AllocateNamedDataSlot

Método Thread.BeginCriticalRegion

Método Thread.EndCriticalRegion

Método Thread.FreeNamedDataSlot

Método Thread.GetData

Método Thread.Join

Método Thread.SetApartmentState

Método Thread.SetData

Método Thread.SpinWait

Método Thread.Start

Método Thread.TrySetApartmentState

Classe ThreadPool

Classe Timer

System.Timers

Classe Timer

System.Web.Configuration

Classe MachineKeyValidationConverter

System.Windows.Forms

Propriedade AutoCompleteStringCollection.SyncRoot

SQL servidor permissão conjuntos

O SQL servidor permite que os usuários especifiquem os requisitos de confiabilidade do código implantado em um banco de dados.Quando os assemblies são carregados no banco de dados, o autor do assembly pode especificar um dos três conjuntos de permissões desse conjunto de módulos (assembly): SAFE, EXTERNAL acesso ou UNSAFE.

Permissão conjunto

SEGURO

ACESSO EXTERNO

NÃO SEGURO

Segurança de acesso a código

Executar somente

Acesso a recursos externos + executar

Irrestrito:

Restrições do modelo de programação

Sim

Sim

Sem restrições

Requisito verifiability

Sim

Sim

Não

Capacidade de telefonar código nativo

Não

Não

Sim

SAFE é o modo mais seguro e confiável com restrições associadas em termos do modelo de programação permitido.Código de segurança possui recursos de alta confiabilidade e segurança.SEGURANÇA assemblies recebem permissão suficiente para executar, executar cálculos e ter acesso ao banco de dados local.Assemblies de segurança precisa ser verificável digitar seguro e não tem permissão para telefonar código não gerenciado.

EXTERNAL acesso fornece uma opção de segurança intermediário, permitindo acessar os recursos de código externo ao banco de dados, mas ainda com a confiabilidade e a segurança de SAFE.

UNSAFE é para código altamente confiável que pode ser criado somente por administradores de bancos de dados.Esse código confiável tem restrições de acesso do código, e ele possa chamar código não gerenciado (nativo).

O SQL servidor usa a camada de diretiva de segurança do código de nível host acesso para definir uma política de host que concede a um dos três conjuntos de permissões com base na permissão de conjunto de catálogos do SQL servidor.Código gerenciado em execução dentro do banco de dados sempre obtém um desses conjuntos de permissão de acesso do código.

Restrições do modelo de programação

O modelo de programação para código gerenciado no SQL servidor requer funções, procedimentos e tipos que não requerem o uso do estado mantido em várias chamadas ou o compartilhamento de estado entre várias sessões de usuário.Além disso, conforme descrito anteriormente, a presença do estado compartilhado pode causar exceções críticas que afetam a escalabilidade e confiabilidade do aplicativo.

Feitas essas considerações, o SQL servidor não permite o uso de variáveis estáticas e membros de dados estático.Para assemblies SAFE e EXTERNAL acesso, o SQL servidor examina os metadados do assembly em time de criar ASSEMBLY e falha a criar de tais assemblies se encontra o uso de membros de dados estático e variáveis.

Consulte também

Referência

HostProtectionAttribute

HostProtectionResource