Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Managed Instance
De TRUSTWORTHY databaseeigenschap wordt gebruikt om aan te geven of het exemplaar van SQL Server de database en de inhoud erin vertrouwt. Deze instelling is standaard UITGESCHAKELD, maar kan worden ingesteld op AAN met behulp van de ALTER DATABASE instructie. Voorbeeld: ALTER DATABASE AdventureWorks2022 SET TRUSTWORTHY ON;.
Opmerking
Als u deze optie wilt instellen, moet u gemachtigd zijn CONTROL SERVER of lid zijn van de vaste serverfunctie sysadmin .
U wordt aangeraden de TRUSTWORTHY databaseeigenschap uitgeschakeld te laten om bepaalde bedreigingen te beperken die kunnen bestaan als gevolg van het koppelen van een database die een van de volgende objecten bevat:
Schadelijke assembly's met een EXTERNAL_ACCESS- of ONVEILIGe machtigingsinstelling. Zie CLR Integration Security voor meer informatie.
Schadelijke modules die zijn gedefinieerd voor uitvoering als gebruikers met hoge bevoegdheden. Zie EXECUTE AS-component (Transact-SQL) voor meer informatie.
Beide situaties vereisen een specifieke mate van bevoegdheden en worden beveiligd door de juiste mechanismen wanneer ze worden gebruikt in de context van een database die al is gekoppeld aan een exemplaar van SQL Server. Als de database echter offline wordt gehaald, als u toegang hebt tot het databasebestand, kunt u deze mogelijk koppelen aan een exemplaar van SQL Server van uw keuze en schadelijke inhoud toevoegen aan de database. Wanneer databases worden losgekoppeld en gekoppeld in SQL Server, worden bepaalde machtigingen ingesteld op de gegevens en logboekbestanden die de toegang tot de databasebestanden beperken.
Omdat een database die is gekoppeld aan een exemplaar van SQL Server niet onmiddellijk kan worden vertrouwd, heeft de database geen toegang tot resources buiten het bereik van de database totdat de database expliciet is gemarkeerd als betrouwbaar. Als u een back-up maakt van een database met de TRUSTWORTHY-optie AAN of deze loskoppelt, en u de database koppelt of herstelt op hetzelfde of een ander SQL Server-exemplaar, wordt de TRUSTWORTHY-eigenschap op UIT ingesteld wanneer het koppelen of herstellen is voltooid. Modules die zijn ontworpen voor toegang tot resources buiten de database en assembly's met de machtigingsinstelling EXTERNAL_ACCESS en ONVEILIG, hebben ook extra vereisten om te worden uitgevoerd.
Opmerking
Standaard staat de instelling TRUSTWORTHY op AAN voor de msdb database. Als u deze instelling wijzigt van de standaardwaarde, kan dit leiden tot onverwacht gedrag door SQL Server-onderdelen die gebruikmaken van de msdb database.
Als de TRUSTWORTHY instelling is ingesteld op AAN en als de eigenaar van de database lid is van een groep met beheerdersreferenties, zoals de sysadmin-groep, kan de eigenaar van de database dan onveilige assembly's maken en uitvoeren die het exemplaar van de SQL Server kunnen in gevaar brengen.
Meer informatie
In een internetprovideromgeving (bijvoorbeeld in een webhostingservice) mag elke klant zijn eigen database beheren en is het niet mogelijk om toegang te krijgen tot systeemdatabases en andere gebruikersdatabases. De databases van twee concurrerende bedrijven kunnen bijvoorbeeld worden gehost door dezelfde internetprovider en bestaan in hetzelfde exemplaar van SQL Server. Gevaarlijke code kan worden toegevoegd aan een gebruikersdatabase wanneer de database is gekoppeld aan het oorspronkelijke exemplaar en de code wordt ingeschakeld op het internetprovider-exemplaar wanneer de database wordt geïmplementeerd. Deze situatie maakt het beheren van toegang tot meerdere databases cruciaal.
Als dezelfde algemene entiteit eigenaar is van en elke database beheert, is het nog steeds niet een goede gewoonte om een vertrouwensrelatie met een database tot stand te brengen, tenzij een toepassingsspecifieke functie, zoals een communicatie tussen databases, Service Broker, is vereist. Er kan een vertrouwensrelatie tussen databases tot stand worden gebracht door cross-database eigendomskoppeling in te schakelen of door een database als vertrouwd te markeren door de instantie met behulp van de TRUSTWORTHY eigenschap. De is_trustworthy_on kolom van de sys.databases catalogusweergave geeft aan of een database de TRUSTWORTHY eigenschap heeft ingesteld.
De aanbevolen procedures voor het eigendom en vertrouwen van de database zijn onder andere:
- Unieke eigenaren voor databases hebben. Niet alle databases moeten eigendom zijn van de systeembeheerder.
- Beperk het aantal eigenaren voor elke database.
- Vertrouwen selectief verlenen.
- Laat de instelling voor eigendomsketens voor meerdere databases ingesteld op UIT, tenzij meerdere databases in één eenheid worden geïmplementeerd.
- Migreer het gebruik naar selectief vertrouwen in plaats van de
TRUSTWORTHY-eigenschap te gebruiken.
Het volgende codevoorbeeld kan worden gebruikt voor het verkrijgen van een lijst met databases waarvoor de TRUSTWORTHY eigenschap is ingesteld op AAN en waarvan de database-eigenaar deel uitmaakt van de serverfunctie 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
U kunt de volgende query uitvoeren om de TRUSTWORTHY eigenschap van de msdb database te bepalen:
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
Als deze query laat zien dat de TRUSTWORTHY eigenschap is ingesteld op UIT, kunt u de volgende query uitvoeren om de TRUSTWORTHY eigenschap in te stellen op AAN.
ALTER DATABASE msdb SET TRUSTWORTHY ON;
GO
Waarschuwing
Er zijn manieren om een gebruiker met de db_owner rol te bevorderen tot een sysadmin wanneer de TRUSTWORTHY instelling op AAN wordt gezet. Wees voorzichtig bij het gebruik van de TRUSTWORTHY eigenschap. De volgende SQL-code kan worden gebruikt voor het verkrijgen van een lijst met databasegebruikers in een database waaraan de db_owner rol is verleend.
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