Freigeben über


Identitätswechsel und Anmeldeinformationen für Verbindungen

In der SQL Server CLR (Common Language Runtime)-Integration ist die Verwendung der Windows-Authentifizierung zwar komplex, jedoch sicherer als die 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 bietet es sich an, die Identität des Aufrufers durch Verwenden der SqlContext.WindowsIdentity-Eigenschaft statt Ausführen des Dienstkontos anzunehmen. Die WindowsIdentity-Instanz repräsentiert die Identität des Clients, der den Aufrufcode aufgerufen hat, und ist nur verfügbar, wenn der Client die Windows-Authentifizierung verwendet hat. Nachdem Sie die WindowsIdentity-Instanz erhalten haben, können Sie Impersonate aufrufen, um das Sicherheitstoken des Threads zu ändern, und anschließend ADO.NET-Verbindungen im Auftrag des Clients öffnen.

Nach dem Aufruf von SQLContext.WindowsIdentity.Impersonate können Sie weder auf lokale Daten noch auf Systemdaten zugreifen. Um wieder auf Daten zugreifen zu können, müssen Sie WindowsImpersonationContext.Undo aufrufen.

Im folgenden Beispiel wird veranschaulicht, wie die Identität des Aufrufers mit der SqlContext.WindowsIdentity-Eigenschaft angenommen 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;
}
HinweisHinweis

Weitere Informationen zu Verhaltensänderungen beim Identitätswechsel finden Sie unter Fehlerhafte Änderungen an Funktionen des Datenbankmoduls in SQL Server 2008 R2.

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 diese Möglichkeit 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 über die Delegierung finden Sie im TechNet-Artikel "Kerberos Protocol Transition and Constrained Delegation".

Siehe auch

Konzepte