web-dev-qa-db-fra.com

Accorder l'accès Select à toutes les tables d'une base de données spécifique dans MS SQL

J'ai un serveur qui a plusieurs bases de données contenues dans ce même serveur/projet. J'utilise MS SQL Server 2012.

J'ai un rôle spécial mis en place avec 3 utilisateurs qui sont en dehors de ce rôle. Je voudrais accorder l'accès Select au rôle pour toutes les tables qui se trouvent dans une base de données spécifique.

La base de données en question est une base de données d'archives qui contient des tables d'archives pour chaque mois au cours des 12 dernières années. Lors de la création initiale du rôle, j'ai accordé l'accès en exécutant simplement les éléments suivants:

GRANT SELECT ON [dbo].[myarchivetable] TO myspecialrole

aller

Cela a très bien fonctionné car je n'aurais qu'à changer l'année et le mois et exécuter tout cela en 1 script.

Je découvre maintenant qu'ils ont besoin d'un accès Select à chaque table de la base de données d'archives. Je pourrais faire la méthode ci-dessus, cependant Ayant à écrire tout cela 132 fois, il serait très facile de faire une erreur.

Comment puis-je facilement ajouter le myspecialrole à chaque table de cette base de données?

J'espère que tout était clair.

Merci d'avance, Curtis

7
Curtis Beiersdorf

Si toutes vos tables sont dans le schéma dbo, cela devrait fonctionner, vous pouvez simplement refuser des tables uniques si nécessaire

GRANT SELECT ON SCHEMA :: [dbo] TO myspecialrole
11
ndonohoe

Vous pouvez générer et exécuter un SQL avec la table système sysobjects comme suit:

select 'GRANT EXEC ON dbo.' + name + ' TO myspecialrole GO' from mydb..sysobjects where type = 'U'
2
Burçin