Warum ist die MSDB-Datenbank VERTRAUENSWERT?

9

Die TRUSTWORTHYEinstellung kann ziemlich gefährlich sein, wenn Sie nicht vorsichtig sind. Abgesehen von bestimmten Umständen wird empfohlen, sie deaktiviert zu lassen. Jedoch standardmäßig die MSDBhat Datenbank TRUSTWORHTYgesetzt ONstandardmäßig. Ich bin neugierig warum?

Ich habe diesen Eintrag in BOL gelesen

Hinweis Standardmäßig ist die Einstellung TRUSTWORTHY für die MSDB-Datenbank auf ON gesetzt. Das Ändern dieser Einstellung von ihrem Standardwert kann zu unerwartetem Verhalten von SQL Server-Komponenten führen, die die MSDB-Datenbank verwenden.

Aber ich bin neugierig auf Einzelheiten. Warum muss speziell MSDBaktiviert werden TRUSTWORTHY? Welche Funktionen nutzen es?

Kenneth Fisher
quelle
2
Nur ein kurzer Gedanke ohne Recherche nach WARUM wäre, damit der SQL Agent-Dienst mit allen DBs auf einer Instanz interagieren kann, um DB-Mail für Benachrichtigungen und andere externe Ressourcen zu verwenden. Pfade, AD-Objekte usw. in SQL Agent-Jobs.
Pimp Juice IT
1
@JUICED_IT auch SQL Agent-Auftragsverlauf, Protokollversandüberwachungsverlauf, SSIS-Pakete, Database Engine Tuning Advisor-Daten und Service Broker-Warteschlangendaten sowie Sicherungsinformationen. Das sind viele Dinge, von denen Sie Standardverhalten wollen. sqlperformance.com/2015/07/sql-maintenance/msdb
ConstantineK
Ich vermute, es ist für alles erforderlich, was datenbankübergreifende Aufrufe verwendet. Sie sollten TRUSTWORTHYAUS schalten , um msdbzu sehen, was nicht mehr funktioniert, und Sie werden zumindest einen Teil der Antwort haben :). Ich dachte, BACKUP würde Probleme haben, aber ich habe es einfach versucht und es war erfolgreich.
Solomon Rutzky

Antworten:

3

Es gibt Dutzende von Objekten in msdbdieser, die auf die masterDatenbank verweisen .

Wenn msdb nicht als markiert TRUSTWORTHYwäre, benötigen Benutzer die Berechtigung sowohl für das msdbObjekt, mit dem sie interagieren, als auch für das masterObjekt, auf das verwiesen wird.

Beispielsweise wird msdb-Benutzern, die Berechtigungen über die Datenbankrolle SQLAgentUserRole erhalten, die Ausführung am gewährt msdb.dbo.sp_enum_sqlagent_subsystems. Der Aufrufstapel für diese Prozedur trifft schließlich master:

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

Wenn dies msdbnicht als markiert ist TRUSTWORTHY, benötigen Benutzer, die Teil der Datenbankrolle SQLAgentUserRole sind, AUCH eine Ausführungsberechtigung für master.dbo.xp_instance_regread.

Technisch gesehen ist es wahrscheinlich möglich, die TRUSTWORTHYEinstellung in zu entfernen msdbund stattdessen bestimmte Berechtigungen in zu erteilen master. Diese erforderlichen Berechtigungen werden jedoch weder dokumentiert noch unterstützt.

Zwei
quelle
Sie haben wahrscheinlich Recht, aber wenn ja, ist es ebenso wichtig, dass der Eigentümer von MSDB über diese Berechtigungen verfügt.
Kenneth Fisher
@ KennethFisher Wahrscheinlich? Normalerweise lege ich mich nicht mit dem Datenbankbesitzer für msdb an, daher bin ich mir nicht sicher. Ich habe es immer nur als sa belassen. Daran hatte ich zu Recht nicht gedacht.
Zwei
Ahh, aber wenn ich die richtigen Berechtigungen in MSDB habe, kann ich diesen Zugriff in Kombination mit TRUSTWORTHY verwenden, um Ihren Server zu übernehmen :)
Kenneth Fisher
Wahr. Aus diesem Grund sollte der Zugriff auf System-DBs sorgfältig eingeschränkt werden. Wenn Sie kein DBA sind, müssen Sie nicht in eine Systemdatenbank gelangen.
Zwei