Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Istanza gestita di SQL di Azure
La TRUSTWORTHY proprietà del database indica se l'istanza di SQL Server si fida del database e dei suoi contenuti. Di default, questa impostazione è OFF, ma puoi impostarla ON usando l'istruzione ALTER DATABASE .
Per esempio:
ALTER DATABASE AdventureWorks2025 SET TRUSTWORTHY ON;
Nota
Per impostare questa opzione, è necessario disporre CONTROL SERVER dell'autorizzazione o essere membro del ruolo predefinito del server sysadmin .
Per mitigare alcune minacce, lasciare impostata la TRUSTWORTHY proprietà del database su OFF. Queste minacce possono esistere come risultato dell'allegazione di un database che contiene uno dei seguenti oggetti:
Assembly malevoli con l'impostazione
EXTERNAL_ACCESSoUNSAFEpermessi. Per ulteriori informazioni, vedi sicurezza dell'integrazione CLR.Moduli dannosi definiti per funzionare come utenti altamente privilegiati. Per ulteriori informazioni, vedi EXECUTE AS clausola.
Entrambe le situazioni richiedono un certo grado di privilegio e sono protette da meccanismi appropriati quando vengono utilizzate nel contesto di un database già collegato a un'istanza di SQL Server. Tuttavia, se il database è offline, se si dispone dell’accesso al file di database è possibile collegarlo a un'istanza arbitraria di SQL Server e aggiungere contenuti dannosi al database. Quando i database vengono scollegati e collegati in SQL Server, sui dati e sui file di log vengono impostate determinate autorizzazioni che limitano l'accesso ai file di database.
Poiché un database collegato a un'istanza di SQL Server non può essere immediatamente affidabile, il database non può accedere a risorse oltre l'ambito del database finché il database non è esplicitamente contrassegnato come affidabile. Pertanto, se fai un backup o stacchi un database che ha questa TRUSTWORTHY opzione ON e lo colleghi o ripristini alla stessa o a un'altra istanza di SQL Server, la TRUSTWORTHY proprietà viene impostata su OFF quando l'aggregazione o il ripristino è completato. Inoltre, i moduli progettati per accedere a risorse esterne al database, e gli assembly con l'impostazione EXTERNAL_ACCESS o UNSAFE permission, hanno requisiti aggiuntivi per funzionare correttamente.
Nota
Di default, l'impostazione TRUSTWORTHY è impostata su ON per il msdb database. Se si modifica il valore predefinito di questa impostazione, i componenti di SQL Server che usano il database msdb potrebbero comportarsi in maniera imprevista.
Se imposti l'impostazione TRUSTWORTHY su ON, e se il proprietario del database è membro di un gruppo con credenziali amministrative, come il gruppo sysadmin, il proprietario del database può creare ed eseguire assembly non sicuri che possono compromettere l'istanza di SQL Server.
Commenti
In un ambiente di provider di servizi Internet (ISP), come un servizio di hosting web, ogni cliente gestisce il proprio database e non può accedere ai database di sistema o ad altri database di utenti. Ad esempio, un ISP può ospitare i database di due aziende concorrenti nella stessa istanza di SQL Server. Se associ un database utente alla sua istanza originale, potresti aggiungere codice pericoloso al database utente. Quando distribuisci il database sull'istanza dell'ISP, il codice diventa attivo. Questo scenario rende cruciale il controllo dell'accesso cross-database.
Se la stessa entità generale possiede e gestisce ogni database, non è comunque una buona pratica stabilire un rapporto di fiducia con un database a meno che una funzionalità specifica dell'applicazione, come la comunicazione tra server broker cross-database, non lo richieda. Si stabilisce una relazione di fiducia tra database abilitando la catena di proprietà cross-database, oppure marchiando un database come affidabile dall'istanza che utilizza la TRUSTWORTHY proprietà. La is_trustworthy_on colonna della sys.databases vista catalogo indica se un database ha le proprie TRUSTWORTHY proprietà impostate.
Le procedure consigliate per la proprietà e l'attendibilità del database includono quanto segue:
Disporre di proprietari distinti per i database. Non tutti i database devono essere di proprietà dell'amministratore di sistema.
Limitare il numero di proprietari per ogni database.
Conferire l'attendibilità in modo selettivo.
Mantieni impostata l'impostazione di catena di proprietà incrociata del database a
OFFmeno che tu non implementi più database come un'unica unità.Eseguire la migrazione dell’utilizzo al trust selettivo anziché usare la proprietà
TRUSTWORTHY.
Il seguente esempio Transact-SQL restituisce un elenco di database che hanno la TRUSTWORTHY proprietà impostata a ON e il cui proprietario del database appartiene al ruolo di server fisso sysadmin .
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
Il seguente esempio determina la TRUSTWORTHY proprietà del msdb database.
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
Se questa query mostra che la TRUSTWORTHY proprietà è impostata su OFF per msdb, puoi eseguire la seguente query per ripristinarla al valore predefinito di ON.
ALTER DATABASE msdb SET TRUSTWORTHY ON;
GO
Avviso di sicurezza
Quando la TRUSTWORTHY proprietà èON e il proprietario del database è un membro del ruolo di server fisso sysadmin, un membro del ruolo di database fisso db_owner può elevare i propri permessi a sysadmin. Entrambe le condizioni sono obbligatorie. Fai attenzione con la TRUSTWORTHY proprietà.
Il codice Transact-SQL seguente restituisce un elenco degli utenti del database in un database a cui viene assegnato il ruolo db_owner fisso nel database.
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