Bagikan melalui


Peniruan Identitas dan Kredensial untuk Koneksi

Berlaku untuk:SQL Server

Dalam integrasi SQL Server common language runtime (CLR), menggunakan Autentikasi Windows rumit, tetapi lebih aman daripada menggunakan Autentikasi SQL Server. Saat menggunakan Autentikasi Windows, ingatlah pertimbangan berikut.

Secara default, proses SQL Server yang tersambung ke Windows memperoleh konteks keamanan akun layanan SQL Server Windows. Tetapi dimungkinkan untuk memetakan fungsi CLR ke identitas proksi, sehingga koneksi keluarnya memiliki konteks keamanan yang berbeda dari akun layanan Windows.

Dalam beberapa kasus, Anda mungkin ingin meniru pemanggil dengan menggunakan properti SqlContext.WindowsIdentity alih-alih berjalan sebagai akun layanan. Instans WindowsIdentity mewakili identitas klien yang memanggil kode panggilan, dan hanya tersedia saat klien menggunakan Autentikasi Windows. Setelah Anda mendapatkan instans WindowsIdentity , Anda dapat memanggil Impersonate untuk mengubah token keamanan utas, lalu membuka koneksi ADO.NET atas nama klien.

Setelah Anda memanggil SQLContext.WindowsIdentity.Impersonate, Anda tidak dapat mengakses data lokal dan Anda tidak dapat mengakses data sistem. Untuk mengakses data lagi, Anda harus memanggil WindowsImpersonationContext.Undo.

Contoh berikut menunjukkan cara meniru pemanggil dengan menggunakan properti SqlContext.WindowsIdentity .

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;  
}  

Catatan

Untuk informasi tentang perubahan perilaku dalam peniruan, lihat Melanggar Perubahan pada Fitur Mesin Database di SQL Server 2016.

Selain itu, jika Anda mendapatkan instans identitas Microsoft Windows, secara default Anda tidak dapat menyebarluaskan instans tersebut ke komputer lain; Infrastruktur keamanan Windows membatasinya secara default. Namun, ada mekanisme yang disebut "delegasi" yang memungkinkan penyebaran identitas Windows di beberapa komputer tepercaya. Anda dapat mempelajari selengkapnya tentang delegasi di artikel TechNet, "Transisi Protokol Kerberos dan Delegasi yang Dibatasi".

Lihat juga

SqlContext Object