Dll pihak ke-3 di SQL Server CLR

14

Saya perlu menggunakan DLL pihak ketiga dalam memicu kode c # di SQL Server CLR

Tetapi ketika saya mencoba untuk menambahkan referensi itu hanya menunjukkan beberapa DLL dari SQL Server.

Bagaimana saya bisa menambahkan dll pihak ketiga saya ke SQL Server?

Solomon Rutzky
sumber
2
Cara yang sama Anda menambahkan majelis SQL CLR ?

Jawaban:

14

Anda hanya dapat menambahkan referensi ke majelis-majelis yang telah terdaftar di Sql Server. Jika mereka tidak terdaftar, mereka tidak akan muncul di dialog Tambah Referensi.

Ada beberapa langkah yang perlu Anda lakukan untuk mendaftarkan DLL, pertama Anda harus mengkonfigurasi ulang basis data Anda:

ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;

Setelah ini selesai, Sql Server diaktifkan CLR. Selanjutnya, Anda harus mendaftarkan majelis Anda:

CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE

Jika skrip terakhir ini berjalan dengan benar, majelis sekarang terdaftar, dan akan muncul di dialog Tambah Referensi.

Yang perlu Anda pertimbangkan adalah keamanan aplikasi konfigurasi Sql Server CLR Anda:

  1. Lebih suka mendaftarkan majelis sebagai SAFE, hanya dalam keadaan luar biasa Anda dapat menggunakan EXTERNAL_ACCESSatau UNSAFE.
  2. Jangan berharap dapat melakukan semua yang Anda bisa pada CLR dengan kepercayaan penuh (yaitu, bukan CLR yang di-host oleh Sql Server) - SQLCLR adalah runtime yang dikotak pasir.
  3. Jangan mencoba dan memuat majelis secara dinamis, seperti Assembly.Load()yang sengaja dibatasi.
  4. Anda mungkin perlu memastikan perpustakaan pihak ke-3 ditandatangani dengan kunci publik jika Anda berencana menggunakan UNSAFE.
  5. Eksekusi kode berjalan dalam konteks identitas layanan yang menjalankan Sql Server (saya pikir!)
  6. Akses basis data yang dibuat dari rakitan yang dihosting (mis. Via context connection = true;) berjalan dalam konteks pengguna yang terhubung, jadi Anda perlu memastikan bahwa Anda mengetahui akses apa yang dimiliki pustaka ke data Anda.
Matthew Abbott
sumber
dalam 4 di atas Anda menulis Anda harus menandatangani majelis. Saya mendapatkan bagian itu, dan telah dapat melakukannya melalui instruksi yang ditandatangani sendiri di sini: geekswithblogs.net/ktegels/archive/2006/02/16/... Tetapi cara menginstal sertifikat ketika Anda tidak memiliki kunci pribadi, yaitu ketika perakitan dibuat dan ditandatangani oleh pihak ketiga yang tepercaya? Sejauh yang saya tahu di tautan di atas pembuatan sertifikat memerlukan kunci pribadi untuk hadir. Itu sepertinya membuat ini tidak mungkin?
JorgeSandoval
2
Juga - menandai db sebagai dapat dipercaya berisiko (dan tidak perlu untuk instalasi perakitan "Aman"). Dipercaya adalah salah satu cara untuk menandatangani rakitan untuk izin eksternal / tidak aman, tetapi tidak direkomendasikan karena rakitan CLR mana pun yang dipasang akan dipercaya ...
JorgeSandoval
5

Saya berasumsi Anda bertanya tentang alternatif untuk menginstal Majelis SQL CLR dari Visual Studio.

Tidak diperlukan kode di Visual Studio.

Menyebarkan Objek Database CLR pada MSDN merinci opsi, termasuk pernyataan SQL dan skrip penerapan.

Oded
sumber
1

Saya menggunakan DLL pihak ke-3 yang sangat besar yang mengambil halaman web dan mengubahnya menjadi PDF.

PDF disimpan pada berbagi file dan database diperbarui untuk lokasi dan jenisnya.

Ini adalah proses 3 langkah:

  1. Buat aplikasi konsol yang menggunakan DLL pihak ketiga untuk membuat PDF dan menerima URL dan FilePath sebagai parameter dan mengembalikan ukuran PDF serta jumlah halaman.

  2. Buat prosedur tersimpan CLR yang kemudian memanggil aplikasi konsol di server

  3. Saya membungkus ini semua menjadi satu prosedur tersimpan yang memanggil aplikasi CLR untuk membuat PDF dan kemudian saya menulis meta-data tentang itu ke database.

Saya menyadari ini tidak sempurna dan tidak berarti Anda harus melakukan sesuatu yang begitu gila di dalam pemicu!

Saya hanya menyebutkannya di sini untuk orang lain dengan pertanyaan tentang penggunaan DLL Pihak ke-3 di CLR mereka.

Harapan saya adalah dengan memutar konsol cmd.exe untuk menjalankan DLL Pihak ke-3, alih-alih menjalankan semuanya di-proc, jika crash, itu tidak akan terlalu mempengaruhi SQL Server. Itulah yang saya harap.

Berikan komentar jika ini adalah pendekatan yang sangat buruk dan mengapa.

MikeTeeVee
sumber