Ho un database SQL Server 2008 in cui tutti gli accessi alle tabelle sottostanti vengono eseguiti tramite stored procedure. Alcune stored procedure semplicemente SELECT i record dalle tabelle mentre altri UPDATE, INSERT e DELETE.Stored procedure e autorizzazioni: EXECUTE è sufficiente?
Se una stored procedure AGGIORNA una tabella, l'utente che esegue la stored procedure ha anche bisogno delle autorizzazioni UPDATE per le tabelle interessate o il fatto che disponga delle autorizzazioni EXECUTE per la stored procedure sufficiente?
Fondamentalmente mi chiedo se fornire all'utente le autorizzazioni EXECUTE alle stored procedure sia sufficiente o è necessario fornire loro le autorizzazioni SELECT, UPDATE, DELETE e INSERT alle tabelle affinché le stored procedure funzionino. Grazie.
[EDIT] Nella maggior parte delle mie stored procedure sembra effettivamente che EXECUTE sia sufficiente. Tuttavia, ho trovato che nelle stored procedure in cui è stato utilizzato "Execute sp_Executesql" EXECUTE non era sufficiente. Le tabelle coinvolte necessitavano di autorizzazioni per le azioni eseguite all'interno di "sp_Executesql".
Ho paura che quando si utilizzano query SQL dinamiche è necessario concedere autorizzazioni sull'oggetto sottostante. Ho aggiornato la risposta per riflettere questo. –
@Noel - Hai ragione. Ho scoperto che dovevo consentire a datareader l'accesso alle tabelle per gli utenti. Per fortuna non è stato un problema per la mia situazione dal momento che tutti gli utenti potevano visualizzare tutti i dati. – webworm
In un'altra risposta, @RemusRusanu collega a un'alternativa: 1) Creare un certificato; 2) Creare un utente associato a quel certificato; 3) Concedere all'utente i diritti appropriati [alle risorse protette]; e 4) Firmare lo sproc con il certificato, ogni volta che si modifica lo sproc (stackoverflow.com/a/4081604/6894566, collegamento a: sommarskog.se/grantperm.html#Certificates). La firma aggiunge i diritti utente del certificato al token utente corrente, che SQL Server conserva quando chiama le procedure di sistema e SQL dinamico richiamato tramite EXEC() o sp_executesql. Quindi lo sproc succede. – iokevins