Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A capacidade de carregar e executar código gerenciado em um host do SQL Server requer atender aos requisitos do host para segurança de acesso de código e proteção de recursos de host. Os requisitos de segurança de acesso ao código são especificados por um dos três conjuntos de permissões do SQL Server: SAFE, EXTERNAL-ACCESS ou UNSAFE. A execução de código dentro dos conjuntos de permissões SAFE ou EXTERNAL-ACCESS deve evitar determinados tipos ou membros que tenham o HostProtectionAttribute atributo aplicado. HostProtectionAttribute não é tanto uma permissão de segurança quanto uma garantia de confiabilidade, pois identifica construções de código específicas, como 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.
Observação
O CAS (Code Access Security) foi preterido em todas as versões do .NET Framework e do .NET. As versões recentes do .NET não honram as anotações CAS e geram erros se as APIs relacionadas ao CAS forem usadas. Os desenvolvedores devem buscar meios alternativos para realizar tarefas de segurança.
Atributos de proteção de host
Os atributos de proteção de host identificam tipos ou membros que não se encaixam no modelo de programação do host e representam os seguintes níveis crescentes de ameaça de confiabilidade:
Do contrário, benignos.
Poderia levar à desestabilização do código de usuário gerenciado por servidor.
Poderia levar à desestabilização do próprio processo do servidor.
O SQL Server não permite o uso de um tipo ou membro que tenha um HostProtectionAttribute que especifica um HostProtectionResource valor de SharedState, Synchronization, MayLeakOnAbort ou ExternalProcessMgmt. Isso impede que os assemblies chamem membros que permitem o compartilhamento do estado, executam a sincronização, podem causar uma perda de recursos após o término ou afetam a integridade do processo do SQL Server.
Tipos e membros não permitidos
A tabela a seguir identifica tipos e membros cujos HostProtectionResource valores não são permitidos pelo SQL Server.
Conjuntos de permissões do SQL Server
O 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 o assembly: SAFE, EXTERNAL-ACCESS ou UNSAFE.
| Conjunto de permissões | SEGURO | EXTERNAL-ACCESS | INSEGURO |
|---|---|---|---|
| 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 confiável e seguro, com restrições associadas ao modelo de programação permitido. O código SAFE tem recursos de alta confiabilidade e segurança. Assemblies SAFE recebem permissão suficiente para executar, realizar cálculos e ter acesso ao banco de dados local. Assemblies SAFE precisam ser seguros do tipo verificável e não têm permissão para chamar código não gerenciado.
EXTERNAL-ACCESS fornece uma opção de segurança intermediária, permitindo que o código acesse recursos externos ao banco de dados, mas ainda tenha a confiabilidade e a segurança do SAFE.
UNSAFE é para código altamente confiável que pode ser criado somente por administradores de bancos de dados. Este código confiável não tem restrições de acesso ao código e é capaz de chamar código não gerenciado (nativo).
O SQL Server usa a camada de política de segurança de acesso de código no nível do host para configurar uma política de host que concede um dos três conjuntos de permissões com base no conjunto de permissões armazenado em catálogos do SQL Server. Código gerenciado em execução dentro do banco de dados sempre obtém um desses conjuntos de permissão de acesso de código.
Restrições do Modelo de Programação
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 em várias invocações ou 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.
Considerando 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 EXTERNAL-ACCESS, o SQL Server examina os metadados do assembly em tempo CREATE ASSEMBLY e falha a criação desses assemblies se encontra o uso de variáveis e membros de dados estáticos.