Dll bên thứ 3 trong SQL Server CLR


14

Tôi cần sử dụng DLL của bên thứ ba trong mã kích hoạt c # trong SQL Server CLR

Nhưng khi tôi cố gắng thêm tham chiếu thì nó chỉ hiển thị một số DLL từ SQL Server.

Làm cách nào tôi có thể thêm dll bên thứ ba vào SQL Server?


2
Giống như cách bạn thêm bất kỳ hội đồng SQL CLR nào?

Câu trả lời:


14

Bạn chỉ có thể thêm các tham chiếu đến các hội đồng đã được đăng ký với Sql Server. Nếu chúng không được đăng ký, chúng sẽ không hiển thị trong hộp thoại Thêm tài liệu tham khảo.

Có một số bước bạn sẽ cần phải đăng ký DLL, trước tiên bạn sẽ cần cấu hình lại cơ sở dữ liệu của mình:

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

Một khi điều này được thực hiện, Sql Server được kích hoạt CLR. Tiếp theo, bạn sẽ cần phải đăng ký lắp ráp của bạn:

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

Nếu tập lệnh cuối cùng này chạy chính xác, tập hợp hiện đã được đăng ký và sẽ xuất hiện trong hộp thoại Thêm tài liệu tham khảo.

Điều bạn sẽ cần xem xét là bảo mật ứng dụng của cấu hình Sql Server CLR của bạn:

  1. Thích đăng ký một hội đồng như SAFE, chỉ trong trường hợp đặc biệt bạn nên sử dụng EXTERNAL_ACCESShoặc UNSAFE.
  2. Đừng mong đợi có thể làm mọi thứ bạn có thể trên CLR hoàn toàn tin cậy (nghĩa là không phải CLR được lưu trữ bởi Sql Server) - SQLCLR là thời gian chạy được đóng hộp cát.
  3. Không thử và tải các cụm một cách linh hoạt, như Assembly.Load()bị hạn chế một cách có chủ đích.
  4. Bạn có thể cần đảm bảo thư viện của bên thứ 3 được ký bằng khóa chung nếu bạn định sử dụng UNSAFE.
  5. Việc thực thi mã chạy trong bối cảnh nhận dạng của dịch vụ chạy Sql Server (tôi nghĩ vậy!)
  6. Truy cập cơ sở dữ liệu được tạo từ một tổ hợp được lưu trữ (ví dụ thông qua context connection = true;) chạy trong ngữ cảnh của người dùng được kết nối, vì vậy bạn cần đảm bảo rằng bạn biết thư viện đó có quyền truy cập nào vào dữ liệu của bạn.

trong 4 ở trên bạn viết bạn phải ký tên vào hội đồng. Tôi có phần đó và đã có thể thực hiện thông qua hướng dẫn tự gán ở đây: geekswithbloss.net/ktegels/archive/2006/02/16/ Khăn Nhưng làm thế nào để cài đặt chứng chỉ khi bạn không có khóa riêng, tức là khi nào lắp ráp được tạo ra và ký bởi một bên thứ ba đáng tin cậy? Theo như tôi có thể nói trong liên kết ở trên, việc tạo chứng chỉ đòi hỏi phải có khóa riêng. Điều đó dường như làm cho điều này là không thể?
JorgeSandoval

2
Ngoài ra - đánh dấu db là đáng tin cậy là rủi ro (và không cần thiết cho cài đặt lắp ráp "An toàn"). Đáng tin cậy là một cách xung quanh việc phải ký các hội đồng cho các quyền bên ngoài / không an toàn, nhưng không được khuyến nghị vì bất kỳ hội nghị CLR nào được cài đặt sẽ được tin cậy ...
JorgeSandoval

5

Tôi giả sử bạn đang hỏi về các lựa chọn thay thế để cài đặt các cụm SQL CLR từ Visual Studio.

Có mã trong Visual Studio là không bắt buộc.

Triển khai các đối tượng cơ sở dữ liệu CLR trên MSDN chi tiết các tùy chọn, bao gồm các câu lệnh SQL và các tập lệnh triển khai.


1

Tôi sử dụng một DLL bên thứ 3 rất lớn lấy một trang web và chuyển đổi nó thành PDF.

PDF được lưu trên chia sẻ tệp và cơ sở dữ liệu được cập nhật theo vị trí và loại.

Đây là một quá trình gồm 3 bước:

  1. Tạo một ứng dụng bảng điều khiển sử dụng DLL của bên thứ 3 để tạo PDF và chấp nhận URL và FilePath làm tham số và trả về kích thước PDF và số lượng trang.

  2. Tạo thủ tục lưu sẵn CLR sau đó gọi ứng dụng bảng điều khiển trên máy chủ

  3. Tôi gói tất cả vào một thủ tục được lưu trữ gọi ứng dụng CLR để tạo tệp PDF và sau đó tôi viết siêu dữ liệu về nó vào cơ sở dữ liệu.

Tôi nhận ra điều này không hoàn hảo và không có nghĩa là bạn nên làm bất cứ điều gì quá điên rồ bên trong cò súng!

Tôi chỉ đề cập ở đây cho những người khác có câu hỏi về việc sử dụng DLL của bên thứ 3 trong CLR của họ.

Hy vọng của tôi là bằng cách loại bỏ giao diện điều khiển cmd.exe để chạy DLL của bên thứ 3, thay vì chạy mọi thứ trong máy, nếu nó gặp sự cố, nó sẽ không ảnh hưởng xấu đến SQL Server. Đó là những gì tôi hi vọng.

Hãy bình luận nếu đây là một cách tiếp cận thực sự xấu và tại sao.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.