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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für