Dela via


Personifiering och autentiseringsuppgifter för anslutningar

gäller för:SQL Server

I SQL Server common language runtime-integreringen (CLR) är det komplext att använda Windows-autentisering, men är säkrare än att använda SQL Server-autentisering. Tänk på följande när du använder Windows-autentisering.

Som standard hämtar en SQL Server-process som ansluter till Windows säkerhetskontexten för SQL Server Windows-tjänstkontot. Men det är möjligt att mappa en CLR-funktion till en proxyidentitet, så att dess utgående anslutningar har en annan säkerhetskontext än Windows-tjänstkontot.

I vissa fall kanske du vill personifiera anroparen med hjälp av egenskapen SqlContext.WindowsIdentity i stället för att köras som tjänstkonto. Den WindowsIdentity instansen representerar identiteten för klienten som anropade den anropande koden och är endast tillgänglig när klienten använde Windows-autentisering. När du har hämtat WindowsIdentity-instansen kan du anropa Impersonate för att ändra trådens säkerhetstoken och sedan öppna ADO.NET anslutningar för klientens räkning.

När du har ringt SQLContext.WindowsIdentity.Impersonatekan du inte komma åt lokala data och du kan inte komma åt systemdata. För att få åtkomst till data igen måste du anropa WindowsImpersonationContext.Undo.

I följande C#-exempel visas hur du personifierar anroparen med hjälp av egenskapen 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;
}

Not

Information om beteendeändringar i personifiering finns i Icke-bakåtkompatibla ändringar av databasmotorfunktioner i SQL Server 2016.

Om du har hämtat Windows-identitetsinstansen kan du som standard inte sprida den instansen till en annan dator. Windows säkerhetsinfrastruktur begränsar detta som standard. Det finns dock en mekanism som kallas delegering som möjliggör spridning av Windows-identiteter över flera betrodda datorer. Mer information om delegering finns i Kerberos-protokollövergång och begränsad delegering.