TRUSTWORTHY-Datenbankeigenschaft

Gilt für:SQL ServerAzure SQL Managed Instance

Die TRUSTWORTHY Datenbankeigenschaft wird verwendet, um anzugeben, ob die Instanz von SQL Server der Datenbank und dem darin enthaltenen Inhalt vertraut. Diese Einstellung ist standardmäßig DEAKTIVIERT, kann jedoch mithilfe der ALTER DATABASE Anweisung auf EIN festgelegt werden. Beispiel: ALTER DATABASE AdventureWorks2022 SET TRUSTWORTHY ON;

Hinweis

Um diese Option festlegen zu können, müssen Sie Mitglied der festen Serverrolle sysadmin sein.

Es wird empfohlen, die TRUSTWORTHY Datenbankeigenschaft auf OFF festzulegen, um bestimmte Bedrohungen zu minimieren, die durch das Anfügen einer Datenbank mit einem der folgenden Objekte vorhanden sein können:

  • Bösartige Assemblys mit einer EXTERNAL_ACCESS- oder UNSAFE-Berechtigungseinstellung. Weitere Informationen finden Sie unter CLR Integration Security.

  • Bösartige Module, die für die Ausführung als Benutzer mit hohen Privilegien definiert wurden. Weitere Informationen finden Sie unter EXECUTE AS-Klausel (Transact-SQL).

Beide Situationen erfordern ein bestimmtes Maß an Berechtigungen und sind durch geeignete Mechanismen geschützt, wenn sie im Kontext einer Datenbank verwendet werden, die bereits an eine Instanz von SQL Server angefügt ist. Wenn die Datenbank jedoch offline geschaltet wird, können Sie sie potenziell an eine Instanz von SQL Server Ihrer Wahl anfügen und der Datenbank schädliche Inhalte hinzufügen. Wenn Datenbanken in SQL Server getrennt und angefügt sind, werden bestimmte Berechtigungen für die Daten- und Protokolldateien festgelegt, die den Zugriff auf die Datenbankdateien einschränken.

Da eine Datenbank, die an eine Instanz von SQL Server angefügt ist, nicht sofort vertrauenswürdig sein kann, darf die Datenbank erst dann über den Bereich der Datenbank hinaus auf Ressourcen zugreifen, wenn die Datenbank explizit als vertrauenswürdig gekennzeichnet ist. Wenn Sie daher eine Datenbank sichern oder trennen, die die TRUSTWORTHY Option EIN hat und Sie die Datenbank an die gleiche oder eine andere SQL Server-Instanz anfügen oder wiederherstellen, wird die Eigenschaft auf OFF festgelegt, wenn das TRUSTWORTHY Anfügen oder Wiederherstellen abgeschlossen ist. Module, die für den Zugriff auf Ressourcen außerhalb der Datenbank konzipiert sind, und Assemblys mit der Einstellung für EXTERNAL_ACCESS- und UNSAFE-Berechtigungen verfügen außerdem über zusätzliche Anforderungen, um erfolgreich ausgeführt zu werden.

Hinweis

Standardmäßig ist die TRUSTWORTHY Einstellung für die msdb Datenbank auf "EIN" festgelegt. Wenn Sie diese Einstellung von ihrem Standardwert ändern, kann dies zu unerwartetem Verhalten durch SQL Server-Komponenten führen, die die msdb Datenbank verwenden.

Wenn die TRUSTWORTHY Einstellung auf EIN festgelegt ist und der Besitzer der Datenbank Mitglied einer Gruppe ist, die über Administratoranmeldeinformationen verfügt, z. B. die Sysadmin-Gruppe, kann der Datenbankbesitzer dann unsichere Assemblys erstellen und ausführen, die die Instanz von SQL Server gefährden können.

Weitere Informationen

In einer Internetdienstanbieterumgebung (INTERNET Service Provider, ISP) (z. B. in einem Webhostingdienst) ist jeder Kunde berechtigt, seine eigene Datenbank zu verwalten und auf den Zugriff auf Systemdatenbanken und andere Benutzerdatenbanken beschränkt. Beispielsweise könnten die Datenbanken von zwei konkurrierenden Unternehmen von demselben ISP gehostet werden und in derselben Instanz von SQL Server vorhanden sein. Gefährlicher Code könnte einer Benutzerdatenbank hinzugefügt werden, wenn die Datenbank an die ursprüngliche Instanz angefügt wird, und der Code wird bei der Bereitstellung der Datenbank auf der ISP-Instanz aktiviert. Diese Situation macht die Steuerung des datenbankübergreifenden Zugriffs entscheidend.

Wenn die gleiche allgemeine Entität jede Datenbank besitzt und verwaltet, empfiehlt es sich immer noch nicht, eine Vertrauensstellung mit einer Datenbank herzustellen, es sei denn, ein anwendungsspezifisches Feature, z. B. eine datenbankübergreifende Service Broker-Kommunikation, ist erforderlich. Eine Vertrauensstellung zwischen Datenbanken kann durch Aktivieren der datenbankübergreifenden Besitzverkettung oder durch Markieren einer Datenbank mithilfe der TRUSTWORTHY Eigenschaft als vertrauenswürdig festgelegt werden. Die is_trustworthy_on Spalte der sys.databases Katalogansicht gibt an, ob eine Datenbank über den TRUSTWORTHY Eigenschaftensatz verfügt.

Zu den bewährten Methoden für den Datenbankbesitz und die Vertrauensstellung gehören die folgenden:

  • Weisen Sie unterschiedliche Besitzer für Datenbanken auf. Nicht alle Datenbanken sollten dem Systemadministrator gehören.
  • Beschränken Sie die Anzahl der Besitzer für jede Datenbank.
  • Vertrauen sie selektiv.
  • Lassen Sie die Einstellung für die domänenübergreifende Besitzverkettung auf OFF festgelegt, es sei denn, mehrere Datenbanken werden in einer einzigen Einheit bereitgestellt.
  • Migrieren Sie die Verwendung zu selektiver Vertrauensstellung, anstatt die TRUSTWORTHY Eigenschaft zu verwenden.

Das folgende Codebeispiel kann verwendet werden, um eine Liste von Datenbanken abzurufen, die die TRUSTWORTHY Eigenschaft auf ON festgelegt haben und deren Datenbankbesitzer zur Sysadmin-Serverrolle gehört.

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

Sie können die folgende Abfrage ausführen, um die TRUSTWORTHY Eigenschaft der msdb Datenbank zu ermitteln:

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

Wenn diese Abfrage anzeigt, dass die TRUSTWORTHY Eigenschaft auf OFF festgelegt ist, können Sie die folgende Abfrage ausführen, um die TRUSTWORTHY Eigenschaft auf EIN festzulegen.

ALTER DATABASE msdb SET TRUSTWORTHY ON;
GO

Warnung

Es gibt Möglichkeiten, einen Benutzer mit der db_owner Rolle zu erhöhen, um sysadmin eine Einstellung auf EIN festzulegen TRUSTWORTHY . Achten Sie bei der Verwendung der TRUSTWORTHY Eigenschaft auf Vorsicht. Der folgende SQL-Code kann verwendet werden, um eine Liste von Datenbankbenutzern in einer Datenbank abzurufen, die der db_owner Rolle gewährt wird.

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  
JOIN sys.database_principals AS roles  
   ON database_role_members.role_principal_id = roles.principal_id  
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

Nächste Schritte