Propriété de base de données TRUSTWORTHY

S’applique à :SQL ServerAzure SQL Managed Instance

La TRUSTWORTHY propriété de base de données est utilisée pour indiquer si le instance de SQL Server approuve la base de données et son contenu. Par défaut, ce paramètre est OFF, mais peut être défini sur ON à l’aide de l’instruction ALTER DATABASE . Par exemple : ALTER DATABASE AdventureWorks2019 SET TRUSTWORTHY ON;.

Notes

Pour définir cette option, vous devez être membre du rôle serveur fixe sysadmin .

Nous vous recommandons de laisser la TRUSTWORTHY propriété de base de données définie sur OFF pour atténuer certaines menaces qui peuvent exister à la suite de l’attachement d’une base de données qui contient l’un des objets suivants :

Les deux situations nécessitent un degré de privilège spécifique et sont protégées par des mécanismes appropriés lorsqu’elles sont utilisées dans le contexte d’une base de données déjà attachée à un instance de SQL Server. Toutefois, si la base de données est mise hors connexion, si vous avez accès au fichier de base de données, vous pouvez potentiellement l’attacher à un instance de SQL Server de votre choix et ajouter du contenu malveillant à la base de données. Lorsque des bases de données sont détachées et attachées dans SQL Server, certaines autorisations sont définies sur les fichiers de données et les fichiers journaux qui limitent l’accès aux fichiers de base de données.

Étant donné qu’une base de données attachée à un instance de SQL Server ne peut pas être approuvée immédiatement, la base de données n’est pas autorisée à accéder aux ressources au-delà de l’étendue de la base de données tant que la base de données n’est pas explicitement marquée comme fiable. Par conséquent, si vous sauvegardez ou détachez une base de données avec l’option ACTIVÉ et que vous attachez ou restaurez la base de données à la même SQL Server instance ou à une autre, la TRUSTWORTHY propriété est définie sur OFF une fois l’attachement TRUSTWORTHY ou la restauration terminés. En outre, les modules conçus pour accéder aux ressources en dehors de la base de données et les assemblys avec le paramètre d’autorisation EXTERNAL_ACCESS et UNSAFE ont des exigences supplémentaires pour s’exécuter correctement.

Notes

Par défaut, le TRUSTWORTHY paramètre est défini sur ON pour la msdb base de données. Si vous remplacez ce paramètre par sa valeur par défaut, cela peut entraîner un comportement inattendu de SQL Server composants qui utilisent la msdb base de données.

Si le TRUSTWORTHY paramètre est activé et si le propriétaire de la base de données est membre d’un groupe disposant d’informations d’identification administratives, comme le groupe sysadmin, le propriétaire de la base de données peut alors créer et exécuter des assemblys non sécurisés susceptibles de compromettre la instance du SQL Server.

Informations complémentaires

Dans un environnement de fournisseur de services Internet (ISP) (par exemple, dans un service d’hébergement web), chaque client est autorisé à gérer sa propre base de données et n’a pas accès aux bases de données système et à d’autres bases de données utilisateur. Par exemple, les bases de données de deux sociétés concurrentes peuvent être hébergées par le même FAI et exister dans le même instance de SQL Server. Du code dangereux peut être ajouté à une base de données utilisateur lorsque la base de données est attachée à son instance d’origine et que le code est activé sur le instance du faip lors du déploiement de la base de données. Cette situation rend le contrôle de l’accès inter-bases de données crucial.

Si la même entité générale possède et gère chaque base de données, il n’est toujours pas recommandé d’établir une relation d’approbation avec une base de données, sauf si une fonctionnalité spécifique à l’application, telle qu’une communication Service Broker inter-bases de données, est requise. Une relation d’approbation entre les bases de données peut être établie en activant le chaînage de propriété entre bases de données ou en marquant une base de données comme approuvée par le instance à l’aide de la TRUSTWORTHY propriété . La is_trustworthy_on colonne de la sys.databases vue catalogue indique si une base de données a ses TRUSTWORTHY propriétés définies.

Les meilleures pratiques en matière de propriété et d’approbation de la base de données sont les suivantes :

  • Avoir des propriétaires distincts pour les bases de données. Toutes les bases de données ne doivent pas appartenir à l’administrateur système.
  • Limitez le nombre de propriétaires pour chaque base de données.
  • Attribuez l’approbation de manière sélective.
  • Laissez le paramètre de chaînage de propriété entre bases de données défini sur OFF, sauf si plusieurs bases de données sont déployées sur une seule unité.
  • Migrez l’utilisation vers l’approbation sélective au lieu d’utiliser la TRUSTWORTHY propriété .

L’exemple de code suivant peut être utilisé pour obtenir la liste des bases de données dont la propriété est définie sur ON et dont le TRUSTWORTHY propriétaire de la base de données appartient au rôle serveur sysadmin .

SELECT SUSER_SNAME(owner_sid) AS DBOWNER,
    d.name AS DATABASENAME
FROM sys.server_principals r
INNER JOIN sys.server_role_members m ON r.principal_id = m.role_principal_id
INNER JOIN sys.server_principals p ON p.principal_id = m.member_principal_id
INNER JOIN sys.databases 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

Vous pouvez exécuter la requête suivante pour déterminer la TRUSTWORTHY propriété de la msdb base de données :

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

Si cette requête indique que la propriété a la TRUSTWORTHY valeur OFF, vous pouvez exécuter la requête suivante pour définir la TRUSTWORTHY propriété sur ON.

ALTER DATABASE msdb SET TRUSTWORTHY ON;
GO

Étapes suivantes