TRUSTWORTHY-Datenbankeigenschaft

Gilt für:SQL ServerAzure SQL Managed Instance

Die Datenbank-Eigenschaft TRUSTWORTHY gibt an, ob die Instanz von SQL Server der Datenbank und ihren Inhalten vertraut. Standardmäßig ist OFFdiese Einstellung , aber du kannst sie mit der Anweisung ALTER DATABASE auf ON setzen.

Beispiel:

ALTER DATABASE AdventureWorks2025 SET TRUSTWORTHY ON;

Hinweis

Um diese Option festzulegen, müssen Sie über CONTROL SERVER Berechtigung verfügen oder Mitglied der sysadmin festen Serverrolle sein.

Um bestimmte Bedrohungen zu mindern, lassen Sie die TRUSTWORTHY Datenbank-Eigenschaft auf OFF. Diese Bedrohungen können durch das Anhängen einer Datenbank bestehen, die eines der folgenden Objekte enthält:

  • Bösartige Assemblies mit der EXTERNAL_ACCESS oder-Berechtigungseinstellung UNSAFE . Weitere Informationen finden Sie unter CLR-Integrationssicherheit.

  • Bösartige Module, die als hochprivilegierte Nutzer ausgeführt werden. Weitere Informationen finden Sie unter EXECUTE AS Klausel.

Beide Situationen erfordern ein bestimmtes Maß an Privilegien und sind durch geeignete Mechanismen geschützt, wenn sie im Kontext einer Datenbank verwendet werden, die bereits an eine SQL Server-Instanz angeschlossen ist. Wenn die Datenbank jedoch offline genommen wird, können Sie, sofern Sie Zugriff auf die Datenbankdatei haben, diese an eine Instanz von SQL Server Ihrer Wahl anhängen und der Datenbank bösartige Inhalte hinzufügen. Wenn Datenbanken in SQL Server getrennt oder angefügt werden, 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 angeschlossen ist, nicht sofort vertrauenswürdig ist, darf die Datenbank nicht auf Ressourcen außerhalb des Anwendungsbereichs der Datenbank zugreifen, bis die Datenbank explizit als vertrauenswürdig markiert ist. Wenn Sie also eine Datenbank sichern oder trennen, die diese TRUSTWORTHY Option ON bietet, und die Datenbank an dieselbe oder eine andere SQL Server-Instanz anhängen oder wiederherstellen, wird die TRUSTWORTHY Eigenschaft auf OFF den Zeitpunkt gesetzt, an dem das Anhängen oder Wiederherstellen abgeschlossen ist. Außerdem haben Module, die darauf ausgelegt sind, Ressourcen außerhalb der Datenbank zu nutzen, sowie Assemblies mit entweder der oder UNSAFE der EXTERNAL_ACCESS Berechtigungseinstellung, zusätzliche Anforderungen für einen erfolgreichen Lauf.

Hinweis

Standardmäßig ist die Einstellung TRUSTWORTHY für die msdb Datenbank auf ON gesetzt. 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 Sie die Einstellung TRUSTWORTHY auf ONsetzen, und wenn der Besitzer der Datenbank Mitglied einer Gruppe mit administrativen Zugangsdaten ist, wie zum Beispiel der Systemadministrator-Gruppe, kann der Datenbankbesitzer dann unsichere Assemblies erstellen und ausführen, die die SQL Server-Instanz kompromittieren können.

Bemerkungen

In einer Internetdienstanbieter-(ISP)-Umgebung, wie einem Webhosting-Dienst, verwaltet jeder Kunde seine eigene Datenbank und kann nicht auf Systemdatenbanken oder andere Benutzerdatenbanken zugreifen. Zum Beispiel kann ein ISP die Datenbanken zweier konkurrierender Unternehmen in derselben SQL Server-Instanz hosten. Wenn Sie eine Benutzerdatenbank an ihre ursprüngliche Instanz anhängen, könnten Sie gefährlichen Code in die Benutzerdatenbank einfügen. Wenn du die Datenbank in der ISP-Instanz bereitstellst, wird der Code aktiv. Dieses Szenario macht die Kontrolle des Datenbankzugriffs entscheidend.

Wenn dieselbe allgemeine Einheit jede Datenbank besitzt und verwaltet, ist es dennoch keine gute Praxis, eine Vertrauensbeziehung zu einer Datenbank einzugehen, es sei denn, eine anwendungsspezifische Funktion wie die Datenbanküberschreitende Service Broker-Kommunikation erfordert dies. Man stellt eine Vertrauensbeziehung zwischen Datenbanken her, indem man Datenbank-Ownershiping aktiviert oder eine Datenbank mit der TRUSTWORTHY Eigenschaft als vertrauenswürdig markiert. Die Spalte is_trustworthy_on der sys.databases Katalogansicht gibt an, ob eine Datenbank deren TRUSTWORTHY Eigenschaftssatz besitzt.

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.

  • Gewähren Sie nur selektiv Vertrauen.

  • Behalte die Cross-DB-Ownershiping-Einstellung so eingestellt OFF , dass du nicht mehrere Datenbanken als eine Einheit bereitstellst.

  • Stellen Sie die Verwendung auf selektives Vertrauen um, anstelle der Verwendung der TRUSTWORTHY-Eigenschaft.

Das folgende Transact-SQL Beispiel liefert eine Liste von Datenbanken, deren Eigenschaft TRUSTWORTHY auf ON gesetzt ist und deren Datenbankbesitzer zur Rolle des Sysadmin-Festservers gehört.

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

Das folgende Beispiel bestimmt die TRUSTWORTHY Eigenschaft der msdb Datenbank.

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

Wenn diese Abfrage zeigt, dass die Eigenschaft TRUSTWORTHY auf OFF für msdbgesetzt ist, können Sie die folgende Abfrage ausführen, um sie auf ihren Standardwert von zurückzusetzen ON.

ALTER DATABASE msdb SET TRUSTWORTHY ON;
GO

Sicherheitswarnung

Wenn die TRUSTWORTHY Eigenschaft ist ONund der Datenbankbesitzer ein Mitglied der Sysadmin-Fixed-Server-Rolle ist, kann ein Mitglied der db_owner Fixed-Datenbank-Rolle seine Berechtigungen auf Sysadmin erhöhen. Beide Bedingungen sind erforderlich. Seien Sie vorsichtig mit dem Grundstück TRUSTWORTHY .

Der folgende Transact-SQL Code liefert eine Liste von Datenbankbenutzern in einer Datenbank, denen die db_owner feste Datenbankrolle zugewiesen ist.

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