Олицетворение и учетные данные для соединений

Применимо к:SQL Server

В 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 2016 г.

Кроме того, если вы получили экземпляр удостоверения Microsoft Windows, по умолчанию этот экземпляр нельзя распространить на другой компьютер. Инфраструктура безопасности Windows ограничивает это по умолчанию. Однако существует механизм под названием «делегирование», который позволяет распространять идентификаторы Windows на несколько доверенных компьютеров. Дополнительные сведения о делегировании см. в статье TechNet "Переход протокола Kerberos и ограниченное делегирование".

См. также:

Объект SqlContext