Pourquoi n'y a-t-il pas de rôle intégré de base de données «Procédure stockée»?
-
27-09-2019 - |
Question
Je me suis toujours demandé pourquoi la liste des rôles de base de données (db_datareader
, db_datawriter
, db_ddladmin
, etc) n'a jamais inclus un db_storedprocedureexecutor
. Les autres ont du sens, mais il semble être en mesure d'accorder la possibilité d'exécuter tous les procs stockés à un utilisateur particulier (sans les accorder db_owner
, ce qui est le seul autre moyen d'accomplir la même chose) serait une chose pratique.
Par exemple, disons que je veux donner à tous mes développeurs les droits d'exécuter des procédures stockées, sans les laisser exécuter un DDL - sans accorder explicitement l'exécution sur chaque procédure stockée (puis en se souvenant d'ajouter les nouvelles lorsque des SP supplémentaires sont déployés) , il n'y a pas de moyen de le faire (je sais que SPS peut contenir DDL, donc ils peuvent toujours être indirectement autorisés à accéder à DDL de cette façon).
Si j'ai un compte de service d'application et un certain nombre de procédures stockées qui accompagnent ma demande, je dois accorder des droits explicitement à chaque SP (car je ne souhaite pas accorder mon compte de service de demande DBO), alors que je peux utiliser un rôle pour leur permettre de mettre à jour / supprimer tout ce qu'ils veulent.
Bien qu'il ait initialement semblé évident, je ne sais pas maintenant pourquoi ce rôle manque au serveur de base de données - quelqu'un peut-il expliquer pourquoi c'est une idée terrible (comme je le suppose, ou il existerait déjà)?
ÉDITER:
On dirait que je ne suis pas le seul à avoir cette attente - et Cela a fonctionné avec une poignée de T-SQL (Il semble que vous puissiez accorder une couverture à droite, ce que je ne savais pas que vous pouviez faire), ce qui me laisse juste me demander pourquoi ce n'est pas standard!
La solution
Si vous utilisez des schémas, alors vous n'avez qu'à GRANT EXECUTE ON SCHEMA::storedprocschema
par exemple CREATE PROC storedprocschema.DoStuff ...
Quant à pourquoi, aucune idée ...
Autres conseils
Parce que si vous pouvez exécuter toutes les procédures stockées, vous pouvez exécuter sp_addrolemember
, et vous pouvez faire tout ce que database_owner
boîte.