Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Applies to: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:
Machine policy: This policy is in effect for all managed code running in the machine on which SQL Server is installed.
User policy: This policy is in effect for managed code hosted by a process. 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.
Host policy: This policy is set up by the host of the CLR (in this case, SQL Server) that is in effect for managed code running in that 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.
A segurança de acesso ao código não é mais suportada
O CLR usa o CAS (Code Access Security) no .NET Framework, que não é mais suportado como um limite de segurança. Um assembly CLR criado com PERMISSION_SET = SAFE pode aceder a recursos externos do sistema, chamar código não supervisionado e adquirir privilégios de administrador do sistema. No SQL Server 2017 (14.x) e versões posteriores, a opção sp_configure, segurança estrita do CLR, aumenta a segurança dos assemblies CLR.
clr strict security está ativado por padrão e trata as assemblagens SAFE e EXTERNAL_ACCESS como se estivessem marcadas UNSAFE. A opção clr strict security pode ser desativada para compatibilidade com versões anteriores, mas não é recomendada.
Recomendamos que você assine todos os assemblies por um certificado ou chave assimétrica, com um logon correspondente que tenha recebido permissão UNSAFE ASSEMBLY no banco de dados master. Os administradores do SQL Server também podem adicionar assemblies à lista de assemblies, nos quais o motor de base de dados deve confiar. For more information, see sys.sp_add_trusted_assembly.
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. There are three permission sets: SAFE, EXTERNAL_ACCESS, and UNSAFE (specified using the PERMISSION_SET option of 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.
SAFE
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:
| Permission | 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:
| Permission | 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_CONFIGe 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. |
UNSAFE
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.
Important
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:
| If | Then |
|---|---|
| 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_ACCESSe UNSAFE.
| Functionality | SAFE |
EXTERNAL_ACCESS |
UNSAFE |
|---|---|---|---|
| Permissões de Segurança de Acesso ao Código | Execute only | Executar + acesso a recursos externos | Sem restrições (incluindo P/Invoke) |
| Restrições do modelo de programação | Yes | Yes | No restrictions |
| Verifiability requirement | Yes | Yes | No |
| Acesso a dados locais | Yes | Yes | Yes |
| Capacidade de chamar código nativo | No | No | Yes |
Related content
- 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