Freigeben über


Identitätswechsel und Anmeldeinformationen für Verbindungen

Gilt für: SQL Server

In der INTEGRATION der Common Language Runtime (CLR) von SQL Server ist die Verwendung der Windows-Authentifizierung komplex, ist aber sicherer als die Verwendung der SQL Server-Authentifizierung. Beachten Sie bei Verwendung der Windows-Authentifizierung folgende Punkte:

Standardmäßig ist für einen SQL Server-Prozess, der eine ausgehende Verbindung mit Windows herstellt, der Sicherheitskontext des Windows-Dienstkontos für SQL Server erforderlich. Es ist jedoch möglich, einer Proxyidentität eine CLR-Funktion zuzuordnen, sodass ausgehende Verbindungen einen anderen Sicherheitskontext haben als die Verbindungen des Windows-Dienstkontos.

In einigen Fällen sollten Sie die Identität des Aufrufers mithilfe der SqlContext.WindowsIdentity-Eigenschaft annehmen, anstatt als Dienstkonto auszuführen. Die WindowsIdentity-Instanz stellt die Identität des Clients dar, der den aufrufenden Code aufgerufen hat, und ist nur verfügbar, wenn der Client die Windows-Authentifizierung verwendet hat. Nachdem Sie die WindowsIdentity-Instanz abgerufen haben, können Sie "Identitätswechsel" aufrufen, um das Sicherheitstoken des Threads zu ändern, und dann ADO.NET Verbindungen im Auftrag des Clients öffnen.

Nachdem Sie SQLContext.WindowsIdentity.Impersonate aufgerufen haben, können Sie nicht auf lokale Daten zugreifen, und Sie können nicht auf Systemdaten zugreifen. Um erneut auf Daten zuzugreifen, müssen Sie WindowsImpersonationContext.Undo aufrufen.

Das folgende Beispiel zeigt, wie der Aufrufer mithilfe der SqlContext.WindowsIdentity-Eigenschaft identitätswechselt wird.

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;  
}  

Hinweis

Informationen zu Verhaltensänderungen beim Identitätswechsel finden Sie unter "Breaking Changes to Datenbank-Engine Features in SQL Server 2016".

Wenn Sie die Microsoft Windows-Identitätsinstanz erhalten haben, können Sie diese Instanz standardmäßig nicht an einen anderen Computer weitergeben. Die Windows-Sicherheitsinfrastruktur schränkt dies standardmäßig ein. Es gibt jedoch einen Mechanismus, der als "Delegierung" bezeichnet wird. Dieser ermöglicht die Weitergabe von Windows-Identitäten über mehrere vertrauenswürdige Computer hinweg. Weitere Informationen zur Delegierung finden Sie im TechNet-Artikel "Kerberos-Protokollübergang und eingeschränkte Delegierung".

Weitere Informationen

SqlContext-Objekt