Perché non esiste un ruolo di database "Executor Stored Procedure Executor" integrato?
-
27-09-2019 - |
Domanda
Mi sono sempre chiesto perché l'elenco dei ruoli di database (db_datareader
, db_datawriter
, db_ddladmin
, ecc.) Non ha mai incluso un db_storedprocedureexecutor
. Gli altri hanno senso, ma sembra essere in grado di concedere la possibilità di eseguire tutti i proc memorizzati a un determinato utente (senza concederli db_owner
, che è l'unico altro modo per realizzare la stessa cosa) sarebbe una cosa utile.
Ad esempio, supponiamo che io voglia dare a tutti i miei sviluppatori i diritti di eseguire procedure memorizzate, pur non lasciandoli eseguire alcun DDL - senza concedere esplicitamente l'esecuzione su ogni procedura memorizzata (e quindi ricordando di aggiungere quelli nuovi quando vengono distribuiti SP aggiuntivi) , non c'è modo di farlo (so che gli SP possono contenere DDL, quindi potrebbe ancora essere consentito indirettamente l'accesso a DDL in questo modo).
Se ho un account di servizio di applicazione e una serie di procedure memorizzate che accompagnano la mia domanda, devo concedere esplicitamente i diritti a ogni SP (dal momento che non voglio concedere il mio account di servizio di applicazione DBO), mentre posso usare un Ruolo per consentire loro di aggiornare/eliminare tutto ciò che vogliono.
Anche se inizialmente sembrava ovvio, ora non sono sicuro del perché questo ruolo manchi dal server di database - qualcuno può offrire una spiegazione del perché questa è un'idea terribile (come presumo, o esisterebbe già)?
MODIFICARE:
Sembra che non sia l'unico con questa aspettativa - e Ha funzionato con una manciata di T-SQL (Sembra che tu possa concedere una coperta Esegui, cosa che non sapevo che potessi fare), il che mi lascia solo chiedermi perché non è standard!
Soluzione
Se usi schemi, allora devi solo GRANT EXECUTE ON SCHEMA::storedprocschema
per esempio CREATE PROC storedprocschema.DoStuff ...
Quanto al perché, non ho idea ...
Altri suggerimenti
Perché se è possibile eseguire tutte le procedure memorizzate, è possibile eseguire sp_addrolemember
, e puoi fare tutto ciò che a database_owner
Potere.