Firma di stored procedure in SQL ServerSigning Stored Procedures in SQL Server

Un firma digitale è un digest di dati crittografato con la chiave privata del firmatario.A digital signature is a data digest encrypted with the private key of the signer. La chiave privata garantisce che la firma digitale è univoca per il titolare o il proprietario.The private key ensures that the digital signature is unique to its bearer or owner. È possibile firmare l'assembly, le funzioni (ad eccezione delle funzioni inline con valori di tabella), trigger e stored procedure.You can sign stored procedures, functions (except for inline table-valued functions), triggers, and assemblies.

È possibile firmare una stored procedure con un certificato o una chiave asimmetrica.You can sign a stored procedure with a certificate or an asymmetric key. Le firme sono progettate per scenari in cui le autorizzazioni non possono essere ereditate tramite il concatenamento della proprietà oppure in cui la catena di proprietà è interrotta, come nel caso delle istruzioni SQL dinamiche.This is designed for scenarios when permissions cannot be inherited through ownership chaining or when the ownership chain is broken, such as dynamic SQL. È quindi possibile creare un utente con mappato al certificato, la concessione di autorizzazioni utente per gli oggetti a cui che la stored procedure deve accedere il certificato.You can then create a user mapped to the certificate, granting the certificate user permissions on the objects the stored procedure needs to access.

È anche possibile creare un account di accesso mappato allo stesso certificato, quindi concedere autorizzazioni a livello di server necessari per tale account di accesso oppure aggiungere l'account di accesso a uno o più dei ruoli predefiniti del server.You can also create a login mapped to the same certificate, and then grant any necessary server-level permissions to that login, or add the login to one or more of the fixed server roles. Questa è progettata per evitare l'abilitazione di TRUSTWORTHY impostazione per gli scenari in cui sono necessarie autorizzazioni di livello superiore del database.This is designed to avoid enabling the TRUSTWORTHY database setting for scenarios in which higher level permissions are needed.

Quando viene eseguita la stored procedure, SQL Server combina le autorizzazioni dell'utente certificato e/o account di accesso con quelle del chiamante.When the stored procedure is executed, SQL Server combines the permissions of the certificate user and/or login with those of the caller. A differenza di EXECUTE AS clausola, non viene modificato il contesto di esecuzione della procedura.Unlike the EXECUTE AS clause, it does not change the execution context of the procedure. Le funzioni predefinite che restituiscono i nomi di accesso e i nomi utente restituiscono il nome del chiamante e non il nome dell'utente del certificato.Built-in functions that return login and user names return the name of the caller, not the certificate user name.

Creazione di certificatiCreating Certificates

Quando si firma una stored procedure con un certificato o chiave asimmetrica, un digest di dati costituito dall'hash crittografato del codice della stored procedure, insieme a execute-come utente, viene creato utilizzando la chiave privata.When you sign a stored procedure with a certificate or asymmetric key, a data digest consisting of the encrypted hash of the stored procedure code, along with the execute-as user, is created using the private key. In fase di esecuzione il digest di dati viene decrittografato usando la chiave pubblica e confrontato con il valore hash della stored procedure.At run time, the data digest is decrypted with the public key and compared with the hash value of the stored procedure. Modifica execute-come utente invalida il valore hash in modo che la firma digitale non corrisponde più.Changing the execute-as user invalidates the hash value so that the digital signature no longer matches. Modificare la stored procedure elimina la firma, che impedisce a chi non ha accesso alla chiave privata di modificare il codice della stored procedure.Modifying the stored procedure drops the signature entirely, which prevents someone who does not have access to the private key from changing the stored procedure code. In entrambi i casi, è necessario firmare nuovamente la procedura ogni volta che si modifica il codice o execute-come utente.In either case, you must re-sign the procedure each time you change the code or the execute-as user.

Esistono due passaggi necessari coinvolti nella firma di un modulo:There are two required steps involved in signing a module:

  1. Creazione di un certificato tramite l'istruzione CREATE CERTIFICATE [certificateName] Transact-SQL.Create a certificate using the Transact-SQL CREATE CERTIFICATE [certificateName] statement. Questa istruzione prevede diverse opzioni per l'impostazione di una data di inizio e una data di fine, nonché di una password.This statement has several options for setting a start and end date and a password. La data di scadenza predefinita è un anno.The default expiration date is one year.

  2. Firma della stored procedure con il certificato tramite l'istruzione ADD SIGNATURE TO [procedureName] BY CERTIFICATE [certificateName] Transact-SQL.Sign the procedure with the certificate using the Transact-SQL ADD SIGNATURE TO [procedureName] BY CERTIFICATE [certificateName] statement.

Una volta il modulo è stato firmato, una o più entità deve essere creato per contenere le autorizzazioni aggiuntive che devono essere associate con il certificato.Once the module has been signed, one or more principals needs to be created in order to hold the additional permissions that should be associated with the certificate.

Se il modulo richiede autorizzazioni a livello di database aggiuntive:If the module needs additional database-level permissions:

  1. Creazione di un utente del database associato al certificato tramite l'istruzione CREATE USER [userName] FROM CERTIFICATE [certificateName] Transact-SQL.Create a database user associated with that certificate using the Transact-SQL CREATE USER [userName] FROM CERTIFICATE [certificateName] statement. L'utente esiste solo nel database e non è associato a un account di accesso, a meno che un account di accesso è stato creato anche da tale certificato.This user exists in the database only and is not associated with a login unless a login has also been created from that same certificate.

  2. Concedere le autorizzazioni a livello di database necessarie a utente del certificato.Grant the certificate user the required database-level permissions.

Se il modulo richiede le autorizzazioni a livello di server aggiuntive:If the module needs additional server-level permissions:

  1. Copiare il certificato per il master database.Copy the certificate to the master database.

  2. Creare un account di accesso associato al certificato tramite l'istruzione Transact-SQL CREATE LOGIN [userName] FROM CERTIFICATE [certificateName] istruzione.Create a login associated with that certificate using the Transact-SQL CREATE LOGIN [userName] FROM CERTIFICATE [certificateName] statement.

  3. Concedere l'accesso con certificato le autorizzazioni a livello di server necessari.Grant the certificate login the required server-level permissions.

Nota

Un certificato non può concedere autorizzazioni a un utente al quale sono state revocate autorizzazioni usando l'istruzione DENY.A certificate cannot grant permissions to a user that has had permissions revoked using the DENY statement. DENY ha sempre la precedenza su GRANT e impedisce al chiamante di ereditare autorizzazioni concesse all'utente del certificato.DENY always takes precedence over GRANT, preventing the caller from inheriting permissions granted to the certificate user.

Risorse esterneExternal Resources

Per altre informazioni, vedere le risorse seguenti.For more information, see the following resources.

RisorsaResource DescrizioneDescription
Firma del modulo nella documentazione Online di SQL ServerModule Signing in SQL Server Books Online Viene descritta la procedura di firma dei moduli e vengono forniti uno scenario di esempio e collegamenti agli argomenti Transact-SQL attinenti.Describes module signing, providing a sample scenario and links to the relevant Transact-SQL topics.
Stored procedure con un certificato di firma nella documentazione Online di SQL ServerSigning Stored Procedures with a Certificate in SQL Server Books Online Viene fornita un'esercitazione per firmare una stored procedure con un certificato.Provides a tutorial for signing a stored procedure with a certificate.

Vedere ancheSee Also

Protezione delle applicazioni ADO.NETSecuring ADO.NET Applications
Cenni preliminari sulla sicurezza in SQL ServerOverview of SQL Server Security
Scenari di sicurezza delle applicazioni in SQL ServerApplication Security Scenarios in SQL Server
Gestione delle autorizzazioni con stored procedure in SQL ServerManaging Permissions with Stored Procedures in SQL Server
Scrittura dinamica sicura in SQL ServerWriting Secure Dynamic SQL in SQL Server
Personalizzazione delle autorizzazioni con rappresentazione in SQL ServerCustomizing Permissions with Impersonation in SQL Server
Modifica di dati con stored procedureModifying Data with Stored Procedures
Provider gestiti ADO.NET e Centro per sviluppatori di set di datiADO.NET Managed Providers and DataSet Developer Center