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 objeto
WindowsImpersonationContext
) do método originalImpersonate
e chamada do métodoUndo
emWindowsImpersonationContext
.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