Tại sao cơ sở dữ liệu MSDB TRUSTWORTHY?


9

Các TRUSTWORTHYthiết lập có thể khá nguy hiểm nếu bạn không cẩn thận và trừ trường hợp cụ thể đề nghị là để giữ cho nó tắt. Tuy nhiên theo mặc định, MSDBcơ sở dữ liệu đã TRUSTWORHTYđược đặt ONmặc định. Tôi tò mò tại sao?

Tôi đã đọc mục này trong BOL

Lưu ý Theo mặc định, cài đặt TRUSTWORTHY được đặt thành BẬT cho cơ sở dữ liệu MSDB. Việc thay đổi cài đặt này khỏi giá trị mặc định của nó có thể dẫn đến hành vi không mong muốn của các thành phần SQL Server sử dụng cơ sở dữ liệu MSDB.

Nhưng tôi tò mò về chi tiết cụ thể. Tại sao đặc biệt không MSDBcần TRUSTWORTHYbật? Những chức năng sử dụng nó?


2
Chỉ cần suy nghĩ nhanh mà không cần nghiên cứu về TẠI SAO thì dịch vụ Tác nhân SQL có thể tương tác với tất cả các DB trên một cá thể, để sử dụng thư DB cho các thông báo, các tài nguyên bên ngoài khác; đường dẫn, đối tượng AD, v.v. trong các tác vụ SQL Agent.
Pimp Juice IT

1
@JUICED_IT cũng có lịch sử công việc của Tác nhân SQL, lịch sử giám sát vận chuyển nhật ký, các gói SSIS, dữ liệu Cố vấn điều chỉnh công cụ cơ sở dữ liệu và dữ liệu hàng đợi của Nhà môi giới dịch vụ và thông tin sao lưu. Đó là rất nhiều điều mà bạn muốn hành vi tiêu chuẩn từ. sqlperformance.com/2015/07/sql-maintenance/msdb
ConstantineK

Tôi nghi ngờ nó là cần thiết cho bất cứ điều gì sử dụng các cuộc gọi cơ sở dữ liệu chéo. Bạn nên chuyển TRUSTWORTHYsang TẮT msdbđể xem những gì ngừng hoạt động và bạn sẽ có ít nhất một phần của câu trả lời :). Tôi đoán BACKUP sẽ có vấn đề nhưng tôi đã thử và nó đã thành công.
Solomon Rutzky

Câu trả lời:


3

Có hàng tá đối tượng trong msdbđó tham chiếu mastercơ sở dữ liệu.

Nếu msdb không được đánh dấu là TRUSTWORTHY, thì người dùng sẽ cần sự cho phép đối với cả msdbđối tượng họ đang tương tác, cộng với masterđối tượng đang được tham chiếu.

Ví dụ: người dùng msdb nhận quyền thông qua vai trò cơ sở dữ liệu SQLAgentUserRole được cấp thực thi trên msdb.dbo.sp_enum_sqlagent_subsystems. Ngăn xếp cuộc gọi cho thủ tục đó cuối cùng đạt master:

* msdb.dbo.sp_enum_sqlagent_subsystems
    * msdb.dbo.sp_enum_sqlagent_subsystems_internal
        * master.dbo.xp_instance_regread

Nếu msdbkhông được đánh dấu là TRUSTWORTHY, thì người dùng là một phần của vai trò cơ sở dữ liệu SQLAgentUserRole C ALNG cần phải có quyền thực thi master.dbo.xp_instance_regread.

Về mặt kỹ thuật, có thể loại bỏ TRUSTWORTHYcài đặt trong msdbvà thay vào đó cấp các quyền cụ thể trong master. Tuy nhiên, những quyền cần thiết không được ghi lại cũng không được hỗ trợ.


Bạn có thể đúng nhưng nếu vậy thì điều quan trọng không kém là chủ sở hữu MSDB có các quyền đó.
Kenneth Fisher

@KennethFisher Có lẽ? Tôi thường không gây rối với chủ sở hữu cơ sở dữ liệu cho msdb, vì vậy tôi không chắc chắn. Tôi đã luôn luôn để nó là sa. Tôi hợp pháp đã không nghĩ về điều đó.
AMtwo 28/03/2016

À nhưng nếu tôi có quyền trong MSDB, tôi có thể sử dụng quyền truy cập đó kết hợp với TRUSTWORTHY để chiếm quyền máy chủ của bạn :)
Kenneth Fisher

Thật. Nhưng đây là lý do tại sao quyền truy cập vào DB hệ thống nên được hạn chế cẩn thận. Nếu bạn không phải là một DBA, bạn không cần phải vào cơ sở dữ liệu hệ thống.
AMtwo 28/03/2016
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.