Чому база даних MSDB ПРАВИЛЬНО?


9

TRUSTWORTHYУстановка може бути вельми небезпечно , якщо ви не будете обережні і для конкретних обставин рекомендація повинна тримати його відключити , за винятком. Однак за замовчуванням MSDBбаза даних TRUSTWORHTYвстановлена ONза замовчуванням. Мені цікаво чому?

Я читав цей запис у BOL

Примітка За замовчуванням для бази даних MSDB для параметра "TRUSTWORTHY" встановлено значення УВІМКНЕНО. Зміна цього параметра зі значення за замовчуванням може призвести до несподіваної поведінки компонентів SQL Server, які використовують базу даних MSDB.

Але мені цікаво конкретизувати. Чому конкретно MSDBпотрібно TRUSTWORTHYвключити? Які функції ним користуються?


2
ЧОГО швидка думка без дослідження, ЧОМУ буде так, що служба агента SQL може взаємодіяти з усіма БД в екземплярі, використовувати пошту БД для сповіщень, інші зовнішні ресурси; шляхи, об’єкти AD тощо в завданнях SQL Agent.
Pimp Juice IT

1
@JUICED_IT також історія завдань SQL Agent, історія монітору доставки журналів, пакети SSIS, дані радника з налаштування двигуна бази даних, дані черги сервісного брокера та інформація про резервне копіювання. Це багато речей, від яких ви хочете стандартної поведінки. sqlperformance.com/2015/07/sql-maintenance/msdb
ConstantineK

Я підозрюю, що це потрібно для всього, що використовує виклики міжбазових даних. Ви повинні звернутися TRUSTWORTHYдо OFF, msdbщоб побачити, що припиняє роботу, і ви отримаєте принаймні частину відповіді :). Я вважав, що BACKUP матиме проблеми, але я просто спробував, і це вдалося.
Соломон Руцький

Відповіді:


3

У msdbцій посиланнях на masterбазу даних є десятки об'єктів .

Якщо msdb не було позначено як TRUSTWORTHY, то користувачі потребували б дозволу як на msdbоб'єкт, з яким вони взаємодіють, так і на masterоб’єкт, на який посилається.

Наприклад, користувачі msdb, які отримують дозволи через роль бази даних SQLAgentUserRole, надаються виконувати msdb.dbo.sp_enum_sqlagent_subsystems. Стек викликів для цієї процедури врешті-решт потрапляє master:

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

Якщо msdbце не позначено як TRUSTWORTHY, то користувачам, які є частиною ролі бази даних SQLAgentUserRole, ТАКОЖ потрібен виконати дозвіл на master.dbo.xp_instance_regread.

Технічно кажучи, можливо, можливо видалити TRUSTWORTHYналаштування msdbі замість цього надати конкретні дозволи в master. Однак ці необхідні дозволи не є ні задокументованими, ні підтримуються.


Ви, напевно, праві, але якщо так, то не менш важливо, щоб власник MSDB мав ці дозволи.
Кеннет Фішер

@KennethFisher Напевно? Я зазвичай не воюю з власником бази даних для msdb, тому я не впевнений. Я завжди просто залишав це як са. Я законно цього не думав.
AMtwo

Ага, але якщо у мене є правильні дозволи в MSDB, я можу використовувати цей доступ у поєднанні з TRUSTWORTHY, щоб перейняти ваш сервер :)
Кеннет Фішер

Правда. Але саме тому доступ до системних БД повинен бути ретельно обмежений. Якщо ви не DBA, вам не потрібно потрапляти в системну базу даних.
AMtwo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.