Dlaczego baza danych MSDB jest TRUSTWORTHY?

9

TRUSTWORTHYUstawienie może być dość niebezpieczne, jeśli nie jesteś ostrożny i za wyjątkiem szczególnych okoliczności, zaleca się, aby go wyłączyć. Jednak domyślnie MSDBbaza danych jest TRUSTWORHTYustawiona ONdomyślnie. Jestem ciekawa dlaczego?

Przeczytałem ten wpis w BOL

Uwaga Domyślnie ustawienie TRUSTWORTHY jest ustawione na ON dla bazy danych MSDB. Zmiana tego ustawienia na wartość domyślną może spowodować nieoczekiwane zachowanie komponentów SQL Server korzystających z bazy danych MSDB.

Ale jestem ciekawa szczegółów. Dlaczego konkretnie MSDBpotrzeba jest TRUSTWORTHYwłączona? Jakie funkcje go wykorzystują?

Kenneth Fisher
źródło
2
Wystarczy zastanowić się, dlaczego DLACZEGO nie trzeba, aby usługa SQL Agent mogła współpracować ze wszystkimi bazami danych w instancji, aby używać poczty DB do powiadomień i innych zasobów zewnętrznych; ścieżki, obiekty AD itp. w zadaniach agenta SQL.
Pimp Juice IT
1
@JUICED_IT także historia zadań agenta SQL, historia monitorowania wysyłania dziennika, pakiety SSIS, dane doradcy dostrajania aparatu bazy danych oraz dane kolejki Service Broker i informacje o kopii zapasowej. To jest wiele rzeczy, od których oczekujesz standardowego zachowania. sqlperformance.com/2015/07/sql-maintenance/msdb
ConstantineK
Podejrzewam, że jest wymagany do wszystkiego, co korzysta z wywołań między bazami danych. Powinieneś ustawić TRUSTWORTHYWYŁ., msdbAby zobaczyć, co przestaje działać, a będziesz miał przynajmniej część odpowiedzi :). Pomyślałem, że BACKUP będzie miał problemy, ale po prostu spróbowałem i udało się.
Solomon Rutzky

Odpowiedzi:

3

Istnieją dziesiątki obiektów w msdbodwołujące się do masterbazy danych.

Gdyby msdb nie było oznaczone jako TRUSTWORTHY, użytkownicy potrzebowaliby uprawnień zarówno do msdbobiektu, z którym wchodzą w interakcje, jak i do masterobiektu, do którego się odwołuje.

Na przykład użytkownicy msdb, którzy uzyskują uprawnienia za pośrednictwem roli bazy danych SQLAgentUserRole, mają uprawnienia do wykonywania na msdb.dbo.sp_enum_sqlagent_subsystems. Stos wywołań dla tej procedury w końcu trafia master:

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

Jeśli msdbnie jest oznaczony jako TRUSTWORTHY, wówczas użytkownicy, którzy są częścią roli bazy danych SQLAgentUserRole, również potrzebują uprawnień do wykonania master.dbo.xp_instance_regread.

Technicznie rzecz biorąc, prawdopodobnie można usunąć TRUSTWORTHYustawienie msdbi zamiast tego udzielić określonych uprawnień w master. Te wymagane uprawnienia nie są jednak udokumentowane ani obsługiwane.

AMtwo
źródło
Prawdopodobnie masz rację, ale jeśli tak, to równie ważne jest, aby właściciel MSDB miał te uprawnienia.
Kenneth Fisher
@KennethFisher Prawdopodobnie? Zwykle nie zadzieram z właścicielem bazy danych dla msdb, więc nie jestem pewien. Zawsze po prostu zostawiłem to jako sa. Słusznie o tym nie myślałem.
AMtwo
Ach, ale jeśli mam odpowiednie uprawnienia w MSDB, mogę użyć dostępu sa w połączeniu z TRUSTWORTHY, aby przejąć twój serwer :)
Kenneth Fisher
Prawdziwe. Ale dlatego należy ostrożnie ograniczyć dostęp do systemowych baz danych. Jeśli nie jesteś DBA, nie musisz wchodzić do systemowej bazy danych.
AMtwo