Protezione dall'accesso di codice e ADO.NET

La protezione di Windows permette di adottare una protezione delle risorse diversa a seconda del ruolo dell'utente. Un amministratore, ad esempio, dispone di autorizzazioni illimitate, mentre un utente Guest dispone di un accesso estremamente limitato. In .NET Framework è incluso un meccanismo di protezione denominato Protezione dall'accesso di codice che permette di proteggere ulteriormente l'applicazione. Quando si utilizza la protezione dall'accesso di codice, vengono adottate autorizzazioni differenziate in base alla provenienza del codice, derivanti dalla Zona dell'assembly e dalle autorizzazioni stabilite per quella zona nei criteri di protezione dall'accesso di codice. Il codice presente su un computer è ad esempio identificato come appartenente alla zona MyComputer. Il codice scaricato da un altro computer sull'Intranet locale è identificato come appartenente alla zona LocalIntranet. È possibile definire set di autorizzazioni diversi per ciascuna zona, così da applicare criteri di protezione più restrittivi per il codice esterno appartenente alla zona LocalIntranet e meno restrittivi per il codice appartenente alla zona MyComputer.

Le restrizioni da applicare per una particolare zona vengono individuate attraverso un determinato set di autorizzazioni. Con .NET Framework vengono forniti diversi set di autorizzazioni predefiniti a cui è possibile aggiungerne altri personalizzati da associare a una particolare zona.

I set di autorizzazioni sono solitamente divisi in tre categorie: attendibilità completa, attendibilità parziale e non attendibile. Con l'attendibilità completa si permette l'esecuzione del codice senza alcuna restrizione. Per impostazione predefinita tale attendibilità viene associata a origini del computer locale o aventi nome sicuro. Le zone considerate non attendibili non godono di alcuna autorizzazione. Il codice di tali zone può utilizzare solo funzionalità che non richiedono autorizzazioni. I set di autorizzazioni per attendibilità parziale sono costituiti da combinazioni ideali di autorizzazioni e restrizioni da utilizzarsi per zone specifiche.

Il provider di dati .NET Framework per OLE DB, il provider di dati .NET Framework per ODBC e il provider di dati .NET Framework per Oracle sono considerati idonei all'esecuzione in una zona con autorizzazioni per attendibilità completa. Ogni tentativo di eseguire il provider per OLE DB o ODBC in una zona con autorizzazioni inferiori a FullTrust (attendibilità completa) causa una SecurityException. I provider di dati per OLE DB, ODBC e Oracle devono disporre di autorizzazioni FullTrust sia in fase di collegamento che quando il codice viene eseguito. In .NET Framework versione 1.0 i provider di dati per OLE DB, ODBC e Oracle richiedevano autorizzazioni FullTrust solo in fase di collegamento.

Nota   Il provider di dati .NET Framework per SQL Server fornito con .NET Framework versione 1.0 deve essere eseguito con autorizzazioni FullTrust. Ogni tentativo di eseguire il provider per SQL Server in una zona con autorizzazioni inferiori a FullTrust (attendibilità completa) causa una SecurityException.

Il provider di dati .NET Framework per SQL Server può essere eseguito sia in una zona con set di autorizzazioni FullTrust, che in una zona con set di autorizzazioni per attendibilità parziale. Un'applicazione ad attendibilità parziale deve almeno disporre delle autorizzazioni minime di esecuzione e di client SQL. Per le zone ad attendibilità parziale, è possibile utilizzare gli attributi di autorizzazione SqlClient per restringere ulteriormente le funzionalità a disposizione del provider per SQL Server.

Nota   Al fine di aprire una SqlConnection con il debug SQL attivato, è necessario che le autorizzazioni di protezione concesse al provider di dati .NET Framework per SQL Server prevedano "Consenti chiamate ad assembly non gestiti" (SecurityPermission con il SecurityPermissionFlag UnmanagedCode).

Al fine di utilizzare le autorizzazioni SqlClient per una particolare zona, è necessario che un amministratore crei un set di autorizzazioni personalizzato e lo imposti come set di autorizzazioni per tale zona. I set di autorizzazioni predefiniti, come LocalIntranet, non possono essere modificati. Per aggiungere, ad esempio, autorizzazioni SqlClient a codice la cui zona sia LocalIntranet, un amministratore può copiare il set di autorizzazioni per LocalIntranet, rinominarlo in MyLocalIntranet, aggiungervi le autorizzazioni SqlClient, importare il set di autorizzazioni MyLocalIntranet utilizzando lo strumento criteri di protezione per l'accesso al codice (Caspol.exe) e impostare il set di autorizzazioni di LocalIntranet_Zone in MyLocalIntranet.

Nella tabella che segue vengono elencate le proprietà degli attributi di autorizzazione disponibili e il relativo impiego.

Proprietà SqlClientPermissionAttribute Descrizione
AllowBlankPassword Viene utilizzata per consentire o meno l'immissione di una password vuota in una stringa di connessione. Valori validi sono true, per consentire l'utilizzo di password vuote, e false, per impedire l'utilizzo di password vuote.
ConnectionString Viene utilizzata per identificare una stringa di connessione ammessa. È possibile identificare più stringhe di connessione. È anche possibile definire ulteriori restrizioni per le stringhe di connessione utilizzando KeyRestrictions.

Si raccomanda di non includere ID utente e password nelle stringhe di connessione.

In questa versione non è possibile cambiare le restrizioni relative alle stringhe di connessione utilizzando lo strumento di configurazione di .NET Framework.

KeyRestrictions Viene utilizzata per identificare i parametri delle stringhe di connessione ammessi e non ammessi. I parametri delle stringhe di connessione hanno la forma <nome parametro>=. Per specificare più parametri, separarli con un punto e virgola (;). Con la proprietà KeyRestrictionBehavior è possibile specificare se i parametri delle stringhe di connessione qui elencati sono gli unici parametri aggiuntivi ammessi o gli unici non ammessi.

Se non viene specificata alcuna KeyRestrictions e la proprietà KeyRestrictionBehavior è impostata su AllowOnly, non sono ammessi parametri aggiuntivi per la stringa di connessione.

Se non viene specificata alcuna KeyRestrictions e la proprietà KeyRestrictionBehavior è impostata su PreventUsage, non sono ammessi parametri aggiuntivi per la stringa di connessione.

KeyRestrictionBehavior Viene utilizzata per determinare se l'elenco di parametri della stringa di connessione identificato dalla proprietà KeyRestrictions riporta gli unici parametri aggiuntivi ammessi (AllowOnly) o gli unici non ammessi (PreventUsage). L'impostazione predefinita è AllowOnly.

La seguente impostazione delle proprietà definisce la stringa di connessione Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind; come unica stringa di connessione utilizzabile.

<add ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />

Per attivare la stringa di connessione sopra riportata attivando al contempo anche l'uso delle opzioni di stringa di connessione Encrypt e Packet Size, impedendo però l'utilizzo di ogni altra opzione di stringa di connessione, utilizzare:

<add ConnectionString=" Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
KeyRestrictions="Encrypt=;Packet Size=;"
KeyRestrictionBehavior="AllowOnly" />

Per attivare la stringa di connessione sopra riportata e permettere al contempo l'utilizzo di ogni altro parametro di connessione, fatta eccezione per User Id, Password e Persist Security Info, utilizzare:

<add ConnectionString=" Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
KeyRestrictions="User Id=;Password=;Persist Security Info=;"
KeyRestrictionBehavior="PreventUsage" />

Le autorizzazioni riportate di seguito consentono di accedere sia a localhost che a MySqlServer utilizzando la protezione integrata. Le stringhe di connessione possono anche contenere i parametri Initial Catalog, Connection Timeout, Encrypt e Packet Size. Tutti gli altri parametri di stringa di connessione sono vietati.

<add ConnectionString="Data Source=localhost;Integrated Security=SSPI;"
     KeyRestrictions="Initial Catalog;Connection Timeout=;Encrypt=;Packet Size=;" 
     KeyRestrictionBehavior="AllowOnly" />
<add ConnectionString="Data Source=MySqlServer;Integrated Security=SSPI;"
     KeyRestrictions="Initial Catalog;Connection Timeout=;Encrypt=;Packet Size=;" 
     KeyRestrictionBehavior="AllowOnly" />

Set di autorizzazioni di esempio

Di seguito è riportato un set di autorizzazioni di esempio per il provider di dati .NET Framework per SQL Server in uno scenario ad attendibilità parziale. Per informazioni sulla creazione di set di autorizzazioni personalizzati, vedere Configurazione dei set di autorizzazioni tramite Caspol.exe.

<PermissionSet class="System.Security.NamedPermissionSet"
               version="1"
               Name="MyLocalIntranet"
               Description="Custom permission set given to applications on the local intranet">

   <IPermission class="System.Data.SqlClient.SqlClientPermission, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                version="1"
                AllowBlankPassword="False">
      <add ConnectionString="Data Source=localhost;Integrated Security=SSPI;"
           KeyRestrictions="Initial Catalog;Connection Timeout=;Encrypt=;Packet Size=;" 
           KeyRestrictionBehavior="AllowOnly" />
   </IPermission>

</PermissionSet>

Vedere anche

Scrittura di codice ADO.NET protetto | Protezione per l'accesso al codice | Strumento di configurazione di .NET Framework (Mscorcfg.msc)