Integração CLR Segurança de Acesso ao Código
Aplica-se a:SQL Server
O Common Language Runtime (CLR) suporta um modelo de segurança chamado 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. Para obter mais informações, consulte de Segurança de Acesso ao Código .
A política de segurança que determina as permissões concedidas aos assemblies é definida em três locais diferentes:
de política de máquina: esta política está em vigor para todo o código gerenciado em execução na máquina na qual o SQL Server está instalado.
Política de usuário: Esta política está em vigor para o código gerenciado hospedado por um processo. Para o SQL Server, a política de usuário é específica para a conta do Windows na qual o serviço do SQL Server está sendo executado.
política de host: Esta política é configurada pelo host do CLR (neste caso, SQL Server) que está em vigor para o código gerenciado em execução nesse host.
O mecanismo de segurança de acesso ao código suportado pelo CLR baseia-se na suposição de que o tempo de execução pode hospedar código totalmente confiável e parcialmente confiável. Os recursos protegidos pela segurança de acesso ao código CLR normalmente são encapsulados por interfaces de programação de aplicativos gerenciados que exigem a permissão correspondente antes de permitir o acesso ao recurso. A demanda pela permissão é satisfeita somente se todos os chamadores (no nível de montagem) na pilha de chamadas tiverem a permissão de recurso correspondente.
O conjunto de permissões de segurança de acesso ao código que são concedidas ao código gerenciado durante a execução dentro do SQL Server é a interseção do conjunto de permissões concedidas pelos três níveis de diretiva anteriores. Mesmo que o SQL Server conceda um conjunto de permissões a um assembly carregado no SQL Server, o eventual conjunto de permissões dado ao código do usuário pode ser ainda mais restrito pelas políticas de usuário e de nível de máquina.
Conjuntos de permissões de nível de política de host do SQL Server
O conjunto de permissões de segurança de acesso ao código concedidas a assemblies pelo nível de diretiva de host do SQL Server é determinado pelo conjunto de permissões especificado ao criar o assembly. Há três conjuntos de permissões: SAFE
, EXTERNAL_ACCESS
e UNSAFE
(especificados usando a opção PERMISSION_SET
de CREATE ASSEMBLY).
O SQL Server fornece um nível de diretiva de segurança no nível do host para o CLR enquanto o hospeda. Esta política é um nível de política adicional abaixo dos dois níveis de política que estão sempre em vigor. Essa política é definida para cada domínio de aplicativo criado pelo SQL Server. Esta política não se destina ao domínio de aplicativo padrão que estaria em vigor quando o SQL Server cria uma instância do CLR.
A política de nível de host do SQL Server é uma combinação de diretiva fixa do SQL Server para assemblies do sistema e política especificada pelo usuário para assemblies de usuário.
A política fixa para assemblies CLR e assemblies do sistema SQL Server concede confiança total a eles.
A parte especificada pelo usuário da política de host do SQL Server é baseada no proprietário do assembly especificando um dos três buckets de permissão para cada assembly. Para obter mais informações sobre as seguintes permissões de segurança, consulte o SDK do .NET Framework.
SEGURO
Apenas computação interna e acesso a dados locais são permitidos.
SAFE
é o conjunto de permissões mais restritivo. O código executado por um assembly com permissões SAFE
não pode acessar recursos externos do sistema, como arquivos, a rede, variáveis de ambiente ou o registro.
SAFE
assemblies têm as seguintes permissões e valores:
Permissão | Valores / Descrição |
---|---|
SecurityPermission |
Execution : Permissão para executar código gerenciado. |
SqlClientPermission |
Context connection = true , context connection = yes : Somente a conexão de contexto pode ser usada, e a cadeia de conexão só pode especificar um valor de context connection=true ou context connection=yes .AllowBlankPassword = false : Não são permitidas palavras-passe em branco. |
EXTERNAL_ACCESS
EXTERNAL_ACCESS
assemblies têm as mesmas permissões que SAFE
assemblies, com a capacidade adicional de acessar recursos externos do sistema, como arquivos, redes, variáveis ambientais e o registro.
EXTERNAL_ACCESS
assemblies também têm as seguintes permissões e valores:
Permissão | Valores / Descrição |
---|---|
DistributedTransactionPermission |
Unrestricted : São permitidas transações distribuídas. |
DNSPermission |
Unrestricted : Permissão para solicitar informações dos Servidores de Nomes de Domínio. |
EnvironmentPermission |
Unrestricted : É permitido o acesso total às variáveis do sistema e do ambiente do utilizador. |
EventLogPermission |
Administer : As seguintes ações são permitidas: criar uma fonte de eventos, ler logs existentes, excluir fontes ou logs de eventos, responder a entradas, limpar um log de eventos, ouvir eventos e acessar uma coleção de todos os logs de eventos. |
FileIOPermission |
Unrestricted : É permitido o acesso total a ficheiros e pastas. |
KeyContainerPermission |
Unrestricted : É permitido o acesso total aos contentores de chaves. |
NetworkInformationPermission |
Access : Pinging é permitido. |
RegistryPermission |
Permite direitos de leitura para HKEY_CLASSES_ROOT , HKEY_LOCAL_MACHINE , HKEY_CURRENT_USER , HKEY_CURRENT_CONFIG e HKEY_USERS. |
SecurityPermission |
Assertion : Capacidade de afirmar que todos os chamadores deste código têm a permissão necessária para a operação.ControlPrincipal : Capacidade de manipular o objeto principal.Execution : Permissão para executar código gerenciado.SerializationFormatter : Capacidade de fornecer serviços de serialização. |
SmtpPermission |
Access : São permitidas ligações de saída para a porta 25 do anfitrião SMTP. |
SocketPermission |
Connect : Conexões de saída (todas as portas, todos os protocolos) em um endereço de transporte são permitidas. |
SqlClientPermission |
Unrestricted : É permitido o acesso total à fonte de dados. |
StorePermission |
Unrestricted : É permitido o acesso total aos repositórios de certificados X.509. |
WebPermission |
Connect : São permitidas ligações de saída a recursos Web. |
INSEGURO
UNSAFE
permite que assemblies tenham acesso irrestrito a recursos, dentro e fora do SQL Server. O código executado a partir de um assembly UNSAFE
também pode chamar código não gerenciado.
UNSAFE
assembleias recebem FullTrust
.
Configurações de permissão recomendadas
SAFE
é a configuração de permissão recomendada para assemblies que executam tarefas de computação e gerenciamento de dados sem acessar recursos fora do SQL Server.
EXTERNAL_ACCESS
é recomendado para assemblies que acessam recursos fora do SQL Server.
EXTERNAL_ACCESS
assemblies por padrão são executados como a conta de serviço do SQL Server. É possível que EXTERNAL_ACCESS
código represente explicitamente o contexto de segurança da Autenticação do Windows do chamador. Como o padrão é executar como a conta de serviço do SQL Server, a permissão para executar EXTERNAL_ACCESS
só deve ser dada a logons confiáveis para serem executados como a conta de serviço.
Do ponto de vista da segurança, EXTERNAL_ACCESS
e UNSAFE
assemblies são idênticos. No entanto, EXTERNAL_ACCESS
montagens fornecem várias proteções de confiabilidade e robustez que não estão em UNSAFE
montagens.
Especificar UNSAFE
permite que o código no assembly execute operações ilegais no espaço de processo do SQL Server e, portanto, pode comprometer a robustez e a escalabilidade do SQL Server. Para obter mais informações sobre como criar assemblies CLR no SQL Server, consulte Manage CLR integration assemblies.
Importante
O SQL Server contém assemblies CLR que o Mecanismo de Banco de Dados usa para fornecer determinadas funcionalidades. O assembly Microsoft.SQLServer.Types
incluído na instalação do SQL Server aparece nos metadados como um assembly UNSAFE
. Isso é por design. Esses assemblies são considerados confiáveis & seguros por padrão.
Aceder a recursos externos
Se um tipo definido pelo usuário (UDT), procedimento armazenado ou outro tipo de assembly de construção for registrado com o conjunto de permissões SAFE
, o código gerenciado em execução na construção não poderá acessar recursos externos. No entanto, se os conjuntos de permissões EXTERNAL_ACCESS
ou UNSAFE
forem especificados e o código gerenciado tentar acessar recursos externos, o SQL Server aplicará as seguintes regras:
Se o | Em seguida, |
---|---|
O contexto de execução corresponde a um logon do SQL Server. | As tentativas de acessar recursos externos são negadas e uma exceção de segurança é gerada. |
O contexto de execução corresponde a um login do Windows e o contexto de execução é o chamador original. | O recurso externo é acessado no contexto de segurança da conta de serviço do SQL Server. |
O chamador não é o chamador original. | O acesso é negado e uma exceção de segurança é gerada. |
O contexto de execução corresponde a um login do Windows e o contexto de execução é o chamador original e o chamador é representado. | O Access usa o contexto de segurança do chamador e não a conta de serviço. |
Resumo do conjunto de permissões
O gráfico a seguir resume as restrições e permissões concedidas aos conjuntos de permissões SAFE
, EXTERNAL_ACCESS
e UNSAFE
.
Funcionalidade | SAFE |
EXTERNAL_ACCESS |
UNSAFE |
---|---|---|---|
Permissões de Segurança de Acesso ao Código | Executar apenas | Executar + acesso a recursos externos | Sem restrições (incluindo P/Invoke) |
Restrições do modelo de programação | Sim | Sim | Sem restrições |
Requisito de verificabilidade | Sim | Sim | Não |
Acesso a dados locais | Sim | Sim | Sim |
Capacidade de chamar código nativo | Não | Não | Sim |
Conteúdo relacionado
- de segurança de integração CLR
- Atributos de proteção de host e de programação de integração CLR
- restrições do modelo de programação de integração CLR
- Arquitetura de integração CLR - Ambiente hospedado CLR