Firma di stored procedure in SQL Server (ADO.NET)
A partire da SQL Server 2005 è possibile firmare una stored procedure con un certificato o una chiave asimmetrica. 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. Viene quindi eseguito il mapping di un utente creato al certificato e vengono concesse le autorizzazioni dell'utente del certificato sugli oggetti cui la stored procedure deve accedere.
Durante l'esecuzione della stored procedure, SQL Server combina le autorizzazioni dell'utente del certificato con quelle del chiamante. A differenza della clausola EXECUTE AS, il contesto di esecuzione della stored procedure non viene modificato. 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.
Un firma digitale è un digest di dati crittografato con la chiave privata del firmatario. La chiave privata garantisce che la firma digitale è univoca per il titolare o il proprietario. È possibile utilizzare la firma per stored procedure, funzioni o trigger.
Nota |
---|
Per concedere autorizzazioni a livello di server, è possibile creare un certificato nel database master. |
Creazione di certificati
Quando si firma una stored procedure con un certificato, viene utilizzata la chiave privata per creare un digest di dati costituito dall'hash crittografato del codice della stored procedure code. In fase di esecuzione il digest di dati viene decrittografato utilizzando la chiave pubblica e confrontato con il valore hash della stored procedure. La modifica della stored procedure invalida il valore hash, annullando di fatto la corrispondenza della firma digitale. In tal modo si impedisce che un utente che non disponga di accesso alla chiave privata possa modificare il codice della stored procedure. È pertanto necessario firmare nuovamente la procedura ogni volta che viene modificata.
La firma di un modulo è un processo in quattro passaggi:
Creazione di un certificato tramite l'istruzione CREATE CERTIFICATE [certificateName] Transact-SQL. Questa istruzione prevede diverse opzioni per l'impostazione di una data di inizio e una data di fine, nonché di una password. La data di scadenza predefinita è pari a un anno.
Creazione di un utente del database associato al certificato tramite l'istruzione CREATE USER [userName] FROM CERTIFICATE [certificateName] Transact-SQL. Questo utente esiste solo nel database e non è associato a un account di accesso.
Concessione delle autorizzazioni necessarie sugli oggetti di database all'utente del certificato.
Nota |
---|
Un certificato non può concedere autorizzazioni a un utente al quale sono state revocate autorizzazioni utilizzando l'istruzione DENY.DENY ha sempre la precedenza su GRANT e impedisce al chiamante di ereditare autorizzazioni concesse all'utente del certificato. |
- Firma della stored procedure con il certificato tramite l'istruzione ADD SIGNATURE TO [procedureName] BY CERTIFICATE [certificateName] Transact-SQL.
Risorse esterne
Per ulteriori informazioni, vedere le seguenti risorse.
Risorsa |
Descrizione |
---|---|
Module Signing nella documentazione online di SQL Server 2008 (informazioni in lingua inglese) |
Viene descritta la procedura di firma dei moduli e vengono forniti uno scenario di esempio e collegamenti agli argomenti Transact-SQL attinenti. |
Firma del modulo nella documentazione online di SQL Server 2005 |
Viene descritta la procedura di firma dei moduli e vengono forniti uno scenario di esempio e collegamenti agli argomenti Transact-SQL attinenti. |
Firma di stored procedure con un certificato nella documentazione online di SQL Server 2005 |
Viene fornita un'esercitazione per firmare una stored procedure con un certificato. |
Vedere anche
Concetti
Scenari di sicurezza delle applicazioni in SQL Server (ADO.NET)
Gestione delle autorizzazioni con le stored procedure in SQL Server (ADO.NET)
Scrittura di istruzioni SQL dinamiche protette in SQL Server (ADO.NET)
Personalizzazione delle autorizzazioni mediante la rappresentazione in SQL Server (ADO.NET)
Modifica di dati con le stored procedure (ADO.NET)