Restrições do modelo de programação de integração CLR
Aplica-se a:SQL ServerAzure SQL Managed Instance
Quando você cria um procedimento armazenado gerenciado ou outro objeto de banco de dados gerenciado, o SQL Server executa determinadas verificações de código que precisam ser consideradas. Essas verificações são realizadas no assembly de código gerenciado quando registrado pela primeira vez no banco de dados, usando a instrução CREATE ASSEMBLY
e também em tempo de execução. O código gerenciado também é verificado em tempo de execução porque em um assembly pode haver caminhos de código que podem nunca ser realmente alcançados em tempo de execução.
Essas verificações de código fornecem flexibilidade para registrar assemblies de terceiros, especialmente, para que um assembly não seja bloqueado onde há código inseguro projetado para ser executado em um ambiente cliente, mas nunca seria executado no Common Language Runtime (CLR) hospedado. Os requisitos que o código gerenciado deve atender dependem se o assembly está registrado como SAFE
, EXTERNAL_ACCESS
ou UNSAFE
.
SAFE
é o nível de segurança mais rigoroso.
Além das restrições serem colocadas nos assemblies de código gerenciado, também há permissões de segurança de código que são concedidas. O CLR suporta um modelo de segurança chamado CAS (segurança de acesso ao código) para código gerenciado. Neste modelo, as permissões são concedidas a assemblies com base na identidade do código.
SAFE
, EXTERNAL_ACCESS
e UNSAFE
assemblies têm permissões CAS diferentes. Para obter mais informações, consulte integração CLR Code Access Security.
Se o de política do editor de
CRIAR VERIFICAÇÕES DE MONTAGEM
Quando a instrução CREATE ASSEMBLY
é executada, as verificações a seguir são executadas para cada nível de segurança. Se alguma verificação falhar, CREATE ASSEMBLY
falhará com uma mensagem de erro.
Global (qualquer nível de segurança)
Todos os assemblies referenciados devem atender a um ou mais dos seguintes critérios:
A montagem já está registada na base de dados.
O assembly é um dos assemblies suportados. Para obter mais informações, consulte bibliotecas suportadas do .NET Framework.
Você está usando
CREATE ASSEMBLY FROM <location>
e todos os assemblies referenciados e suas dependências estão disponíveis em<location>
.Você está usando
CREATE ASSEMBLY FROM <bytes ...>
e todas as referências são especificadas por meio de bytes separados por espaço.
EXTERNAL_ACCESS
Todas as EXTERNAL_ACCESS
montagens devem atender aos seguintes critérios:
Os campos estáticos não são usados para armazenar informações. Campos estáticos somente leitura são permitidos.
O teste PEVerify é aprovado. A ferramenta PEVerify (
peverify.exe
), que verifica se o código Common Intermediate Language (CIL) e os metadados associados atendem aos requisitos de segurança de tipo, é fornecida com o SDK do .NET Framework.A sincronização, por exemplo, com a classe
SynchronizationAttribute
, não é usada.Os métodos do finalizador não são usados.
Os seguintes atributos personalizados não são permitidos em assemblies EXTERNAL_ACCESS
:
System.ContextStaticAttribute
System.MTAThreadAttribute
System.Runtime.CompilerServices.MethodImplAttribute
System.Runtime.CompilerServices.CompilationRelaxationsAttribute
System.Runtime.Remoting.Contexts.ContextAttribute
System.Runtime.Remoting.Contexts.SynchronizationAttribute
System.Runtime.InteropServices.DllImportAttribute
System.Security.Permissions.CodeAccessSecurityAttribute
System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute
System.STAThreadAttribute
System.ThreadStaticAttribute
SEGURO
- Todas as
EXTERNAL_ACCESS
condições de montagem são verificadas.
Verificações de tempo de execução
No tempo de execução, o assembly de código é verificado para as seguintes condições. Se qualquer uma dessas condições for encontrada, o código gerenciado não poderá ser executado e uma exceção será lançada.
INSEGURO
Você não pode carregar um assembly, seja explicitamente chamando o método System.Reflection.Assembly.Load()
de uma matriz de bytes ou usando implicitamente Reflection.Emit
namespace.
EXTERNAL_ACCESS
Todas as UNSAFE
condições são verificadas.
Todos os tipos e métodos anotados com os seguintes valores de atributo de proteção de host (HPA) na lista de assemblies suportados não são permitidos.
SelfAffectingProcessMgmt
SelfAffectingThreading
Synchronization
SharedState
ExternalProcessMgmt
ExternalThreading
SecurityInfrastructure
MayLeakOnAbort
UI
Para obter mais informações sobre HPAs e uma lista de tipos e membros não permitidos nos assemblies suportados, consulte Atributos de proteção de host e Programação de integração CLR.
SEGURO
Todas as EXTERNAL_ACCESS
condições são verificadas.
Conteúdo relacionado
- Bibliotecas do .NET Framework suportadas
- Integração CLR de Segurança de Acesso ao Código
- Atributos de proteção de host e de programação de integração CLR
- Criar uma de montagem