SQL Server CLR'de 3. taraf dll


14

SQL Server CLR tetikleyici c # kodunda bir üçüncü taraf DLL kullanmanız gerekiyor

Ancak referans eklemeye çalıştığımda sadece SQL Server'dan bazı DLL'leri gösterir.

SQL Server'a üçüncü taraf dll'imi nasıl ekleyebilirim ?


Yanıtlar:


14

Yalnızca Sql Server'da kayıtlı olan derlemelere referans ekleyebilirsiniz. Kayıtlı değilse, Referans Ekle iletişim kutusunda görünmezler.

Bir DLL'i kaydetmeniz için birkaç adım vardır, önce veritabanınızı yeniden yapılandırmanız gerekir:

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

Bu yapıldıktan sonra Sql Server CLR etkindir. Ardından, montajınızı kaydetmeniz gerekir:

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

Bu son komut dosyası düzgün çalışıyorsa, derleme şimdi kaydedilir ve Referans Ekle iletişim kutusunda görünür.

Yine de dikkate almanız gereken şey, Sql Server CLR yapılandırmanızın uygulama güvenliğidir:

  1. Bir montajı SAFE, yalnızca istisnai durumlarda EXTERNAL_ACCESSveya kullanmanız gerektiği şekilde kaydetmeyi tercih edin UNSAFE.
  2. Tam güvenilen CLR'de (yani, Sql Server tarafından barındırılan CLR'de değil) yapabileceğiniz her şeyi yapmayı beklemeyin - SQLCLR korumalı bir çalışma zamanıdır.
  3. Montajları Assembly.Load()amaçlı olarak kısıtlandığı gibi dinamik olarak yüklemeye çalışmayın .
  4. Kullanmayı planlıyorsanız, 3. taraf kitaplığının ortak bir anahtarla imzalandığından emin olmanız gerekebilir UNSAFE.
  5. Kod yürütme Sql Server çalıştıran hizmetin kimliği bağlamında çalışır (Bence!)
  6. Barındırılan bir derlemeden yapılan veritabanı erişimi (örn. Yoluyla context connection = true;) bağlı kullanıcının bağlamında çalışır, bu nedenle bu kitaplığın verilerinize hangi erişimin olduğunu bildiğinizden emin olmanız gerekir.

Yukarıdaki 4'te meclisi imzalamanız gerekiyor. Bu kısmı alıyorum ve burada kendinden imzalı talimatlar ile yapabildim: geekswithblogs.net/ktegels/archive/2006/02/16/… Ama özel anahtarınız olmadığında sertifikayı nasıl kuracağınız, yani toplantı güvenilir bir üçüncü taraf tarafından oluşturuldu ve imzalandı? Yukarıdaki bağlantıda anlayabildiğim kadarıyla sertifika oluşturma özel anahtarın mevcut olmasını gerektirir. Bu imkansız mı görünüyor?
JorgeSandoval

2
Ayrıca - db'yi güvenilir olarak işaretlemek risklidir (ve "Güvenli" montaj kurulumu için gerekli değildir). Güvenilir, harici / güvenli olmayan izinler için derlemeleri imzalamak zorunda
kalmanın

5

Visual Studio'dan SQL CLR derlemelerini yüklemeye alternatifler hakkında soru sorduğunuzu varsayıyorum.

Kodun Visual Studio'da olması gerekli değildir.

MSDN'de CLR Veritabanı Nesneleri dağıtmak , SQL deyimleri ve dağıtım komut dosyaları dahil seçenekleri ayrıntılı olarak açıklar.


1

Bir web sayfasını alıp PDF'ye dönüştüren çok büyük bir 3. taraf DLL kullanıyorum.

PDF bir dosya paylaşımına kaydedilir ve veritabanı konum ve türüne göre güncellenir.

Bu 3 adımlı bir işlemdir:

  1. PDF'yi oluşturmak ve URL ile FilePath'i parametre olarak kabul etmek için 3. taraf DLL kullanan bir konsol uygulaması oluşturun ve PDF boyutunu ve sayfa sayısını döndürür.

  2. Sunucuda konsol uygulamasını çağıran bir CLR saklı yordamı oluşturun

  3. Tüm bunları PDF oluşturmak için CLR uygulamasını çağıran tek bir saklı yordam içine sarın ve sonra veritabanına bu konuda meta veri yazma.

Bunun mükemmel olmadığını ve hiçbir tetikte bu kadar çılgınca bir şey yapmamalısınız!

Ben sadece burada kendi üçüncü parti DLL's CLR kullanma hakkında sorular ile söz.

Benim umarım çöküyorsa, her şeyi in-proc çalıştırmak yerine, bir üçüncü parti DLL çalıştırmak için bir cmd.exe konsolunu döndürerek, SQL Server kadar olumsuz etkilemez olmasıdır. Umarım budur.

Bunun gerçekten kötü bir yaklaşım olup olmadığını ve nedenini açıklayınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.