Udostępnij za pośrednictwem


Personifikacja i poświadczenia dla połączeń

Dotyczy:programu SQL Server

W integracji środowiska uruchomieniowego języka wspólnego programu SQL Server (CLR) korzystanie z uwierzytelniania systemu Windows jest złożone, ale jest bezpieczniejsze niż korzystanie z uwierzytelniania programu SQL Server. Podczas korzystania z uwierzytelniania systemu Windows należy pamiętać o następujących kwestiach.

Domyślnie proces programu SQL Server łączący się z systemem Windows uzyskuje kontekst zabezpieczeń konta usługi systemu Windows programu SQL Server. Istnieje jednak możliwość mapowania funkcji CLR na tożsamość serwera proxy, dzięki czemu jego połączenia wychodzące mają inny kontekst zabezpieczeń niż konto usługi systemu Windows.

W niektórych przypadkach można personifikować obiekt wywołujący przy użyciu właściwości SqlContext.WindowsIdentity zamiast uruchamiać jako konto usługi. Wystąpienie WindowsIdentity reprezentuje tożsamość klienta, który wywołał kod wywołujący i jest dostępny tylko wtedy, gdy klient używał uwierzytelniania systemu Windows. Po uzyskaniu wystąpienia WindowsIdentity można wywołać Impersonate, aby zmienić token zabezpieczający wątku, a następnie otworzyć ADO.NET połączenia w imieniu klienta.

Po wywołaniu SQLContext.WindowsIdentity.Impersonatenie można uzyskać dostępu do danych lokalnych i nie można uzyskać dostępu do danych systemowych. Aby ponownie uzyskać dostęp do danych, musisz wywołać WindowsImpersonationContext.Undo.

W poniższym przykładzie w języku C# pokazano, jak personifikować obiekt wywołujący przy użyciu właściwości 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;
}

Nuta

Aby uzyskać informacje o zmianach zachowania w personifikacji, zobacz Zmiany powodujące niezgodność w funkcjach aparatu bazy danych w programie SQL Server 2016.

Ponadto w przypadku uzyskania wystąpienia tożsamości systemu Windows domyślnie nie można propagować tego wystąpienia na inny komputer; Infrastruktura zabezpieczeń systemu Windows domyślnie ogranicza to. Istnieje jednak mechanizm nazywany delegowaniem , który umożliwia propagację tożsamości systemu Windows na wielu zaufanych komputerach. Aby uzyskać więcej informacji na temat delegowania, zobacz Przechodzenie protokołu Kerberos i Ograniczone delegowanie.

  • obiektu SqlContext