บุคคลที่สาม dll ใน SQL Server CLR


14

ฉันต้องใช้ DLL บุคคลที่สามในรหัสทริกเกอร์ c # ใน SQL Server CLR

แต่เมื่อฉันพยายามที่จะเพิ่มการอ้างอิงก็แค่แสดงบาง DLLs จาก SQL Server

ฉันจะเพิ่มdll ของ บริษัท อื่นลงใน SQL Server ได้อย่างไร


2
เช่นเดียวกับที่คุณเพิ่มใด ๆ ประกอบ SQL CLR ?

คำตอบ:


14

คุณสามารถเพิ่มการอ้างอิงไปยังแอสเซมบลีเหล่านั้นซึ่งได้ลงทะเบียนกับ SQL Server หากพวกเขาไม่ได้ลงทะเบียนพวกเขาจะไม่ปรากฏในกล่องโต้ตอบเพิ่มการอ้างอิง

มีหลายขั้นตอนที่คุณจะต้องลงทะเบียน DLL ก่อนอื่นคุณจะต้องกำหนดค่าฐานข้อมูลของคุณใหม่:

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

เมื่อเสร็จสิ้นแล้ว SQL Server จะเปิดใช้งาน CLR ถัดไปคุณจะต้องลงทะเบียนชุดประกอบของคุณ:

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

หากสคริปต์สุดท้ายนี้ทำงานอย่างถูกต้องจะมีการลงทะเบียนชุดประกอบและจะปรากฏในกล่องโต้ตอบเพิ่มการอ้างอิง

สิ่งที่คุณจะต้องพิจารณาคือความปลอดภัยของแอพพลิเคชันของการกำหนดค่า SQL Server ของคุณ:

  1. ต้องการที่จะลงทะเบียนการชุมนุมเป็นSAFEเฉพาะในกรณีพิเศษที่คุณควรใช้หรือEXTERNAL_ACCESSUNSAFE
  2. อย่าคาดหวังว่าจะสามารถทำทุกอย่างที่คุณสามารถทำได้บน Full-trust CLR (เช่นไม่ใช่ CLR ที่โฮสต์โดย SQL Server) - SQLCLR เป็นรันไทม์แบบ sandbox
  3. อย่าพยายามโหลดแอสเซมบลีแบบไดนามิกตามที่Assembly.Load()จำกัด อย่างเด็ดเดี่ยว
  4. คุณอาจต้องตรวจสอบให้แน่ใจว่าUNSAFEไลบรารี่ของบุคคลที่สามนั้นถูกเซ็นด้วยกุญแจสาธารณะหากคุณวางแผนที่จะใช้
  5. การรันโค้ดทำงานในบริบทของตัวตนของบริการที่เรียกใช้ SQL Server (ฉันคิดว่า!)
  6. การเข้าถึงฐานข้อมูลที่ทำจากแอสเซมบลีโฮสต์ (เช่นผ่านcontext connection = true;) จะทำงานในบริบทของผู้ใช้ที่เชื่อมต่อดังนั้นคุณต้องแน่ใจว่าคุณทราบว่าการเข้าถึงห้องสมุดนั้นมีข้อมูลของคุณ

ใน 4 ข้างต้นคุณเขียนว่าคุณต้องลงนามในการชุมนุม ฉันได้รับส่วนนั้นและสามารถทำได้ผ่านคำแนะนำที่ลงชื่อเองที่นี่: geekswithblogs.net/ktegels/archive/2006/02/16/ แต่วิธีการติดตั้งใบรับรองเมื่อคุณไม่มีรหัสส่วนตัวเช่นเมื่อ ชุมนุมถูกสร้างและลงนามโดยบุคคลที่สามที่เชื่อถือได้? เท่าที่ฉันสามารถบอกได้ในลิงค์ด้านบนการสร้างใบรับรองต้องใช้รหัสส่วนตัว ที่ดูเหมือนจะทำให้เป็นไปไม่ได้?
JorgeSandoval

2
นอกจากนี้ - การทำเครื่องหมาย db ว่าเชื่อถือได้นั้นมีความเสี่ยง (และไม่จำเป็นสำหรับการติดตั้งชุดประกอบ "Safe") เชื่อถือได้เป็นวิธีหนึ่งในการลงนามแอสเซมบลีสำหรับการอนุญาตภายนอก / ไม่ปลอดภัย แต่ไม่แนะนำเนื่องจากแอสเซมบลี CLR ที่ติดตั้งใด ๆ จะเชื่อถือได้ ...
JorgeSandoval

5

ฉันสมมติว่าคุณกำลังถามเกี่ยวกับทางเลือกในการติดตั้งชุดประกอบ SQL CLR จาก Visual Studio

ไม่จำเป็นต้องมีรหัสใน Visual Studio

การปรับใช้วัตถุฐานข้อมูล CLRบน MSDN ให้รายละเอียดตัวเลือกรวมถึงคำสั่ง SQL และสคริปต์การปรับใช้


1

ฉันใช้ DLL บุคคลที่สามที่มีขนาดใหญ่มากซึ่งใช้เว็บเพจและแปลงเป็น PDF

PDF จะถูกบันทึกไว้ในการแชร์ไฟล์และฐานข้อมูลจะได้รับการอัปเดตตามที่ตั้งและประเภทของมัน

นี่เป็นกระบวนการ 3 ขั้นตอน:

  1. สร้างแอปคอนโซลที่ใช้ DLL บุคคลที่สามเพื่อสร้าง PDF และยอมรับ URL และ FilePath เป็นพารามิเตอร์และส่งคืนขนาด PDF และจำนวนหน้า

  2. สร้างโพรซีเดอร์ที่เก็บ CLR จากนั้นเรียกแอปคอนโซลบนเซิร์ฟเวอร์

  3. ฉันห่อมันทั้งหมดไว้ในขั้นตอนการจัดเก็บเดียวที่เรียกแอป CLR เพื่อสร้าง PDF แล้วฉันจะเขียน meta-data เกี่ยวกับมันไปยังฐานข้อมูล

ฉันรู้ว่านี่ไม่สมบูรณ์แบบและไม่ควรทำอะไรที่บ้าคลั่งในไกปืน!

ฉันแค่พูดถึงที่นี่สำหรับผู้อื่นที่มีคำถามเกี่ยวกับการใช้ Third Party DLL ใน CLR ของพวกเขา

ความหวังของฉันคือโดยการหมุนคอนโซล cmd.exe เพื่อเรียกใช้ 3rd Party DLL แทนที่จะเรียกใช้ทุกอย่างใน proc หากเกิดปัญหาจะไม่ส่งผลเสียต่อ SQL Server มากนัก นั่นคือสิ่งที่ฉันหวัง

โปรดแสดงความคิดเห็นว่านี่เป็นวิธีการที่ไม่ดีจริงหรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.