TRUSTWORTHY
thuộc tính của cơ sở dữ liệu (khi được đặt thành ON
) về cơ bản khai báo với SQL Server rằng mã có trong cơ sở dữ liệu đó và thực thi trong ngữ cảnh mạo danh, nên được phép truy cập bên ngoài cơ sở dữ liệu đó trong khi vẫn duy trì ngữ cảnh bảo mật được mạo danh đó. Nó cũng cho phép tất cả Các tập hợp SQLCLR trong Cơ sở dữ liệu đó sẽ được đặt thành EXTERNAL_ACCESS
và UNSAFE
, cho dù mã đó có đến bên ngoài máy chủ hay không (nghĩa bên ngoài:truy cập mạng, truy cập hệ thống tệp, truy cập sổ đăng ký, truy cập môi trường, v.v.).
Nó là một phương tiện khá chung chung để cho phép điều này vì nó bao gồm tất cả các mã trong cơ sở dữ liệu. Sử dụng Chứng chỉ và / hoặc Khóa không đối xứng để ký mô-đun - procs và / hoặc cụm - cho phép kiểm soát chi tiết hơn đối với mã nào có quyền nào.
Đặt Cơ sở dữ liệu thành TRUSTWORTHY
cũng cho phép bất kỳ quá trình nào bắt đầu trong Cơ sở dữ liệu này có thể đạt đến cấp Máy chủ và / hoặc đến các Cơ sở dữ liệu khác. Thông thường, một tiến trình được giới hạn / cách ly đối với Cơ sở dữ liệu nơi nó bắt đầu. Nếu Cơ sở dữ liệu thuộc sở hữu của Đăng nhập "sa", thì bất kỳ quá trình nào được khởi tạo trong Cơ sở dữ liệu đó và đang chạy dưới dạng "dbo" sẽ có đặc quyền "sa" (yikes!).
Thay vì cố gắng mô tả ở đây, với số lượng chi tiết cần thiết để truyền đạt đầy đủ các chi tiết cụ thể về mạo danh, mở rộng việc mạo danh, ký mô-đun, v.v., tôi khuyên bạn nên xem xét các tài nguyên sau về chủ đề này:
- XIN VUI LÒNG , vui lòng Ngừng sử dụng Mạo danh, TRUSTWORTHY và Chuỗi sở hữu nhiều DB
- Hướng dẫn sử dụng cài đặt cơ sở dữ liệu TRUSTWORTHY trong SQL Server
- Mở rộng Mạo danh Cơ sở dữ liệu bằng cách Sử dụng EXECUTE AS
Đây là một tài liệu rất giàu thông tin bao gồm hầu hết các khía cạnh của chủ đề này và cũng được tham khảo trong trang được liên kết ở trên. - Cầu thang tới SQLCLR Cấp độ 4:Bảo mật (Tập hợp BÊN NGOÀI và KHÔNG AN TOÀN)
Đây là bài viết tôi đã viết như một phần của loạt bài về SQLCLR có các ví dụ minh họa sự khác biệt giữa phương pháp TRUSTWORTHY và phương pháp Đăng nhập dựa trên hội đồng đã ký; Đăng ký miễn phí là bắt buộc.
Bạn nên tránh đặt cơ sở dữ liệu của mình thành TRUSTWORTHY
Càng nhiều càng tốt. Nếu bạn thực sự phải có lệnh gọi đa luồng / không đồng bộ VÀ nếu bạn có mã nguồn và đang biên dịch hợp ngữ, thì tôi không thể nghĩ ra lý do để sử dụng SET TRUSTWORTHY ON
quyền mua. Thay vào đó, bạn nên ký hợp đồng bằng mật khẩu và sử dụng các lệnh sau để thiết lập phương pháp ưu tiên cho phép EXTERNAL_ACCESS
và UNSAFE
lắp ráp:
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];
Khi điều đó đã sẵn sàng, bạn có thể truy cập cơ sở dữ liệu nơi lắp ráp của bạn đã được tải và chạy:
ALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;
Hoặc bạn có thể đã bao gồm WITH PERMISSION_SET = UNSAFE
ở cuối CREATE ASSEMBLY
lệnh.