Compartilhar via


Atributos de proteção de Host e de programação de SQL Server

A capacidade de carregar e executar código gerenciado em um host de SQL Server requer que atende às necessidades do host de segurança de acesso ao código e a proteção de recursos de host. Os requisitos de segurança de acesso de código são especificados por um dos três conjuntos de permissões de SQL Server: SAFE, EXTERNAL ACCESS ou INSEGUROS. Código sendo executado dentro do COFRE ou conjuntos de permissões EXTERNAL ACCESS devem evitar determinadas tipos ou membros que possuem o HostProtectionAttribute atributo aplicado. O HostProtectionAttribute não é uma permissão de segurança como uma garantia de confiabilidade em que ele identifica o código específico constrói ou tipos ou métodos, que pode não permitir que o host. O uso de 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 ajustar o modelo de programação do host e representam os seguintes níveis crescentes de ameaça de confiabilidade:

  • Caso contrário são benignas.

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

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

SQL Server não permite o uso de um tipo ou membro tem um HostProtectionAttribute que especifica um HostProtectionResource o 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 vazamento de recursos na finalização ou afetar a integridade do processo de SQL Server.

Não são permitidos tipos e membros

A tabela a seguir identifica os tipos e membros cujo HostProtectionResource valores não são permitidos por SQL Server.

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

ConsoleTraceListenerclasse

DefaultTraceListenerclasse

DelimitedListTraceListenerclasse

EventLogTraceListenerclasse

PerformanceCounterclasse

PerformanceCounterCategoryclasse

Processclasse

ProcessStartInfoclasse

TextWriterTraceListenerclasse

TraceListenerclasse

XmlWriterTraceListenerclasse

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

Conjuntos de permissões do SQL Server

SQL Server 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 para esse assembly: SAFE, EXTERNAL ACCESS ou INSEGUROS.

Conjunto de permissões

SAFE

ACESSO EXTERNO

NÃO SEGURO

Segurança de acesso a código

Executar somente

Executar + acesso a recursos externos

Irrestrito:

Restrições do modelo de programação

Sim

Sim

Não há restrições.

Requisito de verifiability

Sim

Sim

Não

Capacidade de chamar código nativo

Não

Não

Sim

SEGURO é o modo mais seguro e confiável com restrições associadas em termos do modelo de programação permitido. Código de seguro tem recursos de alta confiabilidade e segurança. SEGUROS assemblies recebem permissão suficiente para executar, executar cálculos e ter acesso ao banco de dados local. Assemblies de seguros precisam ser verificável digitar seguro e não têm permissão para chamar código não gerenciado.

ACESSO externo fornece uma opção de segurança intermediário, permitindo que o código para acessar recursos externos para o banco de dados, mas ainda com a confiabilidade e segurança de seguro.

UNSAFE destina-se a código altamente confiável que só pode ser criado por administradores de banco de dados. Esse código confiável tem restrições de acesso de código e pode chamar código não gerenciado de (nativo).

SQL Server usa a camada de diretiva de segurança de acesso de código de nível de host para configurar uma diretiva de host que concede a um dos três conjuntos de permissões com base no conjunto armazenados nos catálogos de SQL Server. 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 de código gerenciado no SQL Server requer funções, procedimentos e tipos que não exigem o uso de 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 a confiabilidade do aplicativo.

Feitas essas considerações, SQL Server não permite o uso de variáveis estáticas e membros de dados estáticos. Para assemblies de seguro e o acesso externo, SQL Server examina os metadados do assembly em tempo de criar o ASSEMBLY e falhar a criação de tais assemblies se encontra o uso de membros de dados estáticos e variáveis.

Consulte também

Referência

HostProtectionAttribute

HostProtectionResource