Propiedad de base de datos TRUSTWORTHY

Se aplica a:SQL ServerAzure SQL Managed Instance

La propiedad de la TRUSTWORTHY base de datos indica si la instancia de SQL Server confía en la base de datos y en su contenido. Por defecto, esta configuración es OFF, pero puedes configurarla ON usando la ALTER DATABASE sentencia.

Por ejemplo:

ALTER DATABASE AdventureWorks2025 SET TRUSTWORTHY ON;

Nota:

Para establecer esta opción, debe tener el permiso CONTROL SERVER o ser miembro del rol fijo de servidor sysadmin fijo.

Para mitigar ciertas amenazas, deja la TRUSTWORTHY propiedad de la base de datos configurada en OFF. Estas amenazas pueden existir como resultado de adjuntar una base de datos que contiene uno de los siguientes objetos:

  • Ensamblajes maliciosos con la EXTERNAL_ACCESS configuración de permisos o UNSAFE . Para más información, véase seguridad de integración CLR.

  • Módulos maliciosos definidos para ejecutarse como usuarios altamente privilegiados. Para más información, véaseEXECUTE AS cláusula.

Ambas situaciones requieren un grado específico de privilegio y están protegidas por mecanismos apropiados cuando se utilizan en el contexto de una base de datos que ya está conectada a una instancia de SQL Server. Sin embargo, si se deja la base de datos sin conexión, si tiene acceso al archivo de la base de datos podría adjuntarlo a una instancia de SQL Server que desee y agregar contenido malintencionado a la base de datos. Cuando se separan y adjuntan bases de datos en SQL Server, se establecen ciertos permisos en los archivos de datos y de registro que restringen el acceso a los archivos de base de datos.

Como una base de datos vinculada a una instancia de SQL Server no puede ser inmediatamente confiable, la base de datos no puede acceder a recursos más allá del alcance de la base hasta que esta esté explícitamente marcada como confiable. Por lo tanto, si haces una copia de seguridad o desanexas una base de datos que tiene la TRUSTWORTHY opción ON y adjuntas o restauras la base de datos a la misma instancia u otra de SQL Server, la TRUSTWORTHY propiedad se establece como OFF cuando se completa la conexión o restauración. Además, los módulos diseñados para acceder a recursos fuera de la base de datos, y los ensambladores con la EXTERNAL_ACCESS configuración de permisos de or UNSAFE , tienen requisitos adicionales para ejecutarse correctamente.

Nota:

Por defecto, la TRUSTWORTHY opción está configurada como ON para la msdb base de datos. Si cambia esta configuración de su valor predeterminado, podría producirse un comportamiento inesperado por parte de los componentes de SQL Server que usan la base de datos msdb.

Si configuras la TRUSTWORTHY configuración en ON, y si el propietario de la base de datos es miembro de un grupo con credenciales administrativas, como el grupo sysadmin, el propietario de la base de datos puede entonces crear y ejecutar ensambladores inseguros que puedan comprometer la instancia de SQL Server.

Observaciones

En un entorno de proveedor de servicios de Internet (ISP), como un servicio de alojamiento web, cada cliente gestiona su propia base de datos y no puede acceder a bases de datos del sistema ni a otras bases de datos de usuarios. Por ejemplo, un ISP puede alojar las bases de datos de dos empresas competidoras en la misma instancia de SQL Server. Si adjuntas una base de datos de usuario a su instancia original, podrías añadir código peligroso a la base de datos de usuarios. Cuando despliegas la base de datos en la instancia del ISP, el código se activa correctamente. Este escenario hace que controlar el acceso entre bases de datos sea crucial.

Si la misma entidad general posee y gestiona cada base de datos, sigue sin ser una buena práctica establecer una relación de confianza con una base de datos a menos que una característica específica de la aplicación, como la comunicación entre bases de datos con Service Broker, lo requiera. Se establece una relación de confianza entre bases de datos habilitando la cadena de propiedad entre bases de datos, o marcando una base de datos como confiable para la instancia que utiliza la TRUSTWORTHY propiedad. La is_trustworthy_on columna de la sys.databases vista de catálogo indica si una base de datos tiene su TRUSTWORTHY propiedad activada.

Entre los procedimientos recomendados para la propiedad y la confianza de la base de datos se incluyen los siguientes:

  • Tener propietarios distintos para las bases de datos. No todas las bases de datos deben ser propiedad del administrador del sistema.

  • Limitar el número de propietarios de cada base de datos.

  • Conferir confianza de forma selectiva.

  • Mantén la configuración de cadena de propiedad cruzada en base de datos a OFF menos que despliegues varias bases de datos como una sola unidad.

  • Migre el uso a confianza selectiva en lugar de usar la propiedad TRUSTWORTHY.

El siguiente ejemplo Transact-SQL devuelve una lista de bases de datos que tienen la TRUSTWORTHY propiedad configurada en ON y cuyo propietario de base de datos pertenece al rol de servidor fijo de administrador del sistema.

SELECT SUSER_SNAME(owner_sid) AS DBOWNER,
       d.name AS DATABASENAME
FROM sys.server_principals AS r
     INNER JOIN sys.server_role_members AS m
         ON r.principal_id = m.role_principal_id
     INNER JOIN sys.server_principals AS p
         ON p.principal_id = m.member_principal_id
     INNER JOIN sys.databases AS d
         ON suser_sname(d.owner_sid) = p.name
WHERE is_trustworthy_on = 1
      AND d.name NOT IN ('msdb')
      AND r.type = 'R'
      AND r.name = N'sysadmin';
GO

El siguiente ejemplo determina la TRUSTWORTHY propiedad de la msdb base de datos.

SELECT name,
       CASE is_trustworthy_on
           WHEN 1 THEN 'Trustworthy setting is ON for msdb'
           ELSE 'Trustworthy setting is OFF for msdb'
       END AS trustworthy_setting
FROM sys.databases
WHERE database_id = 4;
GO

Si esta consulta muestra que la TRUSTWORTHY propiedad está establecida en OFF para msdb, puedes ejecutar la siguiente consulta para restaurarla a su valor predeterminado de ON.

ALTER DATABASE msdb SET TRUSTWORTHY ON;
GO

Advertencia de seguridad

Cuando la TRUSTWORTHY propiedad esON y el propietario de la base de datos es miembro del rol de servidor fijo de administrador del sistema, un miembro del rol de base de datos fija db_owner puede elevar sus permisos a administrador del sistema. Ambas condiciones son necesarias. Ten cuidado con la TRUSTWORTHY propiedad.

El siguiente código Transact-SQL devuelve una lista de usuarios de bases de datos en una base de datos que tienen el rol de base de datos fijo db_owner .

SELECT roles.principal_id AS RolePrincipalID,
       roles.name AS RolePrincipalName,
       database_role_members.member_principal_id AS MemberPrincipalID,
       members.name AS MemberPrincipalName
FROM sys.database_role_members AS database_role_members
     INNER JOIN sys.database_principals AS roles
         ON database_role_members.role_principal_id = roles.principal_id
     INNER JOIN sys.database_principals AS members
         ON database_role_members.member_principal_id = members.principal_id
WHERE roles.name = 'db_owner'
      AND members.name <> 'dbo';
GO