Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 die des Windows-Dienstkontos.
In einigen Fällen sollten Sie die Identität des Aufrufers mithilfe der SqlContext.WindowsIdentity Eigenschaft anstelle des Dienstkontos imitieren. 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 aufrufen Impersonate , 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 "Änderungen am Datenbankmodulfeatures" in SQL Server 2014.
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 namens "Delegierung", der die Verteilung von Windows-Identitäten auf mehrere vertrauenswürdige Computer ermöglicht. Weitere Informationen zur Delegierung finden Sie im TechNet-Artikel "Kerberos-Protokollübergang und eingeschränkte Delegierung".