Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Rủi ro bảo mật khi đặt đáng tin cậy =bật trong máy chủ sql 2012

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_ACCESSUNSAFE , 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:

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_ACCESSUNSAFE 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn bộ xử lý cho SQL Server 2014 - Phần 2

  2. SQL Chọn một hàng và lưu trữ trong một biến SQL

  3. nvarchar (tối đa) so với NText

  4. Không thể thay đổi mật khẩu của sa trong SQL Server 2008

  5. bảo vệ tệp cơ sở dữ liệu máy chủ sql