Je souhaite configurer un utilisateur "en lecture" sur mon instance SQL Server 2012. Je voudrais lui accorder le droit d'exécuter toute procédure stockée, ou fonction, ou instruction SQL directe, qui récupère les données de toutes les tables et vues, mais pas de mettre à jour ou d'insérer (c'est-à-dire de lire quoi que ce soit et d'écrire rien).
Puis-je configurer cela sans donner spécifiquement des droits à chaque fonction ou procédure stockée par nom, mais plutôt lui accorder le droit d'exécution sur n'importe quelle fonction ou procédure stockée, en lui retirant simplement le droit de modifier les tables?
Est-ce que quelque chose changera si j'exécute SQL Server 2008 à la place?
Clarifications et ajouts:
- Si une procédure stockée modifie des données, l'utilisateur doit recevoir un message d'erreur (refusant la modification ou refusant complètement l'accès à la procédure stockée).
- Si une solution potentielle implique le refus d'autorisations, puis-je simplement ne pas accorder certaines autorisations au lieu de les refuser?
- Un refus peut-il être appliqué à toutes les tables, vues, etc. (existantes maintenant et à l'avenir) dans la base de données en une seule instruction?
GRANT
pour accorder des autorisations,DENY
refuser des autorisations etREVOKE
supprimer unGRANT
ouDENY
. SansGRANT
ou,DENY
l'utilisateur peut hériter des autorisations, par exemple en obtenant l'accès à une procédure stockée.DENY DELETE, INSERT, UPDATE
une base de données ou un schéma, je pense que cela n'affectera que les tables et les vues.Réponses:
Ce n'est pas aussi facile à réaliser que vous ne le pensez. Une façon consiste à créer un nouveau rôle de base de données défini par l'utilisateur, à accorder toutes les autorisations nécessaires à ce rôle, puis à ajouter des utilisateurs au nouveau rôle. Cela facilite au moins l'octroi aux utilisateurs (ou à d'autres rôles définis par l'utilisateur) de cet ensemble d'autorisations à l'avenir. Les étapes suivantes sont un bon début:
Après cela, Bob aura de larges privilèges en lecture seule dans la base de données. Il pourra lire à partir de toutes les tables, les vues sur ces tables et les fonctions en ligne. Cependant, il ne pourra exécuter aucune procédure ni utiliser de fonctions non intégrées.
Vous devrez accorder des autorisations spécifiques au rôle Lecteurs pour les fonctions et procédures sécurisées auxquelles vous souhaitez que les lecteurs aient accès. Il peut y avoir des étapes que vous pouvez suivre pour faciliter ce processus (comme le regroupement d'objets dans un schéma et l'octroi d'une autorisation d'exécution sur le schéma au lieu d'objets individuels), mais il y a trop de détails à couvrir ici.
Une chose à savoir est que le manque de privilèges de modification des données n'empêcherait pas un lecteur de modifier les données via une procédure stockée sur laquelle il a été autorisé à exécuter, si la procédure et l'objet en cours de modification partagent un propriétaire commun. Un refus explicite ne serait pas non plus respecté en l'espèce. Cette fonctionnalité est connue sous le nom de chaînage de propriété .
la source