TRUSTWORTHY
properti database (bila disetel ke ON
) pada dasarnya mendeklarasikan ke SQL Server bahwa kode yang terkandung dalam database itu, dan mengeksekusi dalam konteks yang ditiru, harus diizinkan untuk menjangkau di luar database itu sambil mempertahankan konteks keamanan yang ditiru itu. Ini juga memungkinkan untuk semua SQLCLR Assemblies dalam Database itu untuk disetel ke EXTERNAL_ACCESS
dan UNSAFE
, apakah kode tersebut sampai di luar server atau tidak (artinya di luar:akses jaringan, akses sistem file, akses registri, akses lingkungan, dll).
Ini adalah cara yang agak umum untuk memungkinkan ini karena mencakup semua kode dalam database. Menggunakan Sertifikat dan/atau Kunci Asimetris untuk menandatangani modul--procs dan/atau rakitan--memungkinkan kontrol yang lebih terperinci atas kode apa yang memiliki izin apa.
Menyetel Database ke TRUSTWORTHY
juga memungkinkan proses apa pun yang dimulai dalam Basis Data ini untuk menjangkau hingga ke tingkat Server dan/atau menyeberang ke Basis Data lainnya. Biasanya suatu proses dibatasi / dikarantina ke Basis Data tempat dimulainya. Jika Basis Data dimiliki oleh Login "sa", maka setiap proses yang dimulai di Basis Data tersebut dan dijalankan sebagai "dbo" akan secara efektif memiliki hak istimewa "sa" (ya!).
Daripada mencoba menjelaskan di sini, dalam jumlah detail yang diperlukan untuk sepenuhnya mengomunikasikan secara spesifik tentang peniruan identitas, memperluas peniruan identitas tersebut, modul penandatanganan, dll, saya sarankan membaca dengan teliti sumber daya berikut tentang topik ini:
- Tolong, Tolong , harap Berhenti Menggunakan Peniruan Identitas, TERPERCAYA, dan Rantai Kepemilikan Lintas-DB
- Panduan untuk menggunakan setelan database TERPERCAYA di SQL Server
- Memperluas Peniruan Identitas Basis Data dengan Menggunakan EXECUTE AS
Ini adalah dokumen yang sangat informatif yang mencakup sebagian besar aspek topik ini, dan juga dirujuk di halaman tertaut di atas. - Langkah ke SQLCLR Level 4:Keamanan (Majelis EKSTERNAL dan TIDAK AMAN)
Ini adalah artikel yang saya tulis sebagai bagian dari seri SQLCLR yang memiliki contoh yang menggambarkan perbedaan antara metode TRUSTWORTHY dan metode Login berbasis Majelis yang Ditandatangani; Pendaftaran gratis diperlukan.
Anda harus menghindari pengaturan database Anda ke TRUSTWORTHY
sebanyak mungkin. Jika Anda benar-benar harus memiliki panggilan multithreading / async DAN jika Anda memiliki kode sumber dan sedang mengkompilasi Majelis, maka saya tidak dapat memikirkan alasan untuk menggunakan SET TRUSTWORTHY ON
pilihan. Sebagai gantinya, Anda harus menandatangani majelis dengan kata sandi dan gunakan perintah berikut untuk menyiapkan metode yang disukai untuk mengizinkan EXTERNAL_ACCESS
dan UNSAFE
rakitan:
USE [master];
CREATE ASYMMETRIC KEY [ClrPermissionsKey]
AUTHORIZATION [dbo]
FROM EXECUTABLE FILE = 'C:\path\to\my\assembly.dll';
CREATE LOGIN [ClrPermissionsLogin]
FROM ASYMMETRIC KEY [ClrPermissionsKey];
GRANT UNSAFE ASSEMBLY TO [ClrPermissionsLogin];
Setelah itu, Anda dapat pergi ke database tempat perakitan Anda telah dimuat dan dijalankan:
ALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;
Atau Anda bisa memasukkan WITH PERMISSION_SET = UNSAFE
di akhir CREATE ASSEMBLY
perintah.