Considerazioni sulla sicurezza (Entity Framework)Security Considerations (Entity Framework)

In questo argomento vengono illustrate alcune considerazioni sulla sicurezza che riguardano in modo particolare lo sviluppo, la distribuzione e l'esecuzione di applicazioni Entity FrameworkEntity Framework.This topic describes security considerations that are specific to developing, deploying, and running Entity FrameworkEntity Framework applications. È consigliabile inoltre seguire le raccomandazioni relative alla creazione di applicazioni .NET Framework.NET Framework protette.You should also follow recommendations for creating secure .NET Framework.NET Framework applications. Per ulteriori informazioni, vedere Cenni preliminari sulla sicurezza.For more information, see Security Overview.

Considerazioni generali sulla sicurezzaGeneral Security Considerations

Le considerazioni sulla sicurezza sono valide per tutte le applicazioni che usano Entity FrameworkEntity Framework.The following security considerations apply to all applications that use the Entity FrameworkEntity Framework.

Usare solo provider delle origini dati attendibili.Use only trusted data source providers.

Per comunicare con l'origine dati, un provider deve eseguire le operazioni seguenti:To communicate with the data source, a provider must do the following:

  • Ricevere la stringa di connessione da Entity FrameworkEntity Framework.Receive the connection string from the Entity FrameworkEntity Framework.

  • Convertire l'albero dei comandi nel linguaggio di query nativo dell'origine dati.Translate the command tree to the data source's native query language.

  • Assemblare e restituire i set di risultati.Assemble and return result sets.

Durante l'operazione di accesso, le informazioni basate sulla password dell'utente vengono passate al server tramite le librerie di rete dell'origine dati sottostante.During the logon operation, information that is based on the user password is passed to the server through the network libraries of the underlying data source. Un provider malintenzionato può rubare le credenziali utente, generare query dannose o manomettere il set di risultati.A malicious provider can steal user credentials, generate malicious queries, or tamper with the result set.

Crittografare la connessione per proteggere i dati riservati.Encrypt your connection to protect sensitive data.

Entity FrameworkEntity Framework non gestisce direttamente la crittografia dei dati.The Entity FrameworkEntity Framework does not directly handle data encryption. Se gli utenti accedono ai dati su una rete pubblica, l'applicazione deve stabilire una connessione crittografata all'origine dati per aumentare la sicurezza.If users access data over a public network, your application should establish an encrypted connection to the data source to increase security. Per altre informazioni, vedere la documentazione relativa alla sicurezza dell'origine dati.For more information, see the security-related documentation for your data source. Per un'origine dati di SQL Server, vedere crittografia delle connessioni a SQL Server.For a SQL Server data source, see Encrypting Connections to SQL Server.

Proteggere la stringa di connessione.Secure the connection string.

La protezione dell'accesso all'origine dati è uno dei principali obiettivi da raggiungere quando si imposta la sicurezza di un'applicazione.Protecting access to your data source is one of the most important goals when securing an application. Una stringa di connessione presenta una potenziale vulnerabilità se non è protetta o se viene costruita in modo improprio.A connection string presents a potential vulnerability if it is not secured or if it is improperly constructed. Se le informazioni di connessione vengono archiviate in testo normale o mantenute in memoria, si rischia di compromettere l'intero sistema.When you store connection information in plain text or persist it in memory, you risk compromising your entire system. Di seguito sono riportati i metodi di protezione delle stringhe di connessione consigliati.The following are the recommended methods for securing connection strings:

  • Usare l'autenticazione di Windows con un'origine dati SQL Server.Use Windows Authentication with a SQL Server data source.

    Quando si usa l'autenticazione di Windows per connettersi a un'origine dati SQL Server, la stringa di connessione non contiene informazioni relative all'accesso e alla password.When you use Windows Authentication to connect to a SQL Server data source, the connection string does not contain logon and password information.

  • Crittografare le sezioni dei file di configurazione tramite la configurazione protetta.Encrypt configuration file sections using protected configuration.

    In ASP.NET è disponibile una nuova funzionalità, la configurazione protetta, che consente di crittografare le informazioni riservate in un file di configurazione.ASP.NET provides a feature called protected configuration that enables you to encrypt sensitive information in a configuration file. Sebbene sia stata progettata principalmente per ASP.NET, può essere usata anche per crittografare sezioni dei file di configurazione delle applicazioni Windows.Although primarily designed for ASP.NET, you can also use protected configuration to encrypt sections of configuration files in Windows applications. Per una descrizione dettagliata delle nuove funzionalità di configurazione protetta, vedere crittografia configurazione informazioni tramite configurazione protetta.For a detailed description of the new protected configuration capabilities, see Encrypting Configuration Information Using Protected Configuration.

  • Archiviare le stringhe di connessione in file di configurazione protetti.Store connection strings in secured configuration files.

    Le stringhe di connessione non devono mai essere incorporate nel codice sorgente.You should never embed connection strings in your source code. La possibilità di archiviarle nei file di configurazione elimina la necessità di incorporarle nel codice.You can store connection strings in configuration files, which eliminates the need to embed them in your application's code. Per impostazione predefinita, la procedura guidata Entity Data Model archivia le stringhe di connessione nel file di configurazione dell'applicazione.By default, the Entity Data Model Wizard stores connection strings in the application configuration file. Per impedire accessi non autorizzati, è necessario proteggere tale file.You must secure this file to prevent unauthorized access.

  • Usare i generatori di stringhe di connessione durante la creazione dinamica delle connessioni.Use connection string builders when dynamically creating connections.

    Se è necessario costruire stringhe di connessione in fase di runtime, usare la classe EntityConnectionStringBuilder.If you must construct connection strings at runtime, use the EntityConnectionStringBuilder class. Questa classe del generatore di stringhe consente di impedire attacchi injection delle stringhe di connessione attraverso la convalida e l'esecuzione dell'escape delle informazioni di input non valide.This string builder class helps prevent connection string injection attacks by validating and escaping invalid input information. Per ulteriori informazioni, vedere procedura: compilare una stringa di connessione EntityConnection.For more information, see How to: Build an EntityConnection Connection String. Usare la classe di generatori di stringa appropriata per costruire la stringa di connessione origine dati che fa parte di Entity FrameworkEntity Framework stringa di connessione.Also use the appropriate string builder class to construct the data source connection string that is part of the Entity FrameworkEntity Framework connection string. Per informazioni sui generatori di stringhe di connessione per il provider ADO.NET, vedere generatori di stringhe di connessione.For information about connection string builders for ADO.NET providers, see Connection String Builders.

Per altre informazioni, vedere Protezione delle informazioni di connessione.For more information, see Protecting Connection Information.

Non esporre un oggetto EntityConnection a utenti non attendibili.Do not expose an EntityConnection to untrusted users.

Un oggetto EntityConnection espone la stringa di connessione della connessione sottostante.An EntityConnection object exposes the connection string of the underlying connection. Un utente che dispone dell'accesso a un oggetto EntityConnection può modificare anche l'oggetto ConnectionState della connessione sottostante.A user with access to an EntityConnection object can also change the ConnectionState of the underlying connection. La classe EntityConnection non è thread-safe.The EntityConnection class is not thread safe.

Non passare connessioni al di fuori del contesto di sicurezza.Do not pass connections outside the security context.

Dopo aver stabilito una connessione, non è possibile passarla al di fuori del contesto di sicurezza.After a connection has been established, you must not pass it outside the security context. Un thread con l'autorizzazione ad aprire una connessione, ad esempio, non deve archiviare la connessione in un percorso globale.For example, one thread with permission to open a connection should not store the connection in a global location. Da questo percorso, infatti, potrebbe essere usata da uno script dannoso senza un'autorizzazione esplicitamente concessa.If the connection is available in a global location, then another malicious thread can use the open connection without having that permission explicitly granted to it.

Tenere presente che le informazioni relative all'accesso e alla password possono essere visibili in un'immagine della memoria.Be aware that logon information and passwords may be visible in a memory dump.

Quando nella stringa di connessione vengono fornite informazioni relative all'accesso e alla password della stringa di connessione, tali informazioni vengono conservate in memoria fino a quando le risorse non sono richieste dal processo di Garbage Collection.When data source logon and password information is supplied in the connection string, this information is maintained in memory until garbage collection reclaims the resources. Diventa quindi impossibile determinare quando una stringa della password non è più in memoria.This makes it impossible to determine when a password string is no longer in memory. Se un'applicazione si arresta in modo anomalo, è possibile che un file di immagine della memoria contenga informazioni sulla sicurezza riservate che possono quindi diventare visibili all'utente che esegue l'applicazione e a qualsiasi utente con accesso amministrativo al computer.If an application crashes, a memory dump file may contain sensitive security information, and the user running the application and any user with administrative access to the computer can view the memory dump file. Usare l'autenticazione di Windows per le connessioni a Microsoft SQL Server.Use Windows Authentication for connections to Microsoft SQL Server.

Concedere agli utenti solo le autorizzazioni necessarie nell'origine dati.Grant users only the necessary permissions in the data source.

Un amministratore dell'origine dati deve concedere solo le autorizzazioni necessarie agli utenti.A data source administrator should grant only the necessary permissions to users. Sebbene Entity SQLEntity SQL non supporti istruzioni DML che modificano i dati, ad esempio INSERT, UPDATE o DELETE, gli utenti possono comunque accedere alla connessione all'origine dati.Even though Entity SQLEntity SQL does not support DML statements that modify data, such as INSERT, UPDATE, or DELETE, users can still access the connection to the data source. Un utente malintenzionato potrebbe usare questa connessione per eseguire istruzioni DML nel linguaggio nativo dell'origine dati.A malicious user could use this connection to execute DML statements in the native language of the data source.

Eseguire le applicazioni con le autorizzazioni minime.Run applications with the minimum permissions.

Quando si consente l'esecuzione di un'applicazione gestita con autorizzazione di attendibilità totale, .NET Framework.NET Framework non limita l'accesso dell'applicazione al computer.When you allow a managed application to run with full-trust permission, the .NET Framework.NET Framework does not limit the application's access to your computer. Questo potrebbe rendere vulnerabile l'applicazione e compromettere l'intero sistema.This may enable a security vulnerability in your application to compromise the entire system. Per usare la sicurezza dall'accesso di codice e gli altri meccanismi di sicurezza di .NET Framework.NET Framework, è necessario eseguire le applicazioni tramite autorizzazioni parzialmente attendibili e con il set minimo di autorizzazioni necessarie a consentirne il funzionamento.To use code access security and other security mechanisms in the .NET Framework.NET Framework, you should run applications by using partial-trust permissions and with the minimum set of permissions that are needed to enable the application to function. Le autorizzazioni di accesso al codice seguenti sono le autorizzazioni minime necessarie per l'applicazione Entity FrameworkEntity Framework:The following code access permissions are the minimum permissions your Entity FrameworkEntity Framework application needs:

Per altre informazioni, vedere Code Access Security and ADO.NET.For more information, see Code Access Security and ADO.NET.

Non installare applicazioni non attendibili.Do not install untrusted applications.

Entity FrameworkEntity Framework non applica autorizzazioni di sicurezza e richiamerà qualsiasi codice dell'oggetto dati fornito dall'utente in corso, indipendentemente dall'attendibilità.The Entity FrameworkEntity Framework does not enforce any security permissions and will invoke any user-supplied data object code in process regardless of whether it is trusted or not. Assicurarsi che l'autenticazione e l'autorizzazione del client vengano eseguite dall'archivio dati e dall'applicazione.Ensure that authentication and authorization of the client is performed by the data store and by your application.

Limitare l'accesso a tutti i file di configurazione.Restrict access to all configuration files.

Un amministratore deve limitare l'accesso in scrittura a tutti i file che specificano la configurazione per un'applicazione, inclusi Enterprisesec, Security. config, Machine. conf e i file di configurazione dell'applicazione < applicazione >. exe. config.An administrator must restrict write access to all files that specify configuration for an application, including to enterprisesec.config, security.config, machine.conf, and the application configuration file <application>.exe.config.

Il nome invariante del provider può essere modificato in app.config. L'applicazione client deve accedere al provider sottostante tramite il modello di factory di provider standard usando un nome sicuro.The provider invariant name is modifiable in the app.config. The client application must take responsibility for accessing the underlying provider through the standard provider factory model by using a strong name.

Limitare le autorizzazioni ai file di modello e di mapping.Restrict permissions to the model and mapping files.

Un amministratore deve limitare l'accesso in scrittura ai file di modello e di mapping (edmx, csdl, ssdl e msl) solo agli utenti che modificano il modello o i mapping.An administrator must restrict write access to the model and mapping files (.edmx, .csdl, .ssdl, and .msl) to only users who modify the model or mappings. Il Entity FrameworkEntity Framework richiede solo l'accesso in lettura a questi file in fase di esecuzione.The Entity FrameworkEntity Framework only requires read access to these files at run time. Un amministratore deve limitare anche l'accesso ai file del codice sorgente di visualizzazione precompilati e a livello di oggetto generati dagli strumenti di Entity Data ModelEntity Data Model.An administrator should also restrict access to object layer and pre-compiled view source code files that are generated by the Entity Data ModelEntity Data Model tools.

Considerazioni sulla sicurezza relative alle querySecurity Considerations for Queries

Le considerazioni sulla sicurezza illustrate di seguito riguardano l'esecuzione di query su un modello concettuale.The following security considerations apply when querying a conceptual model. Tali considerazioni si applicano alle query Entity SQLEntity SQL che usano EntityClient e alle query di oggetto che usano LINQ, Entity SQLEntity SQL e i metodi del generatore di query.These considerations apply to Entity SQLEntity SQL queries using EntityClient and to object queries using LINQ, Entity SQLEntity SQL, and query builder methods.

Impedire attacchi SQL injection.Prevent SQL injection attacks.

Le applicazioni spesso accettano input esterno, ad esempio da un utente o da un altro agente esterno, ed eseguono azioni basate su tale input.Applications frequently take external input (from a user or another external agent) and perform actions based on that input. L'eventuale input derivato in modo diretto o indiretto dall'utente o da un agente esterno può includere contenuto che sfrutta la sintassi del linguaggio di destinazione per eseguire azioni non autorizzate.Any input that is directly or indirectly derived from the user or an external agent might have content that uses the syntax of the target language in order to perform unauthorized actions. Quando il linguaggio di destinazione è un linguaggio SQL (Structured Query Language), ad esempio Transact-SQLTransact-SQL, questa manipolazione è nota come attacco SQL injection.When the target language is a Structured Query Language (SQL), such as Transact-SQLTransact-SQL, this manipulation is known as a SQL injection attack. Un utente malintenzionato può inserire comandi direttamente nella query e rimuovere una tabella di database, determinare un attacco di tipo Denial of Service o alterare in altro modo la natura dell'operazione da eseguire.A malicious user can inject commands directly into the query and drop a database table, cause a denial of service, or otherwise change the nature of the operation being performed.

  • Attacchi injection di Entity SQLEntity SQL:Entity SQLEntity SQL injection attacks:

    Gli attacchi SQL injection possono essere eseguiti in Entity SQLEntity SQL attraverso l'inserimento di input dannoso nei valori usati in un predicato della query e nei nomi del parametro.SQL injection attacks can be performed in Entity SQLEntity SQL by supplying malicious input to values that are used in a query predicate and in parameter names. Per evitare il rischio di SQL injection, è necessario non combinare mai l'input dell'utente con il testo dei comandi Entity SQLEntity SQL.To avoid the risk of SQL injection, you should never combine user input with Entity SQLEntity SQL command text.

    Le query Entity SQLEntity SQL accettano parametri ovunque vengano accettati i valori letterali.Entity SQLEntity SQL queries accept parameters everywhere that literals are accepted. È opportuno utilizzare query con parametri, anziché inserire valori letterali direttamente nella query tramite un agente esterno.You should use parameterized queries instead of injecting literals from an external agent directly into the query. È consigliabile utilizzare i metodi del generatore di query per costruire in modo sicuro Entity SQL.You should also consider using query builder methods to safely construct Entity SQL.

  • Attacchi injection di LINQ to EntitiesLINQ to Entities:LINQ to EntitiesLINQ to Entities injection attacks:

    Sebbene la composizione di query sia possibile in LINQ to EntitiesLINQ to Entities, essa viene eseguita attraverso l'API del modello a oggetti.Although query composition is possible in LINQ to EntitiesLINQ to Entities, it is performed through the object model API. A differenza delle query Entity SQLEntity SQL, le query LINQ to EntitiesLINQ to Entities non vengono composte mediante la manipolazione o la concatenazione di stringhe e non sono soggette agli attacchi SQL injection tradizionali.Unlike Entity SQLEntity SQL queries, LINQ to EntitiesLINQ to Entities queries are not composed by using string manipulation or concatenation, and they are not susceptible to traditional SQL injection attacks.

Evitare la creazione di set di risultati molto grandi.Prevent very large result sets.

Un set di risultati molto grande può causare la chiusura del sistema client se il client sta eseguendo operazioni che usano una quantità di risorse proporzionale alla dimensione del set di risultati.A very large result set could cause the client system to shut down if the client is performing operations that consume resources proportional to the size of the result set. Set di risultati insolitamente grandi possono essere prodotti in presenza delle condizioni seguenti:Unexpectedly large result sets can occur under the following conditions:

  • In query eseguite su un database molto ampio che non includono condizioni di filtro adatte.In queries against a large database that do not include appropriate filter conditions.

  • In query che creano join cartesiani sul server.In queries that create Cartesian joins on the server.

  • In query Entity SQLEntity SQL annidate.In nested Entity SQLEntity SQL queries.

Quando si accetta l'input dell'utente, è necessario assicurarsi che esso non causi l'aumento delle dimensioni del set di risultati oltre le capacità di gestione del sistema.When accepting user input, you must make sure that the input cannot cause result sets to become larger than what the system can handle. È inoltre possibile utilizzare il Take metodo LINQ to EntitiesLINQ to Entities o limite operatore in Entity SQLEntity SQL per limitare le dimensioni del set di risultati.You can also use the Take method in LINQ to EntitiesLINQ to Entities or the LIMIT operator in Entity SQLEntity SQL to limit the size of the result set.

Evitare di restituire risultati IQueryable quando si espongono metodi a chiamanti potenzialmente non attendibili.Avoid Returning IQueryable Results When Exposing Methods to Potentially Untrusted Callers.

Evitare di restituire tipi IQueryable<T> dai metodi esposti a chiamanti potenzialmente non attendibili per i motivi seguenti:Avoid returning IQueryable<T> types from methods that are exposed to potentially untrusted callers for the following reasons:

  • Un utente di una query che espone un tipo IQueryable<T> potrebbe chiamare metodi sul risultato che espongono dati sicuri o aumentano la dimensione del set di risultati.A consumer of a query that exposes an IQueryable<T> type could call methods on the result that expose secure data or increase the size of the result set. Si consideri ad esempio la firma del metodo riportata di seguito:For example, consider the following method signature:

    public IQueryable<Customer> GetCustomer(int customerId)  
    

    Un utente di questa query potrebbe chiamare .Include("Orders") sul tipo IQueryable<Customer> restituito per recuperare dati che la query non dovrebbe esporre.A consumer of this query could call .Include("Orders") on the returned IQueryable<Customer> to retrieve data that the query did not intend to expose. È possibile evitare questa situazione impostando il tipo restituito del metodo su IEnumerable<T> e chiamando un metodo (quale .ToList()) che materializza i risultati.This can be avoided by changing the return type of the method to IEnumerable<T> and calling a method (such as .ToList()) that materializes the results.

  • Poiché le query IQueryable<T> vengono eseguite quando viene eseguita un'iterazione dei risultati, un utente di una query che espone un tipo IQueryable<T> potrebbe intercettare le eccezioni generate.Because IQueryable<T> queries are executed when the results are iterated over, a consumer of a query that exposes an IQueryable<T> type could catch exceptions that are thrown. Le eccezioni potrebbero contenere informazioni non destinate all'utente.Exceptions could contain information not intended for the consumer.

Considerazioni sulla sicurezza relative alle entitàSecurity Considerations for Entities

Le considerazioni sulla sicurezza illustrate di seguito sono valide in caso di generazione e utilizzo di tipi di entità.The following security considerations apply when generating and working with entity types.

Non condividere un oggetto ObjectContext tra domini dell'applicazione.Do not share an ObjectContext across application domains.

La condivisione di un oggetto ObjectContext con più di un dominio dell'applicazione potrebbe esporre le informazioni contenute nella stringa di connessione.Sharing an ObjectContext with more than one application domain may expose information in the connection string. Al contrario, è necessario trasferire oggetti serializzati o oggetti grafici all'altro dominio dell'applicazione e quindi allegarli a un ObjectContext nel dominio dell'applicazione.Instead, you should transfer serialized objects or object graphs to the other application domain and then attach those objects to an ObjectContext in that application domain. Per ulteriori informazioni, vedere serializzazione di oggetti.For more information, see Serializing Objects.

Impedire violazioni dell'indipendenza dai tipi.Prevent type safety violations.

Se l'indipendenza dai tipi viene violata, Entity FrameworkEntity Framework non è in grado di garantire l'integrità dei dati negli oggetti.If type safety is violated, the Entity FrameworkEntity Framework cannot guarantee the integrity of data in objects. La violazione può verificarsi se si consente l'esecuzione di applicazioni non attendibili con la sicurezza dall'accesso di codice dall'attendibilità totale.Type safety violations could occur if you allow untrusted applications to run with full-trust code access security.

Gestire le eccezioni.Handle exceptions.

Accedere ai metodi e alle proprietà di un oggetto ObjectContext all'interno di un blocco try-catch.Access methods and properties of an ObjectContext within a try-catch block. L'intercettazione di eccezioni impedisce alle eccezioni non gestite di esporre voci nell'oggetto ObjectStateManager o informazioni del modello (ad esempio i nomi di tabella) agli utenti dell'applicazione.Catching exceptions prevents unhandled exceptions from exposing entries in the ObjectStateManager or model information (such as table names) to users of your application.

Considerazioni sulla sicurezza relative ad applicazioni ASP.NETSecurity Considerations for ASP.NET Applications

Quando si usano percorsi in applicazioni ASP.NETASP.NET, è necessario considerare quanto segue.The following should be considered when you work with paths in ASP.NETASP.NET applications.

Verificare se l'host esegue i controlli del percorso.Verify whether your host performs path checks.

Quando viene usata la stringa di sostituzione |DataDirectory| (racchiusa tra barre verticali), ADO.NETADO.NET verifica che il percorso risolto sia supportato.When the |DataDirectory| (enclosed in pipe symbols) substitution string is used, ADO.NETADO.NET verifies that the resolved path is supported. "..", ad esempio, non è consentito dietro DataDirectory.For example, ".." is not allowed behind DataDirectory. Lo stesso controllo per la risoluzione dell'operatore radice dell'applicazione Web (~) viene eseguito dal processo che ospita ASP.NETASP.NET.That same check for resolving the Web application root operator (~) is performed by the process hosting ASP.NETASP.NET. IIS esegue questo controllo, ma è possibile che host diversi da IIS non verifichino il supporto del percorso risolto.IIS performs this check; however, hosts other than IIS may not verify that the resolved path is supported. È opportuno dunque conoscere il comportamento dell'host su cui viene distribuita un'applicazione Entity FrameworkEntity Framework.You should know the behavior of the host on which you deploy an Entity FrameworkEntity Framework application.

Non dare per scontati i nomi di percorso risolti.Do not make assumptions about resolved path names.

Anche se i valori in cui l'operatore radice (~) e la stringa di sostituzione DataDirectory si risolvono dovrebbero rimanere costanti durante il runtime dell'applicazione, Entity FrameworkEntity Framework non impedisce all'host di modificarli.Although the values to which the root operator (~) and the DataDirectory substitution string resolve should remain constant during the application's runtime, the Entity FrameworkEntity Framework does not restrict the host from modifying these values.

Verificare la lunghezza del percorso prima della distribuzione.Verify the path length before deployment.

Prima di distribuire un'applicazione Entity FrameworkEntity Framework, occorre assicurarsi che i valori dell'operatore radice (~) e la stringa di sostituzione DataDirectory sono superino i limiti di lunghezza del percorso del sistema operativo.Before deploying an Entity FrameworkEntity Framework application, you should ensure that the values of the root operator (~) and DataDirectory substitution string do not exceed the limits of the path length in the operating system. I provider di dati ADO.NETADO.NET non si assicurano che la lunghezza del percorso sia all'interno di limiti validi.ADO.NETADO.NET data providers do not ensure that the path length is within valid limits.

Considerazioni sulla sicurezza relative ai metadati ADO.NETSecurity Considerations for ADO.NET Metadata

Le considerazioni sulla sicurezza illustrate di seguito si applicano in caso di generazione e utilizzo di file di mapping e di modello.The following security considerations apply when generating and working with model and mapping files.

Non esporre informazioni riservate tramite la registrazione.Do not expose sensitive information through logging.

I componenti del servizio di metadati ADO.NETADO.NET non registrano informazioni private.ADO.NETADO.NET metadata service components do not log any private information. In presenza di risultati che non è possibile restituire a causa di restrizioni di accesso, i sistemi di gestione dei database e i file system devono restituire zero risultati anziché generare un'eccezione che potrebbe contenere informazioni riservate.If there are results that cannot be returned because of access restrictions, database management systems and file systems should return zero results instead of raising an exception that could contain sensitive information.

Non accettare oggetti MetadataWorkspace da fonti non attendibili.Do not accept MetadataWorkspace objects from untrusted sources.

Le applicazioni non devono accettare istanze della classe MetadataWorkspace da fonti non attendibili.Applications should not accept instances of the MetadataWorkspace class from untrusted sources. Al contrario, è necessario costruire in modo esplicito un'area di lavoro e popolarla a partire da tale origine.Instead, you should explicitly construct and populate a workspace from such a source.

Vedere ancheSee Also

Protezione delle applicazioni ADO.NETSecuring ADO.NET Applications
Considerazioni sulla distribuzioneDeployment Considerations
Considerazioni sulla migrazioneMigration Considerations