Partilhar via


Representação e segurança de integração CLR

Quando o código gerenciado acessa recursos externos, SQL Server não representa automaticamente o contexto de execução atual no qual a rotina está sendo executada. O código nos assemblies EXTERNAL_ACCESS e UNSAFE pode representar explicitamente o contexto de execução atual.

Observação

Para obter informações sobre alterações de comportamento na representação, consulte Alterações interruptivas nos recursos do Mecanismo de Banco de Dados no SQL Server 2014.

O provedor de acesso a dados em processo oferece uma interface de programação de aplicativo, SqlContext.WindowsIdentity, que pode ser usada para recuperar o token associado ao contexto de segurança atual. O código gerenciado nos assemblies EXTERNAL_ACCESS e UNSAFE pode usar esse método para recuperar o contexto e usar o método WindowsIdentity.Impersonate do .NET Framework para representar esse contexto. As restrições seguintes se aplicam quando o código do usuário é representado explicitamente:

  • O acesso a dados em processo não é permitido quando o código gerenciado está em um estado representado. O código pode desfazer a representação e chamar o acesso a dados em processo. Observe que isso exige o armazenamento do valor de retorno (um objetoWindowsImpersonationContext) do método original Impersonate e chamada do método Undo em WindowsImpersonationContext.

    Essa restrição significa que, quando ocorre o acesso a dados em processo, ele é sempre no contexto do contexto de segurança atual em vigor da sessão. Ele não pode ser modificado por meio da representação explícita no código gerenciado.

  • No código gerenciado em execução assíncrona (por exemplo, por meio de assemblies UNSAFE que criam threads e que executam códigos de maneira assíncrona), o acesso a dados em processo jamais é permitido. Isso é verdadeiro, independentemente de haver ou não representação.

Quando o código está em execução em um contexto representado diferente de SQL Server, ele não pode executar chamadas de acesso a dados em processo; ele deve desfazer o contexto de representação antes de fazer chamadas de acesso a dados em processo. Quando o acesso a dados em processo é feito de código gerenciado, o contexto de execução original do ponto de entrada Transact-SQL no código gerenciado é sempre usado para autorização.

Assemblies EXTERNAL_ACCESS e UNSAFE assemblies acessam recursos do sistema operacional com a conta de serviço SQL Server, a menos que representem voluntariamente o contexto de segurança atual, conforme descrito anteriormente. Por conta disso, os autores dos assemblies EXTERNAL_ACCESS exigem um nível de confiança mais elevado do que os de assemblies SAFE, especificado pela permissão em nível de logon EXTERNAL ACCESS. Somente os logons confiáveis para executar o código na conta de serviço SQL Server devem receber a EXTERNAL ACCESS permissão.

Consulte Também

Segurança da integração CLR
Representação e credenciais para conexões