TRUSTWORTHY-Datenbankeigenschaft
Gilt für: SQL Server
Azure SQL Managed Instance
Mit der Datenbankeigenschaft TRUSTWORTHY
wird angegeben, ob die SQL Server-Instanz die Datenbank und ihre Inhalte als vertrauenswürdig einstuft. Standardmäßig ist diese Einstellung OFF; sie kann jedoch mithilfe der ALTER DATABASE
-Anweisung auf ON 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 zu setzen, um bestimmte Bedrohungen zu entschärfen, die sich aus dem Anhängen einer Datenbank ergeben können, die eines der folgenden Objekte enthält:
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).
In beiden Fällen ist eine bestimmte Berechtigungsstufe erforderlich, und es liegt ein dementsprechender Schutz durch geeignete Mechanismen vor, wenn diese im Kontext einer Datenbank verwendet werden, die bereits an eine Instanz von SQL Server angefügt 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 einer Instanz von SQL Server angefügt wird, nicht sofort vertrauenswürdig ist, darf sie erst auf Ressourcen außerhalb des Bereichs der Datenbank zugreifen, wenn sie explizit als vertrauenswürdig markiert wurde. Wenn Sie eine Datenbank sichern oder trennen, bei der die Option TRUSTWORTHY
auf ON festgelegt ist, und Sie die Datenbank auf derselben oder einer anderen SQL Server-Instanz anschließen oder darauf wiederherstellen, wird die TRUSTWORTHY
-Eigenschaft auf OFF gesetzt, wenn der Anschluss oder die Wiederherstellung abgeschlossen ist. Für Module, die für den Zugriff auf Ressourcen außerhalb der Datenbank konzipiert wurden, und Assemblys mit der EXTERNAL_ACCESS- bzw. UNSAFE-Berechtigungseinstellung müssen zusätzliche Anforderungen erfüllt werden, damit diese erfolgreich ausgeführt werden.
Hinweis
Standardmäßig ist die TRUSTWORTHY
-Einstellung für die msdb
-Datenbank auf ON 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 ON festgelegt ist und der Besitzer der Datenbank Mitglied einer Gruppe ist, die über Administratoranmeldeinformationen verfügt, z. B. der Gruppe sysadmin, kann der Datenbankbesitzer unsichere Assemblies erstellen und ausführen, die die Instanz des SQL Servers gefährden können.
Weitere Informationen
In einer Mobilfunkanbieterumgebung (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 zweier konkurrierender Unternehmen beim selben Internetanbieter gehostet werden und in derselben Instanz von SQL Server vorhanden sein. Gefährlicher Code könnte zu einer Benutzerdatenbank hinzugefügt werden, wenn die Datenbank an ihre ursprüngliche Instanz angehängt wird, und der Code würde auf der ISP-Instanz aktiviert werden, wenn die Datenbank bereitgestellt wird. In dieser Situation ist die Kontrolle des datenbankübergreifenden Zugriffs von entscheidender Bedeutung.
Auch wenn jede Datenbank von derselben allgemeinen Einheit verwaltet wird, ist es nicht sinnvoll, eine Vertrauensbeziehung zu einer Datenbank aufzubauen, es sei denn, eine anwendungsspezifische Funktion, wie 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
-Katalogsicht 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übergreifenden Besitzketten 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 einem sysadmin
zu erheben, wenn TRUSTWORTHY
auf ON gesetzt wird. Seien Sie vorsichtig bei der Verwendung der Eigenschaft TRUSTWORTHY
. 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