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.
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.