Publicar esto como una respuesta solo porque es demasiado largo para un comentario, y porque será relevante para otros usuarios muy pronto.
SQL Server 2014 agrega algunos nuevos permisos a nivel de servidor que ayudarán con exactamente este tipo de escenario: se diseñaron teniendo en cuenta la auditoría, pero este tipo de requisito también parece ajustarse a esa factura. Simplemente puede agregar los siguientes dos permisos a un inicio de sesión a nivel de servidor:
CONNECT ANY DATABASE
SELECT ALL USER SECURABLES
El primero, como parece, permite que el inicio de sesión se conecte a cualquier base de datos. Lo bueno de esto es que lo permitirá incluso para las bases de datos que se creen en el futuro (siempre que no configure la denegación explícita, que es cómo puede proteger ciertas bases de datos de usuarios de inicios de sesión que tienen este permiso). Este último permite que el inicio de sesión realice operaciones de lectura en cualquier base de datos a la que tengan acceso, por lo que pueden hacerlo SELECT
desde tablas, vistas, UDF, etc., pero no podrán realizar ninguna UPDATE
operación (no he probado si este permiso comprende cuándo un procedimiento almacenado realiza DML). Estos funcionan muy bien en combinación si desea otorgar un acceso de lectura abierto de inicio de sesión a todo el servidor o, para ser más específicos, puede otorgar CONNECT
privilegios tradicionales a ciertas bases de datos, y el SELECT ALL USER SECURABLES
derechosolo funciona para aquellas bases de datos donde el inicio de sesión tiene acceso explícito.
Los cambios de seguridad de 2014 están documentados aquí , bueno, parcialmente; se olvidaron del permiso de nivel de base de datos ALTER ANY DATABASE EVENT SESSION
, aunque eso no es relevante aquí.
No existe un permiso de 'leer ninguna base de datos' a nivel de servidor y no se pueden otorgar permisos a nivel de base de datos a los roles de nivel de servidor
Entonces sí, tendrá que asignar usuarios a las bases de datos individualmente. Si está utilizando Active Directory, puede crear un grupo de Windows, luego iniciar sesión en ese servidor en SQL Server, luego aplicar db_datareader en todas las bases de datos para ese grupo (sin embargo, deberá crear usuarios en cada base de datos).
fuente