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, eine CLR-Funktion einer Proxyidentität zuzuordnen, sodass ihre ausgehenden Verbindungen einen anderen Sicherheitskontext haben als das Windows-Dienstkonto.
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 Impersonate
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.
Im folgenden C#-Beispiel wird veranschaulicht, wie der Aufrufer mithilfe der SqlContext.WindowsIdentity
-Eigenschaft identitätswechselt wird.
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 bei Identitätswechseln finden Sie unter Breaking changes to Database Engine features in SQL Server 2016.
Wenn Sie die 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 namens Delegierung, der die Verteilung von Windows-Identitäten auf mehrere vertrauenswürdige Computer ermöglicht. Weitere Informationen zur Delegierung finden Sie unter Kerberos-Protokollübergang und eingeschränkte Delegierung.