Поделиться через


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

Область применения: SQL Server

В интеграции среды CLR SQL Server использование проверки подлинности Windows является сложным, но более безопасно, чем при использовании проверки подлинности SQL Server. При использовании проверки подлинности Windows имейте ввиду следующие замечания.

По умолчанию процесс SQL Server, который подключается к Windows, приобретает контекст безопасности учетной записи службы Windows SQL Server. Однако возможно также сопоставить функцию CLR с удостоверением-посредником, чтобы у исходящих соединений был контекст безопасности, отличный от учетной записи службы Windows.

В некоторых случаях может потребоваться олицетворить вызывающий объект с помощью свойства SqlContext.WindowsIdentity вместо выполнения в качестве учетной записи службы. Экземпляр WindowsIdentity представляет удостоверение клиента, вызывающего вызывающий код, и доступен только в том случае, если клиент использовал проверку подлинности Windows. После получения экземпляра WindowsIdentity можно вызвать олицетворения, чтобы изменить маркер безопасности потока, а затем открыть 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