Il TRUSTWORTHY
proprietà di un database (se impostato su ON
) dichiara essenzialmente a SQL Server che il codice contenuto all'interno di tale database e l'esecuzione in un contesto rappresentato, dovrebbe essere autorizzato a raggiungere l'esterno di tale database mantenendo il contesto di sicurezza rappresentato. Consente inoltre tutti Assemblee SQLCLR in quel database da impostare su EXTERNAL_ACCESS
e UNSAFE
, indipendentemente dal fatto che il codice raggiunga o meno l'esterno del server (esternamente significa:accesso alla rete, accesso al file system, accesso al registro, accesso all'ambiente, ecc.).
È un mezzo piuttosto generico per consentire ciò poiché copre tutto il codice all'interno del database. L'utilizzo di certificati e/o chiavi asimmetriche per firmare moduli, processi e/o assiemi, consente un controllo più granulare su quale codice dispone di quali autorizzazioni.
Impostazione di un database su TRUSTWORTHY
consente inoltre a qualsiasi processo che inizia in questo Database di raggiungere il livello del Server e/o attraverso altri Database. Normalmente un processo è confinato/messo in quarantena nel database da cui è iniziato. Se il database è di proprietà del login "sa", qualsiasi processo avviato in quel database e in esecuzione come "dbo" avrà effettivamente i privilegi "sa" (sì!).
Piuttosto che provare a descrivere qui, nella quantità di dettagli necessari per comunicare completamente le specifiche sulla rappresentazione, estendendo tale rappresentazione, firmando moduli, ecc., Raccomando di esaminare le seguenti risorse su questo argomento:
- PER FAVORE, per favore , per favore smetti di usare la rappresentazione, TRUSTWORTHY e il concatenamento di proprietà tra DB
- Linee guida per l'utilizzo dell'impostazione del database TRUSTWORTHY in SQL Server
- Estensione della rappresentazione del database utilizzando ESEGUI COME
Questo è un documento molto istruttivo che copre la maggior parte degli aspetti di questo argomento ed è anche referenziato nella pagina collegata sopra. - Scala per SQLCLR livello 4:sicurezza (assiemi ESTERNI e NON SICURI)
Questo è un articolo che ho scritto come parte di una serie su SQLCLR che contiene esempi che illustrano le differenze tra il metodo TRUSTWORTHY e il metodo Signed Assembly-based Login; È richiesta la registrazione gratuita.
Dovresti evitare di impostare il tuo database su TRUSTWORTHY
per quanto possibile. Se devi davvero avere chiamate multithreading / asincrone E se hai il codice sorgente e stai compilando l'assembly, non riesco a pensare a un motivo per usare SET TRUSTWORTHY ON
opzione. Dovresti invece firmare l'assembly con una password e usa i seguenti comandi per impostare il metodo preferito per consentire EXTERNAL_ACCESS
e UNSAFE
assemblee:
USE [master];
CREATE ASYMMETRIC KEY [ClrPermissionsKey]
AUTHORIZATION [dbo]
FROM EXECUTABLE FILE = 'C:\path\to\my\assembly.dll';
CREATE LOGIN [ClrPermissionsLogin]
FROM ASYMMETRIC KEY [ClrPermissionsKey];
GRANT UNSAFE ASSEMBLY TO [ClrPermissionsLogin];
Una volta che è a posto, puoi andare al database in cui è stato caricato ed eseguito il tuo assembly:
ALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;
Oppure potresti aver incluso WITH PERMISSION_SET = UNSAFE
alla fine del CREATE ASSEMBLY
comando.