Condividi tramite


Accettazione di chiamanti parzialmente attendibili

La condivisione delle librerie di codice è un scenario comune quando si utilizza l'integrazione con Common Language Runtime (CLR), in cui a un assembly che contiene un tipo definito dall'utente, una stored procedure, una funzione definita dall'utente, una funzione di aggregazione definita dall'utente, un trigger o una classe di utilità spesso accede un altro assembly o un'altra applicazione. Le librerie di codice per le quali è prevista la condivisione da parte di più applicazioni devono essere firmate con un nome sicuro.

Solo le applicazioni considerate completamente attendibili dal sistema di protezione dall'accesso di codice runtime possono accedere a un assembly del codice gestito condiviso non contrassegnato in modo esplicito dall'attributo System.Security.AllowPartiallyTrustedCallers. Un assembly parzialmente attendibile, ovvero registrato in SQL Server con il set di autorizzazioni SAFE o EXTERNAL_ACCESS, che tenta di accedere a un assembly firmato con nome sicuro senza questo attributo determina la generazione di una System.Security.SecurityException. Il messaggio di errore visualizzato è simile al seguente:

Msg 6522, Level 16, State 1, Procedure usp_RSTest, Line 0
A .NET Framework error occurred during execution of user defined
routine or aggregate 'usp_RSTest':  System.Security.SecurityException: That assembly does not allow partially trusted callers.
System.Security.SecurityException: at
System.Security.CodeAccessSecurityEngine.ThrowSecurityException(
Assembly asm, PermissionSet granted,PermissionSet refused,
RuntimeMethodHandle rmh, SecurityAction action, Object demand,
IPermission permThatFailed) at
Microsoft.Samples.SqlServer.TestResultSet.Test()

È consigliabile contrassegnare tutti gli assembly registrati in SQL Server, ad eccezione di quelli aggiunti alla Global Assembly Cache, con l'attributo AllowPartiallyTrustedCallers in modo che gli assembly caricati da SQL Server possono accedere l'un all'altro. È importante sottoporre gli assembly da aggiungere alla Global Assembly Cache ad un accurato controllo di sicurezza prima dell'aggiunta dell'attributo AllowPartiallyTrustedCallers, in quanto l'assembly diventerebbe quindi disponibile ai chiamanti parzialmente attendibili da contesti imprevisti. Un assembly non deve essere mai reso completamente attendibile, ovvero registrato con il set di autorizzazioni UNSAFE in SQL Server.

Per ulteriori informazioni, vedere la sezione relativa all'uso delle librerie da codice parzialmente attendibile nel Software Development Kit di .NET Framework.

Esempio

Si supponga di disporre di una classe di utilità che risulta utile per molte applicazioni di integrazione con CLR del lato server, ad esempio una classe che rappresenta i risultati della chiamata a una query. Per abilitare la condivisione di questo componente, questa classe di utilità viene inserita in un assembly separato a cui viene quindi fatto riferimento dai vari altri assembly che contengono oggetti dell'integrazione con CLR. Poiché questa classe di utilità è utilizzata in molte applicazioni server diverse, essa viene sottoposta a un'attenta revisione e gli eventuali problemi legati alla sicurezza vengono risolti. L'attributo AllowPartiallyTrustedCallers viene quindi applicato all'assembly che contiene la classe di utilità, in modo che gli oggetti dell'integrazione con CLR contenuti negli assembly contrassegnati con i set di autorizzazioni SAFE o EXTERNAL_ACCESS possano utilizzare i metodi e la classe di utilità, anche se sono in un assembly separato. Per un esempio di utilizzo dell'attributo AllowPartiallyTrustedCallers, vedere l'esempio del set dei risultatidisponibile in CodePlex; per ulteriori informazioni, vedere Esempi del Motore di database di SQL Server.

Cronologia modifiche

Aggiornamento del contenuto

Aggiornamento del collegamento all'esempio.