¿Por qué la base de datos MSDB es CONFIABLE?

9

La TRUSTWORTHYconfiguración puede ser bastante peligrosa si no tiene cuidado y, excepto en circunstancias específicas, la recomendación es mantenerla apagada. Sin embargo, de manera predeterminada, la MSDBbase de datos se ha TRUSTWORHTYconfigurado ONde manera predeterminada. Tengo curiosidad por qué?

He leído esta entrada en BOL

Nota De forma predeterminada, la configuración TRUSTWORTHY está activada para la base de datos MSDB. La alteración de esta configuración de su valor predeterminado puede provocar un comportamiento inesperado por parte de los componentes de SQL Server que usan la base de datos MSDB.

Pero tengo curiosidad por los detalles. ¿Por qué específicamente MSDBnecesita TRUSTWORTHYactivarse? ¿Qué funciones lo usan?

Kenneth Fisher
fuente
2
Solo un pensamiento rápido sin investigación para POR QUÉ sería para que el servicio del Agente SQL pueda interactuar con todos los DB en una instancia, para usar el correo DB para notificaciones, otros recursos externos; rutas, objetos AD, etc. dentro de los trabajos del Agente SQL.
Pimp Juice IT
1
@JUICED_IT también el historial de trabajos del Agente SQL, el historial del monitor de envío de registros, los paquetes SSIS, los datos del Asesor de ajuste de motor de base de datos y los datos de la cola de Service Broker e información de respaldo. Esas son muchas cosas de las que quieres un comportamiento estándar. sqlperformance.com/2015/07/sql-maintenance/msdb
ConstantineK
Sospecho que es necesario para cualquier cosa que use llamadas entre bases de datos. Debe TRUSTWORTHYapagar para msdbver qué deja de funcionar y tendrá al menos parte de la respuesta :). Pensé que BACKUP tendría problemas, pero lo intenté y lo logré.
Solomon Rutzky

Respuestas:

3

Hay docenas de objetos en msdbesa referencia a la masterbase de datos.

Si msdb no estuviera marcado como TRUSTWORTHY, entonces los usuarios necesitarían permiso tanto para el msdbobjeto con el que están interactuando, como para el masterobjeto al que se hace referencia.

Por ejemplo, los usuarios de msdb que obtienen permisos a través del rol de base de datos SQLAgentUserRole tienen permiso de ejecución en msdb.dbo.sp_enum_sqlagent_subsystems. La pila de llamadas para ese procedimiento finalmente llega a master:

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

Si msdbno está marcado como TRUSTWORTHY, entonces los usuarios que forman parte de la función de base de datos SQLAgentUserRole TAMBIÉN necesitarían ejecutar permiso master.dbo.xp_instance_regread.

Técnicamente hablando, es posible eliminar la TRUSTWORTHYconfiguración msdby, en su lugar, otorgar permisos específicos master. Sin embargo, esos permisos requeridos no están documentados ni son compatibles.

AMtwo
fuente
Probablemente tenga razón, pero si es así, es igualmente importante que el propietario de MSDB tenga esos permisos.
Kenneth Fisher
@KennethFisher ¿Probablemente? Por lo general, no me meto con el propietario de la base de datos para msdb, por lo que no estoy seguro. Siempre lo dejé como sa. No había pensado legítimamente en eso.
AMtwo
Ahh, pero si tengo los permisos correctos en MSDB, puedo usar ese acceso sa en combinación con TRUSTWORTHY para hacerse cargo de su servidor :)
Kenneth Fisher
Cierto. Pero es por eso que el acceso a las bases de datos del sistema debe restringirse cuidadosamente. Si no es un DBA, no necesita ingresar a una base de datos del sistema.
AMtwo