Publier cela comme une réponse juste parce qu'il est trop long pour un commentaire et parce qu'il sera pertinent pour les autres utilisateurs très bientôt.
SQL Server 2014 ajoute de nouvelles autorisations au niveau du serveur qui aideront exactement avec ce type de scénario - elles ont été conçues avec l'audit à l'esprit, mais ce type d'exigence semble également correspondre à cette facture. Vous pouvez simplement ajouter les deux autorisations suivantes à une connexion au niveau du serveur:
CONNECT ANY DATABASE
SELECT ALL USER SECURABLES
Comme il semble, le premier permet à la connexion de se connecter à n'importe quelle base de données. La bonne chose à ce sujet est qu'il permettra cela même pour les bases de données qui seront créées à l'avenir (à condition que vous ne définissiez pas le refus explicite, c'est ainsi que vous pouvez protéger certaines bases de données utilisateur des connexions qui ont cette autorisation). Ce dernier permet à la connexion d'effectuer des opérations de lecture sur n'importe quelle base de données à laquelle ils ont accès - afin qu'ils puissent à SELECT
partir de tables, de vues, d'UDF, etc. mais ils ne pourront pas effectuer d' UPDATE
opérations (je n'ai pas testé si cette autorisation comprend quand un procédure stockée exécute DML). Ceux-ci fonctionnent très bien en combinaison si vous souhaitez donner un accès en lecture ouvert à tout le serveur, ou pour être plus précis, vous pouvez accorder des CONNECT
privilèges traditionnels à certaines bases de données, et la SELECT ALL USER SECURABLES
bonne volonténe fonctionne que pour les bases de données auxquelles la connexion a un accès explicite.
Les changements de sécurité de 2014 sont documentés ici - enfin, partiellement; ils ont oublié l'autorisation au niveau de la base de données ALTER ANY DATABASE EVENT SESSION
- bien que ce ne soit pas pertinent ici.
Il n'y a pas d'autorisation de lecture de toute base de données au niveau du serveur et les rôles au niveau du serveur ne peuvent pas recevoir d'autorisations au niveau de la base de données
Alors oui, vous devrez mapper les utilisateurs aux bases de données individuellement. Si vous utilisez Active Directory, vous pouvez créer un groupe Windows, puis donner à ce groupe une connexion à SQL Server, puis appliquer db_datareader dans toutes les bases de données de ce groupe (vous devrez cependant créer des utilisateurs dans chaque base de données).
la source