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.
Quando o código gerenciado acessa recursos externos, o SQL Server não representa automaticamente o contexto de execução atual no qual a rotina está sendo executada.
EXTERNAL_ACCESS O código e UNSAFE os assemblies podem 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 significativas nos recursos do mecanismo de banco de dados no SQL Server 2014.
O provedor de acesso a dados em processo fornece uma interface de programação de aplicativo, SqlContext.WindowsIdentityque pode ser usada para recuperar o token associado ao contexto de segurança atual. O código EXTERNAL_ACCESS gerenciado e UNSAFE os assemblies podem usar esse método para recuperar o contexto e usar o método .NET Framework WindowsIdentity.Impersonate para representar esse contexto. As seguintes restrições se aplicam quando o código do usuário representa 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, em seguida, chamar o acesso a dados em processo. Observe que isso requer armazenar o valor retornado (um
WindowsImpersonationContextobjeto) do método originalImpersonatee chamar oUndométodo nesteWindowsImpersonationContext.Essa restrição significa que, quando o acesso a dados em processo ocorre, ele está sempre no contexto do contexto de segurança atual em vigor para a sessão. Ele não pode ser modificado por representação explícita dentro do código gerenciado.
Para que o código gerenciado seja executado de forma assíncrona (por exemplo, por meio
UNSAFEde assemblies criando threads e executando código de forma assíncrona), o acesso a dados em processo nunca é permitido. Isso é verdade se há ou não representação.
Quando o código está em execução em um contexto representado diferente do 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 do SQL Server, a menos que representem voluntariamente o contexto de segurança atual, conforme descrito anteriormente. Por isso, os autores de EXTERNAL_ACCESS assemblies exigem um nível de confiança maior do que os de SAFE assemblies, que é especificado pela EXTERNAL ACCESS permissão de nível de logon. Somente os logons confiáveis para executar o código na conta de serviço do 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