Existe-t-il un moyen d'accorder à un utilisateur l'accès à toutes les vues non système de la base de données?

9

Dans SQL Server, j'ai un utilisateur dans une base de données particulière et on m'a demandé de leur accorder l'accès à toutes les vues non système de la base de données uniquement. Je pense que cela peut être fait en éditant des éléments sécurisables de type view et en accordant select sur chacun, mais il y a beaucoup, beaucoup de vues. Existe-t-il un moyen plus efficace d'y parvenir?

Christopher Garcia
la source

Réponses:

8

Il n'y a pas de syntaxe telle que

GRANT SELECT ON ALL::Views TO SomeUser 

Vous pouvez GRANT SELECTaccorder des autorisations sur des objets individuels , des schémas ou la base de données entière, mais pas filtré par type d'objet pour inclure uniquement les vues. Pour ce type de tâche ad hoc, je créerais probablement un nouveau rôle appelé ViewReader, ajouter l'utilisateur à ce rôle puis dans SSMS run

SELECT 'GRANT SELECT ON ' + 
          QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + 
      ' TO ViewReader;'
FROM sys.views
WHERE is_ms_shipped = 0

pour générer un script à exécuter avec GRANTles autorisations requises.

Martin Smith
la source
Merci pour la réponse extrêmement gracieuse. Le script est un peu au-dessus de ma tête donc je vais faire quelques lectures avant d'essayer de l'implémenter. Merci encore.
Christopher Garcia
1
@lush - Le script vous donne juste quelques commandes à revoir, copier, coller et exécuter. Vous pourriez faire quelque chose de plus élaboré pour concaténer le résultat, EXECmais je ne me dérangerais pas pour une tâche ponctuelle.
Martin Smith
Je comprends maintenant, c'est une solution parfaite à ce problème, merci!
Christopher Garcia
4

J'ai adopté une autre approche dans mon cas. C'est ce que j'ai fait:

  1. Créez une connexion et mappez-la à une base de données.
  2. Accédez à une base de données et créez un schéma appelé Public_View par exemple. Le propriétaire de ce schéma doit être le même propriétaire des tables que les vues vont faire référence.
  3. Accordez au nouvel utilisateur l'accès au nouveau schéma.
  4. Créez autant de vues que vous le souhaitez dans le nouveau schéma et le nouvel utilisateur y aura accès.

La bonne chose est que le nouvel utilisateur n'aura pas accès aux tables, il ne pourra même pas voir les tables.

J'espère que ça aide.

Francisco Goldenstein
la source
4
+1 Pour moi, la bonne chose à propos de cette solution par rapport à la mienne est qu'il n'est pas nécessaire d'attribuer explicitement des autorisations lorsque de nouvelles vues sont créées.
Martin Smith