Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server-
In de INTEGRATIE van SQL Server Common Language Runtime (CLR) is het gebruik van Windows-verificatie complex, maar is het veiliger dan het gebruik van SQL Server-verificatie. Houd bij het gebruik van Windows-verificatie rekening met de volgende overwegingen.
Standaard verkrijgt een SQL Server-proces dat verbinding maakt met Windows de beveiligingscontext van het WINDOWS-serviceaccount van SQL Server. Maar het is mogelijk om een CLR-functie toe te wijzen aan een proxy-identiteit, zodat de uitgaande verbindingen een andere beveiligingscontext hebben dan het Windows-serviceaccount.
In sommige gevallen wilt u mogelijk de aanroeper imiteren met behulp van de eigenschap SqlContext.WindowsIdentity
in plaats van als het serviceaccount uit te voeren. Het WindowsIdentity
exemplaar vertegenwoordigt de identiteit van de client die de aanroepcode heeft aangeroepen en is alleen beschikbaar wanneer de client Windows-verificatie heeft gebruikt. Nadat u het WindowsIdentity
-exemplaar hebt verkregen, kunt u Impersonate
aanroepen om het beveiligingstoken van de thread te wijzigen en vervolgens ADO.NET verbindingen namens de client te openen.
Nadat u SQLContext.WindowsIdentity.Impersonate
hebt aangeroepen, hebt u geen toegang tot lokale gegevens en hebt u geen toegang tot systeemgegevens. Als u weer toegang wilt krijgen tot gegevens, moet u WindowsImpersonationContext.Undo
aanroepen.
In het volgende C#-voorbeeld ziet u hoe u de aanroeper kunt imiteren met behulp van de eigenschap SqlContext.WindowsIdentity
.
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;
}
Notitie
Zie Belangrijke wijzigingen in Database Engine-functies in SQL Server 2016voor informatie over gedragswijzigingen in imitatie.
Als u bovendien het Exemplaar van windows-identiteit hebt verkregen, kunt u dat exemplaar standaard niet doorgeven aan een andere computer; Windows-beveiligingsinfrastructuur beperkt dat standaard. Er is echter een mechanisme met de naam delegering waarmee Windows-identiteiten kunnen worden doorgegeven op meerdere vertrouwde computers. Zie Kerberos Protocol Transition and Constrained Delegationvoor meer informatie over delegatie.