Segurança de acesso a código da integração CLR
O CLR (common language runtime) dá suporte a um modelo de segurança denominado segurança de acesso para código gerenciado. Nesse modelo, são concedidas permissões a assemblies com base na identidade do código. Para obter mais informações, consulte a seção "Segurança de acesso do código" no Software Development Kit do .NET Framework.
A política de segurança que determina as permissões concedidas a assemblies é definida em três locais diferentes:
Política do computador: essa é a política em vigor para todo o código gerenciado em execução no computador no qual SQL Server está instalado.
Política de usuário: trata-se da política em vigor para o código gerenciado hospedado por um processo. Para SQL Server serviço está em execução.
Política de host: essa é a política configurada pelo host do CLR (nesse caso, SQL Server) que está em vigor para o código gerenciado em execução nesse host.
O mecanismo da segurança de acesso do código para o qual o CLR oferece suporte se baseia na pressuposição de que o runtime pode hospedar tanto o código totalmente confiável quanto o 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 aplicativo gerenciado que exigem a permissão correspondente antes de permitir o acesso ao recurso. A demanda pela permissão será atendida somente se todos os chamadores (no nível do assembly) na pilha de chamadas tiverem a permissão de recurso correspondente.
O conjunto de permissões de segurança de acesso de código que são concedidas ao código gerenciado durante a execução dentro de SQL Server concede um conjunto de permissões a um assembly carregado em SQL Server, o conjunto eventual de permissões fornecidas ao código do usuário pode ser restringido ainda mais pelas políticas de nível de usuário e computador.
Conjuntos de permissões do nível de política do host do SQL Server
O conjunto de permissões de segurança de acesso de código concedidas a assemblies pelo SQL Server nível de política de host é determinado pelo conjunto de permissões especificado ao criar o assembly. Há três conjuntos de permissões: SAFE
e EXTERNAL_ACCESS
UNSAFE
(especificados usando a opção PERMISSION_SET deCREATE ASSEMBLY (Transact-SQL)).
SQL Server. Essa política não se destina ao domínio de aplicativo padrão que estaria em vigor quando SQL Server cria uma instância do CLR.
O SQL Server fixedpolicy 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 SQL Server baseia-se no proprietário do assembly especificando um dos três buckets de permissão para cada assembly. Para obter mais informações sobre as permissões de segurança listadas abaixo, consulte o SDK do .NET Framework.
SAFE
Somente a computação interna e o acesso a dados local são permitidos. SAFE
é o conjunto de permissões mais restritivo. O código executado por um assembly com as permissões SAFE
não pode acessar recursos externos do sistema, como arquivos, rede, variáveis de ambiente ou Registro.
Os assemblies SAFE
têm as seguintes permissões e valores:
Permissão | Valor(es)/descrição |
---|---|
SecurityPermission |
Execution: permissão para executar código gerenciado. |
SqlClientPermission |
Context connection = true , context connection = yes : apenas a conexão de contexto pode ser usada, e a cadeia de conexão só pode especificar um valor igual a "context connection=true" ou "context connection=yes".AllowBlankPassword = false: Senhas em branco não são permitidas. |
EXTERNAL_ACCESS
EXTERNAL_ACCESS assemblies têm as mesmas permissões SAFE
que assemblies, com a capacidade adicional de acessar recursos externos do sistema, como arquivos, redes, variáveis ambientais e o registro.
Os assemblies EXTERNAL_ACCESS
também têm as seguintes permissões e valores:
Permissão | Valor(es)/descrição |
---|---|
DistributedTransactionPermission |
Unrestricted: Transações distribuídas são permitidas. |
DNSPermission |
Unrestricted: Permissão para solicitar informações de Servidores de Nomes de Domínio. |
EnvironmentPermission |
Unrestricted: é permitido o acesso completo ao sistema e às variáveis de ambiente do usuário. |
EventLogPermission |
Administer: As seguintes ações são permitidas: criar uma origem do evento, ler logs existentes, excluir origens do evento ou logs, responder a consultas, limpar um log de eventos, escutar eventos e acessar uma coleção de todos os logs de eventos. |
FileIOPermission |
Unrestricted: é permitido o acesso completo a arquivos e pastas. |
KeyContainerPermission |
Unrestricted: é permitido o acesso completo a contêineres de chave. |
NetworkInformationPermission |
Access: é permitida a execução de ping. |
RegistryPermission |
Ela permite a leitura de direitos para HKEY_CLASSES_ROOT , HKEY_LOCAL_MACHINE , HKEY_CURRENT_USER , HKEY_CURRENT_CONFIG e HKEY_USERS. |
SecurityPermission |
Assertion: possibilidade de declarar que todos os chamadores do código tenham a permissão necessária à operação.ControlPrincipal: possibilidade de manipular o objeto principal.Execution: permissão para executar código gerenciado.SerializationFormatter: possibilidade de fornecer serviços de serialização. |
SmtpPermission | Access: são permitidas conexões de saída com a porta de host SMTP 25. |
SocketPermission |
Connect: são permitidas conexões de saída (todas as portas, todos os protocolos) em um endereço de transporte. |
SqlClientPermission |
Unrestricted: é permitido o acesso completo à fonte de dados. |
StorePermission |
Unrestricted: é permitido o acesso completo a repositórios de certificados X.509. |
WebPermission |
Connect: são permitidas conexões de saída com recursos da Web. |
UNSAFE
UNSAFE permite aos assemblies acesso irrestrito a recursos, dentro e fora SQL Server. O código em execução em um assembly UNSAFE
também pode chamar código não gerenciado.
Os assemblies UNSAFE
recebem FullTrust
.
Importante
SAFE
é a configuração de permissão recomendada para assemblies que executam tarefas de computação e gerenciamento de dados sem acessar recursos fora SQL Server. EXTERNAL_ACCESS
assemblies, por padrão, são executados 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. De uma perspectiva da segurança, os assemblies EXTERNAL_ACCESS
e UNSAFE
são idênticos. No entanto, os assemblies EXTERNAL_ACCESS
fornecem várias proteções de confiabilidade e eficiência que não se encontram nos assemblies UNSAFE
. Especificar UNSAFE
permite que o código no assembly execute operações ilegais no SQL Server. Para obter mais informações sobre como criar assemblies CLR em SQL Server, consulte Gerenciando assemblies de integração CLR.
Acessando recursos externos
Caso uma UDT (tipo definido pelo usuário), um procedimento armazenado ou outro tipo de construção seja registrado com o conjunto de permissões SAFE
, o código gerenciado em execução na construção não pode acessar recursos externos. No entanto, se os EXTERNAL_ACCESS
conjuntos de permissões ou UNSAFE
forem especificados e o código gerenciado tentar acessar recursos externos, SQL Server aplicará as seguintes regras:
If | Então |
---|---|
O contexto de execução corresponde a um logon SQL Server. | As tentativas de acessar recursos externos são negadas, e ocorre uma exceção de segurança. |
O contexto de execução corresponda a um logon do Windows e seja o chamador original. | O recurso externo é acessado no contexto de segurança da conta de serviço do SQL Server. |
O chamador não for o chamador original. | O acesso será negado, e ocorrerá uma exceção de segurança. |
O contexto de execução corresponder a um logon do Windows e o contexto da execução for o chamador original, e o chamador tiver sido representado. | O acesso usará o contexto de segurança do chamador, não a conta de serviço. |
Resumo do conjunto de permissões
O gráfico a seguir resume as restrições e as permissões concedidas aos conjuntos de permissões SAFE
, EXTERNAL_ACCESS
e UNSAFE
.
SAFE |
EXTERNAL_ACCESS |
UNSAFE |
|
Code Access Security Permissions |
Somente execução | Execução + acesso a recursos externos | Irrestrito (inclusive P/Invoke) |
Programming model restrictions |
Sim | Sim | Sem restrições |
Verifiability requirement |
Sim | Sim | No |
Local data access |
Sim | Sim | Sim |
Ability to call native code |
No | No | Sim |
Consulte Também
Segurança da integração CLR
Atributos de proteção de host e programação da Integração CLR
Restrições do modelo de programação da Integração CLR
Ambiente hospedado de CLR