Bagikan melalui


Peniruan identitas dan Keamanan Integrasi CLR

Ketika kode terkelola mengakses sumber daya eksternal, SQL Server tidak secara otomatis meniru konteks eksekusi saat ini di mana rutinitas dijalankan. Kode dalam EXTERNAL_ACCESS dan UNSAFE rakitan dapat secara eksplisit meniru konteks eksekusi saat ini.

Nota

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

Penyedia akses data dalam proses menyediakan antarmuka pemrograman aplikasi, SqlContext.WindowsIdentity, yang dapat digunakan untuk mengambil token yang terkait dengan konteks keamanan saat ini. Kode terkelola dalam EXTERNAL_ACCESS dan UNSAFE rakitan dapat menggunakan metode ini untuk mengambil konteks dan menggunakan metode .NET Framework WindowsIdentity.Impersonate untuk meniru konteks tersebut. Pembatasan berikut berlaku saat kode pengguna secara eksplisit meniru:

  • Akses data dalam proses tidak diizinkan ketika kode terkelola dalam keadaan ditiru. Kode dapat mengurungkan peniruan lalu memanggil akses data dalam proses. Perhatikan bahwa ini mengharuskan menyimpan nilai pengembalian ( WindowsImpersonationContext objek) dari metode asli Impersonate , dan memanggil Undo metode pada ini WindowsImpersonationContext.

    Pembatasan ini berarti bahwa ketika akses data dalam proses terjadi, itu selalu dalam konteks konteks keamanan saat ini yang berlaku untuk sesi. Ini tidak dapat dimodifikasi dengan peniruan eksplisit dalam kode terkelola.

  • Untuk kode terkelola yang dijalankan secara asinkron (misalnya, melalui UNSAFE rakitan yang membuat utas dan menjalankan kode secara asinkron), akses data dalam proses tidak pernah diizinkan. Ini benar apakah ada peniruan atau tidak.

Ketika kode berjalan dalam konteks yang ditiru yang berbeda dari SQL Server, kode tidak dapat melakukan panggilan akses data dalam proses; ini harus membatalkan konteks peniruan sebelum melakukan panggilan akses data dalam proses. Ketika akses data dalam proses dibuat dari kode terkelola, konteks eksekusi asli dari titik masuk Transact-SQL ke dalam kode terkelola selalu digunakan untuk otorisasi.

Rakitan EXTERNAL_ACCESS dan UNSAFE rakitan mengakses sumber daya sistem operasi dengan akun layanan SQL Server, kecuali mereka secara sukarela meniru konteks keamanan saat ini seperti yang dijelaskan sebelumnya. Karena itu, penulis EXTERNAL_ACCESS rakitan memerlukan tingkat kepercayaan yang lebih tinggi daripada SAFE rakitan, yang ditentukan oleh EXTERNAL ACCESS izin tingkat login. Hanya login yang dipercaya untuk menjalankan kode di bawah akun layanan SQL Server yang harus diberikan EXTERNAL ACCESS izin.

Lihat Juga

Keamanan Integrasi CLR
Peniruan Identitas dan Kredensial untuk Koneksi