Sdílet prostřednictvím


Vlastnost databáze TRUSTWORTHY

platí pro:SQL Serverazure SQL Managed Instance

Vlastnost TRUSTWORTHY databáze se používá k označení, zda instance SYSTÉMU SQL Server důvěřuje databázi a obsahu v ní. Ve výchozím nastavení je toto nastavení vypnuté, ale můžete ho nastavit na ZAPNUTO pomocí příkazu ALTER DATABASE . Například: ALTER DATABASE AdventureWorks2022 SET TRUSTWORTHY ON;.

Poznámka:

Chcete-li nastavit tuto možnost, musíte mít CONTROL SERVER oprávnění nebo být členem pevné role serveru správce systému .

Pokud chcete zmírnit určité hrozby, které mohou existovat v důsledku připojení databáze, která obsahuje jeden z následujících objektů, doporučujeme ponechat TRUSTWORTHY vlastnost databáze nastavenou na hodnotu VYPNUTO:

Obě situace vyžadují určitý stupeň oprávnění a jsou chráněny příslušnými mechanismy, pokud se používají v kontextu databáze, která je již připojena k instanci SQL Serveru. Pokud je však databáze přepnuta do offline režimu, můžete ji potenciálně připojit k instanci SQL Serveru podle vašeho výběru a přidat do databáze škodlivý obsah. Pokud jsou databáze odpojené a připojené v SQL Serveru, jsou určitá oprávnění nastavena na data a soubory protokolů, které omezují přístup k databázovým souborům.

Vzhledem k tomu, že databáze připojená k instanci SQL Serveru nemůže být okamžitě důvěryhodná, není přístup k prostředkům nad rámec databáze, dokud databáze není explicitně označena jako důvěryhodná. Proto pokud zálohujete nebo odpojete databázi, která má TRUSTWORTHY možnost ZAPNUTO, a databázi připojíte nebo obnovíte do stejné nebo jiné instance SQL Serveru, TRUSTWORTHY vlastnost je při připojení nebo obnovení nastavena na VYPNUTO. Moduly, které jsou navržené pro přístup k prostředkům mimo databázi a sestavení s nastavením oprávnění EXTERNAL_ACCESS a NEBEZPEČNÉ, mají další požadavky na úspěšné spuštění.

Poznámka:

Ve výchozím nastavení je pro databázi msdb nastavení TRUSTWORTHY zapnuté. Pokud toto nastavení změníte z výchozí hodnoty, může dojít k neočekávanému chování komponent SYSTÉMU SQL Server, které databázi používají msdb .

TRUSTWORTHY Pokud je nastavení zapnuté a vlastník databáze je členem skupiny, která má přihlašovací údaje správce, jako je skupina sysadmin, může pak vlastník databáze vytvořit a spustit nebezpečná sestavení, která můžou ohrozit instanci SQL Serveru.

Více informací

V prostředí poskytovatele internetových služeb (například ve službě pro hostování webů) může každý zákazník spravovat vlastní databázi a má omezený přístup k systémovým databázím a jiným uživatelským databázím. Například databáze dvou konkurenčních společností mohou být hostovány stejným isP a existují ve stejné instanci SQL Serveru. Nebezpečný kód může být přidán do uživatelské databáze, když je databáze připojena k původní instanci, a kód by byl povolen v instanci poskytovatele internetových služeb při nasazení databáze. Tato situace má zásadní význam pro řízení přístupu mezi databázemi.

Pokud stejná obecná entita vlastní a spravuje každou databázi, není stále vhodné vytvořit vztah důvěryhodnosti s databází, pokud není vyžadována funkce specifická pro aplikaci, jako je komunikace služby Service Broker mezi databázemi. Vztah důvěryhodnosti mezi databázemi lze vytvořit povolením řetězení vlastnictví mezi databázemi nebo označením databáze jako důvěryhodné pro instanci pomocí TRUSTWORTHY vlastnosti. Sloupec is_trustworthy_onsys.databases zobrazení katalogu označuje, jestli má databáze nastavenou vlastnost TRUSTWORTHY .

Mezi osvědčené postupy pro vlastnictví databáze a důvěryhodnost patří:

  • Mít samostatné vlastníky databází. Ne všechny databáze by měl vlastnit správce systému.
  • Omezte počet vlastníků pro každou databázi.
  • Udělte důvěru selektivně.
  • Nastavení řetězení vlastnictví napříč databázemi ponechte nastavené na VYPNUTO, pokud není na jedné jednotce nasazeno více databází.
  • Migrujte použití na selektivní důvěryhodnost místo použití vlastnosti TRUSTWORTHY.

Následující vzorový kód lze použít k získání seznamu databází, které mají vlastnost nastavenou TRUSTWORTHY na ZAPNUTO a jejíž vlastník databáze patří do role serveru 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

Spuštěním následujícího dotazu můžete určit TRUSTWORTHY vlastnost msdb databáze:

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

Pokud tento dotaz ukazuje, že TRUSTWORTHY vlastnost je nastavena na HODNOTU VYPNUTO, můžete spuštěním následujícího dotazu nastavit TRUSTWORTHY vlastnost na ZAPNUTO.

ALTER DATABASE msdb SET TRUSTWORTHY ON;
GO

Výstraha

Existují způsoby, jak povýšit uživatele s db_owner rolí na sysadmin, když je TRUSTWORTHY zapnuto. Při použití TRUSTWORTHY vlastnosti buďte opatrní. Následující kód SQL lze použít k získání seznamu uživatelů databáze v databázi, která má tuto db_owner roli.

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

Další kroky