Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Programação em SQL Server e atributos de proteção de host

 

A capacidade de carregar e executar código gerenciado em um host do SQL Server requer que atendem aos requisitos do host de segurança de acesso ao código e proteção de recursos do host. Os requisitos de segurança de acesso do código são especificados por um dos três conjuntos de permissões do SQL Server: SEGURO, ACESSO EXTERNO ou NÃO. Código em execução dentro do SAFE ou conjuntos de permissões de ACESSO EXTERNO devem evitar determinados tipos ou membros que têm o HostProtectionAttribute atributo aplicado. O HostProtectionAttribute não é uma permissão de segurança quanto constrói uma garantia de confiabilidade no que ele identifica o código específico, tipos ou métodos, que o host pode desautorizar. O uso do HostProtectionAttribute impõe um modelo de programação que ajuda a proteger a estabilidade do host.

Atributos de proteção de host identificam tipos ou membros que não se ajusta ao modelo de programação de host e representam os seguintes níveis crescentes de ameaça à confiabilidade:

  • Caso contrário, são benignos.

  • Poderia levar à desestabilização do código do usuário do servidor gerenciado.

  • Pode levar à desestabilização do próprio processo do servidor.

SQL Server não permite o uso de um tipo ou membro tem um HostProtectionAttribute que especifica um HostProtectionResource valor de SharedState, Synchronization, MayLeakOnAbort, ou ExternalProcessMgmt. Isso impede que os assemblies chamem membros que permitam compartilhar o estado, executar a sincronização, podem causar um vazamento de recurso na terminação ou afetar a integridade do processo do SQL Server.

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

namespace

Tipo ou membro

Microsoft.Win32

PowerModeChangedEventArgs classe

PowerModeChangedEventHandler Delegar

SessionEndedEventArgs classe

SessionEndedEventHandler Delegar

SessionEndingEventArgs classe

SessionEndingEventHandler Delegar

SessionSwitchEventArgs classe

SessionSwitchEventHandler Delegar

SystemEvents classe

TimerElapsedEventArgs classe

TimerElapsedEventHandler Delegar

UserPreferenceChangedEventArgs classe

UserPreferenceChangingEventArgs classe

System.Collections

Método ArrayList.Synchronized

Método Hashtable.Synchronized

Método Queue.Synchronized

Método SortedList.Synchronized

Método Stack.Synchronized

System.ComponentModel

AddingNewEventArgs classe

AddingNewEventHandler Delegar

ArrayConverter classe

AsyncCompletedEventArgs classe

AsyncCompletedEventHandler Delegar

AsyncOperation classe

AsyncOperationManager classe

AttributeCollection classe

BackgroundWorker classe

BaseNumberConverter classe

BindingList<T> classe

BooleanConverter classe

ByteConverter classe

CancelEventArgs classe

CancelEventHandler Delegar

CharConverter classe

CollectionChangeEventArgs classe

CollectionChangeEventHandler Delegar

CollectionConverter classe

ComponentCollection classe

ComponentConverter classe

ComponentEditor classe

ComponentResourceManager classe

Container classe

ContainerFilterService classe

CultureInfoConverter classe

CustomTypeDescriptor classe

DateTimeConverter classe

DecimalConverter classe

ActiveDesignerEventArgs classe

ActiveDesignerEventHandler Delegar

CheckoutException classe

CommandID classe

ComponentChangedEventArgs classe

ComponentChangedEventHandler Delegar

ComponentChangingEventArgs classe

ComponentChangingEventHandler Delegar

ComponentEventArgs classe

ComponentEventHandler Delegar

ComponentRenameEventArgs classe

ComponentRenameEventHandler Delegar

DesignerCollection classe

DesignerEventArgs classe

DesignerEventHandler Delegar

DesignerOptionService classe

DesignerTransaction classe

DesignerTransactionCloseEventArgs classe

DesignerTransactionCloseEventHandler Delegar

DesignerVerb classe

DesignerVerbCollection classe

DesigntimeLicenseContext classe

DesigntimeLicenseContextSerializer classe

MenuCommand classe

ComponentSerializationService classe

ContextStack classe

DesignerLoader classe

InstanceDescriptor classe

MemberRelationshipService classe

ResolveNameEventArgs classe

ResolveNameEventHandler Delegar

SerializationStore classe

ServiceContainer classe

ServiceCreatorCallback Delegar

StandardCommands classe

StandardToolWindows classe

DoubleConverter classe

DoWorkEventArgs classe

DoWorkEventHandler Delegar

EnumConverter classe

EventDescriptor classe

EventDescriptorCollection classe

EventHandlerList classe

ExpandableObjectConverter classe

HandledEventArgs classe

HandledEventHandler Delegar

InstanceCreationEditor classe

Int16Converter classe

Int32Converter classe

Int64Converter classe

InvalidAsynchronousStateException classe

InvalidEnumArgumentException classe

Método BeginInvoke

License classe

LicenseContext classe

LicenseException classe

LicenseManager classe

LicenseProvider classe

LicFileLicenseProvider classe

ListChangedEventArgs classe

ListChangedEventHandler Delegar

ListSortDescription classe

ListSortDescriptionCollection classe

MaskedTextProvider classe

MemberDescriptor classe

MultilineStringConverter classe

NestedContainer classe

NullableConverter classe

ProgressChangedEventArgs classe

ProgressChangedEventHandler Delegar

PropertyChangedEventArgs classe

PropertyChangedEventHandler Delegar

PropertyDescriptor classe

PropertyDescriptorCollection classe

ReferenceConverter classe

RefreshEventArgs classe

RefreshEventHandler Delegar

RunWorkerCompletedEventArgs classe

RunWorkerCompletedEventHandler Delegar

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 classe

System.Diagnostics

Debug.Listeners propriedade

Trace.Listeners propriedade

EventLog.SynchronizingObject propriedade

ConsoleTraceListener classe

DefaultTraceListener classe

DelimitedListTraceListener classe

EventLogTraceListener classe

PerformanceCounter classe

PerformanceCounterCategory classe

Process classe

ProcessStartInfo classe

TextWriterTraceListener classe

TraceListener classe

XmlWriterTraceListener classe

TraceSource.Listeners propriedade

System.IO

Método Stream.Synchronized

Método TextReader.Synchronized

Método TextWriter.Synchronized

System.Reflection.Emit

ConstructorBuilder classe

EventBuilder classe

FieldBuilder classe

MethodBuilder classe

CustomAttributeBuilder classe

MethodRental classe

ModuleBuilder classe

PropertyBuilder classe

TypeBuilder classe

UnmanagedMarshal classe

System.Text

Método Group.Synchronized

Método Match.Synchronized

System.Threading

AutoResetEvent classe

EventWaitHandle classe

ManualResetEvent classe

Monitor classe

Mutex classe

ReaderWriterLock classe

Semaphore classe

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

ThreadPool classe

Timer classe

System.Timers

Timer classe

System.Web.Configuration

MachineKeyValidationConverter classe

System.Windows.Forms

AutoCompleteStringCollection.SyncRoot propriedade

SQL Server permite aos usuários especificar 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: SEGURO, ACESSO EXTERNO ou NÃO.

Conjunto de permissões

SAFE

ACESSO EXTERNO

unsafe

Segurança de acesso ao código

Somente execução

Execução + acesso a recursos externos

Irrestrito

Restrições do modelo de programação

Sim

Sim

Sem restrições

Requisito de verificabilidade

Sim

Sim

Não

Capacidade de chamar código nativo

Não

Não

Sim

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

ACESSO EXTERNO fornece uma opção de segurança intermediária, 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 é para código altamente confiável que só pode ser criado por administradores de banco de dados. Este código confiável não tem nenhuma restrição de acesso de código, e ele pode chamar código não gerenciado (nativo).

SQL Server usa a camada de política de segurança de acesso de código em nível de host para configurar uma política de host que concede a um dos três conjuntos de permissões com base no conjunto de permissões armazenado nos catálogos do SQL Server. Código gerenciado executado no banco de dados sempre obtém um desses conjuntos de permissão de acesso do código.

O modelo de programação para código gerenciado no SQL Server requer funções, procedimentos e tipos que não exigem o uso do estado mantido entre várias invocações nem o compartilhamento de estado em 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, o SQL Server não permite o uso de variáveis estáticas e membros de dados estáticos. Para assemblies SAFE e ACESSO EXTERNO, o SQL Server examina os metadados do assembly na ocasião CREATE ASSEMBLY e falha a criação desses assemblies se encontrar o uso de membros de dados estáticos e variáveis.

Mostrar: