Scenari di sicurezza delle applicazioni in SQL ServerApplication Security Scenarios in SQL Server

Non esiste un singolo modo corretto per creare un'applicazione client SQL Server protetta.There is no single correct way to create a secure SQL Server client application. Ogni applicazione è univoca in termini di requisiti, ambiente di distribuzione e popolazione di utenti.Every application is unique in its requirements, deployment environment, and user population. Anche se un'applicazione può essere ragionevolmente protetta quando viene distribuita inizialmente, può diventare meno sicura nel corso del tempo.An application that is reasonably secure when it is initially deployed can become less secure over time. È impossibile prevedere con accuratezza quali minacce possano emergere nel futuro.It is impossible to predict with any accuracy what threats may emerge in the future.

SQL Server, come prodotto, è stato migliorato da una versione all'altra per incorporare le più recenti funzionalità di sicurezza che consentono agli sviluppatori di creare applicazioni di database protette.SQL Server, as a product, has evolved over many versions to incorporate the latest security features that enable developers to create secure database applications. Tuttavia, la sicurezza non è predefinita, ma richiede un monitoraggio e un aggiornamento costanti.However, security doesn't come in the box; it requires continual monitoring and updating.

Minacce comuniCommon Threats

Gli sviluppatori devono conoscere le minacce per la sicurezza, gli strumenti disponibili per contrastarle e le misure per evitare problemi di sicurezza provocati internamente.Developers need to understand security threats, the tools provided to counter them, and how to avoid self-inflicted security holes. La sicurezza può essere paragonata a una catena, in cui la rottura di uno degli anelli compromette l'efficacia dell'insieme.Security can best be thought of as a chain, where a break in any one link compromises the strength of the whole. Nell'elenco seguente sono riportate alcune minacce comuni per la sicurezza che verranno descritte in maggior dettaglio negli argomenti di questa sezione.The following list includes some common security threats that are discussed in more detail in the topics in this section.

SQL injectionSQL Injection

Per SQL injection si intende il processo mediante il quale un utente malintenzionato immette istruzioni Transact-SQL anziché input valido.SQL Injection is the process by which a malicious user enters Transact-SQL statements instead of valid input. Se l'input viene passato direttamente al server senza essere convalidato e se l'applicazione esegue inavvertitamente il codice inserito, è possibile che l'attacco danneggi o elimini permanentemente i dati.If the input is passed directly to the server without being validated and if the application inadvertently executes the injected code, then the attack has the potential to damage or destroy data. Per contrastare gli attacchi SQL Server injection, è possibile usare stored procedure e comandi con parametri, evitare le istruzioni SQL dinamiche e limitare le autorizzazioni per tutti gli utenti.You can thwart SQL Server injection attacks by using stored procedures and parameterized commands, avoiding dynamic SQL, and restricting permissions on all users.

Elevazione dei privilegiElevation of Privilege

Gli attacchi tramite elevazione dei privilegi si verificano quando un utente è in grado di assumere i privilegi di un account attendibile, ad esempio un proprietario o un amministratore.Elevation of privilege attacks occur when a user is able to assume the privileges of a trusted account, such as an owner or administrator. Usare sempre account con privilegi minimi e assegnare solo le autorizzazioni necessarie.Always run under least-privileged user accounts and assign only needed permissions. Evitare di usare account di amministratore o di proprietario per l'esecuzione di codice.Avoid using administrative or owner accounts for executing code. In questo modo è possibile limitare l'entità dei danni che possono verificarsi in caso di successo di un attacco.This limits the amount of damage that can occur if an attack succeeds. Quando si eseguono attività che richiedono autorizzazioni aggiuntive, usare la rappresentazione o la firma di stored procedure solo per la durata dell'attività.When performing tasks that require additional permissions, use procedure signing or impersonation only for the duration of the task. È possibile firmare le stored procedure con certificati o usare la rappresentazione per assegnare autorizzazioni temporanee.You can sign stored procedures with certificates or use impersonation to temporarily assign permissions.

Probe e osservazione intelligenteProbing and Intelligent Observation

In un attacco di tipo probe è possibile che vengano usati i messaggi di errore generati da un'applicazione per ricercare vulnerabilità di sicurezza.A probing attack can use error messages generated by an application to search for security vulnerabilities. Implementare la gestione degli errori in tutto il codice procedurale per evitare che le informazioni sugli errori di SQL Server vengano restituite all'utente finale.Implement error handling in all procedural code to prevent SQL Server error information from being returned to the end user.

AutenticazioneAuthentication

Un attacco injection alle stringhe di connessione può verificarsi quando si usano gli account di accesso di SQL Server se in fase di esecuzione viene creata una stringa di connessione basata sull'input dell'utente.A connection string injection attack can occur when using SQL Server logins if a connection string based on user input is constructed at run time. Se la stringa di connessione non viene controllata per verificare la presenza di coppie di parole chiave valide, un utente non autorizzato può inserire caratteri aggiuntivi, con la possibilità di accedere a dati sensibili o ad altre risorse del server.If the connection string is not checked for valid keyword pairs, an attacker can insert extra characters, potentially accessing sensitive data or other resources on the server. Se possibile, usare l'autenticazione di Windows.Use Windows authentication wherever possible. Se è necessario usare gli account di accesso di SQL server, usare SqlConnectionStringBuilder per creare e convalidare le stringhe di connessione in fase di esecuzione.If you must use SQL Server logins, use the SqlConnectionStringBuilder to create and validate connection strings at run time.

PasswordPasswords

Gli attacchi spesso riescono perché un intruso è stato in grado di ottenere o indovinare la password di un utente con privilegi.Many attacks succeed because an intruder was able to obtain or guess a password for a privileged user. Le password rappresentano la prima linea di difesa contro le intrusioni, quindi ai fini della sicurezza del sistema è essenziale impostare password complesse.Passwords are your first line of defense against intruders, so setting strong passwords is essential to the security of your system. Creare e applicare criteri password per l'autenticazione in modalità mista.Create and enforce password policies for mixed mode authentication.

Assegnare sempre una password complessa all'account sa, anche quando si usa l'autenticazione di Windows.Always assign a strong password to the sa account, even when using Windows Authentication.

In questa sezioneIn This Section

Gestione delle autorizzazioni con stored procedure in SQL ServerManaging Permissions with Stored Procedures in SQL Server
Viene descritto come usare le stored procedure per gestire le autorizzazioni e controllare l'accesso ai dati.Describes how to use stored procedures to manage permissions and control data access. L'utilizzo di stored procedure è un sistema efficace per rispondere a molte minacce per la sicurezza.Using stored procedures is an effective way to respond to many security threats.

Scrittura dinamica sicura in SQL ServerWriting Secure Dynamic SQL in SQL Server
Vengono descritte le tecniche per scrivere istruzioni SQL dinamiche sicure tramite le stored procedure.Describes techniques for writing secure dynamic SQL using stored procedures.

Firma di stored procedure in SQL ServerSigning Stored Procedures in SQL Server
Viene descritto come firmare una stored procedure con un certificato per consentire agli utenti l'uso di dati cui non possono accedere direttamente.Describes how to sign a stored procedure with a certificate to enable users to work with data they do not have direct access to. In questo modo le stored procedure possono eseguire operazioni che il chiamante non può eseguire direttamente in quanto non dispone delle autorizzazioni appropriate.This enables stored procedures to perform operations that the caller does not have permissions to perform directly.

Personalizzazione delle autorizzazioni con rappresentazione in SQL ServerCustomizing Permissions with Impersonation in SQL Server
Viene descritto come usare la clausola EXECUTE AS per rappresentare un altro utente.Describes how to use the EXECUTE AS clause to impersonate another user. Con la rappresentazione il contesto di esecuzione passa dal chiamante all'utente specificato.Impersonation switches the execution context from the caller to the specified user.

Concessione di autorizzazioni a livello di riga in SQL ServerGranting Row-Level Permissions in SQL Server
Viene descritto come implementare autorizzazioni a livello di riga per limitare l'accesso ai dati.Describes how to implement row-level permissions to restrict data access.

Creazione di ruoli applicazione in SQL ServerCreating Application Roles in SQL Server
Vengono descritte le funzionalità dei ruoli applicazione.Describes features and functionality of application roles.

Abilitazione dell'accesso tra database in SQL ServerEnabling Cross-Database Access in SQL Server
Viene descritto come consentire l'accesso tra database senza compromettere la sicurezza.Describes how to enable cross-database access without jeopardizing security.

Vedere ancheSee Also

Sicurezza di SQL ServerSQL Server Security
Cenni preliminari sulla sicurezza in SQL ServerOverview of SQL Server Security
Protezione delle applicazioni ADO.NETSecuring ADO.NET Applications
Provider gestiti ADO.NET e Centro per sviluppatori di set di datiADO.NET Managed Providers and DataSet Developer Center