Perché il database MSDB è TRUSTWORTHY?


9

L' TRUSTWORTHYimpostazione può essere piuttosto pericolosa se non si è attenti e, salvo circostanze specifiche, si consiglia di tenerlo spento. Tuttavia, per impostazione predefinita, il MSDBdatabase è TRUSTWORHTYimpostato ONper impostazione predefinita. Sono curioso perché?

Ho letto questa voce in BOL

Nota Per impostazione predefinita, l'impostazione TRUSTWORTHY è ON per il database MSDB. La modifica di questa impostazione dal suo valore predefinito può comportare comportamenti imprevisti da parte dei componenti di SQL Server che utilizzano il database MSDB.

Ma sono curioso di conoscere i dettagli. Perché è MSDBnecessario attivare specificamente TRUSTWORTHY? Quali funzioni lo usano?


2
Solo una breve riflessione senza ricerca del PERCHÉ sarebbe così che il servizio SQL Agent possa interagire con tutti i DB su un'istanza, per usare la posta DB per le notifiche, altre risorse esterne; percorsi, oggetti AD, ecc. all'interno dei lavori di SQL Agent.
Pimp Juice IT

1
@JUICED_IT anche la cronologia dei lavori di SQL Agent, la cronologia dei monitor di spedizione dei log, i pacchetti SSIS, i dati di Tuning Advisor del motore di database, i dati della coda di Service Broker e le informazioni di backup. Sono molte le cose da cui desideri un comportamento standard. sqlperformance.com/2015/07/sql-maintenance/msdb
ConstantineK

Sospetto che sia necessario per tutto ciò che utilizza le chiamate tra database. Dovresti passare TRUSTWORTHYa OFF per msdbvedere cosa smette di funzionare e avrai almeno una parte della risposta :). Ho pensato che BACKUP avrebbe avuto problemi, ma ho appena provato e ci è riuscito.
Solomon Rutzky il

Risposte:


3

Ci sono dozzine di oggetti in msdbquel riferimento al masterdatabase.

Se msdb non fosse contrassegnato come TRUSTWORTHY, gli utenti avrebbero bisogno dell'autorizzazione sia per l' msdboggetto con cui interagiscono, sia per l' masteroggetto a cui si fa riferimento.

Ad esempio, gli utenti msdb che ottengono le autorizzazioni tramite il ruolo del database SQLAgentUserRole sono autorizzati a eseguire msdb.dbo.sp_enum_sqlagent_subsystems. Lo stack di chiamate per quella procedura alla fine colpisce master:

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

Se msdbnon è contrassegnato come TRUSTWORTHY, gli utenti che fanno parte del ruolo del database SQLAgentUserRole dovrebbero ANCHE eseguire l'autorizzazione master.dbo.xp_instance_regread.

Tecnicamente parlando, è probabilmente possibile rimuovere l' TRUSTWORTHYimpostazione in msdbe invece concedere autorizzazioni specifiche in master. Tuttavia, tali autorizzazioni richieste non sono né documentate né supportate.


Probabilmente hai ragione, ma in tal caso è altrettanto importante che il proprietario di MSDB disponga di tali autorizzazioni.
Kenneth Fisher,

@KennethFisher Probabilmente? Di solito non scherzo con il proprietario del database per msdb, quindi non ne sono sicuro. L'ho sempre lasciato come sa. Non ci avevo pensato legittimamente.
Due

Ahh, ma se ho i permessi giusti in MSDB posso usare quell'accesso in combinazione con TRUSTWORTHY per prendere il controllo del tuo server :)
Kenneth Fisher

Vero. Questo è il motivo per cui l'accesso ai DB di sistema dovrebbe essere attentamente limitato. Se non sei un DBA, non è necessario accedere a un database di sistema.
Due
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.