Олицетворение и учетные данные для соединений
В SQL Server интеграции со средой CLR использование проверки подлинности 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.
В следующем примере показано, как выполнять олицетворение вызывающего объекта с помощью свойства SqlContext.WindowsIdentity
.
Visual C#
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 2014 г.
Кроме того, если вы получили экземпляр удостоверения Microsoft Windows, по умолчанию этот экземпляр нельзя распространить на другой компьютер. Инфраструктура безопасности Windows ограничивает это по умолчанию. Однако существует механизм под названием «делегирование», который позволяет распространять идентификаторы Windows на несколько доверенных компьютеров. Дополнительные сведения о делегировании см. в статье TechNet "Переход протокола Kerberos и ограниченное делегирование".