Олицетворение и учетные данные для подключений
Область применения:SQL Server
В интеграции среды CLR SQL Server использование проверки подлинности Windows является сложным, но более безопасно, чем при использовании проверки подлинности SQL Server. При использовании проверки подлинности Windows имейте ввиду следующие замечания.
По умолчанию процесс SQL Server, который подключается к Windows, приобретает контекст безопасности учетной записи службы Windows SQL Server. Но можно сопоставить функцию CLR с удостоверением прокси-сервера, чтобы его исходящие подключения имели другой контекст безопасности, чем учетная запись службы Windows.
В некоторых случаях может потребоваться олицетворить вызывающий объект с помощью свойства SqlContext.WindowsIdentity
вместо запуска в качестве учетной записи службы. Экземпляр WindowsIdentity
представляет удостоверение клиента, вызывающего вызывающий код, и доступен только в том случае, если клиент использовал проверку подлинности Windows. После получения экземпляра WindowsIdentity
можно вызвать Impersonate
, чтобы изменить маркер безопасности потока, а затем открыть ADO.NET подключения от имени клиента.
После вызова SQLContext.WindowsIdentity.Impersonate
вы не сможете получить доступ к локальным данным и не сможете получить доступ к системным данным. Для повторного доступа к данным необходимо вызвать WindowsImpersonationContext.Undo
.
В следующем примере C# показано, как олицетворить вызывающий объект с помощью свойства SqlContext.WindowsIdentity
.
WindowsIdentity clientId = null;
WindowsImpersonationContext impersonatedUser = null;
clientId = SqlContext.WindowsIdentity;
// This outer try block is used to protect from
// exception filter attacks which would prevent
// the inner finally block from executing and
// resetting the impersonation.
try
{
try
{
impersonatedUser = clientId.Impersonate();
if (impersonatedUser != null)
return GetFileDetails(directoryPath);
else return null;
}
finally
{
if (impersonatedUser != null)
impersonatedUser.Undo();
}
}
catch
{
throw;
}
Примечание.
Сведения об изменениях поведения в олицетворении см. в статье Критические изменения функций ядра СУБД в SQL Server 2016.
Кроме того, если вы получили экземпляр удостоверения Windows, по умолчанию этот экземпляр нельзя распространять на другой компьютер; Инфраструктура безопасности Windows ограничивает это по умолчанию. Однако существует механизм, называемый делегированием , который обеспечивает распространение удостоверений Windows на нескольких доверенных компьютерах. Дополнительные сведения о делегировании см. в переходе протокола Kerberos и ограниченном делегировании.