sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server:¿cómo otorgar acceso de lectura a TODAS las bases de datos a un inicio de sesión?

Una forma sería establecer "Resultados en texto" en el menú de consulta en SSMS y luego ejecutar lo siguiente.

En realidad, no realiza el cambio, pero genera un script para que lo revise y ejecute.

SET NOCOUNT ON;

DECLARE @user_name    SYSNAME
        , @login_name SYSNAME;

SELECT @user_name = 'user_name',
       @login_name = 'login_name'

SELECT '
    USE ' + QUOTENAME(NAME) + ';

    CREATE USER ' + QUOTENAME(@user_name)
       + ' FOR LOGIN ' + QUOTENAME(@login_name)
       + ' WITH DEFAULT_SCHEMA=[dbo];

    EXEC sys.sp_addrolemember
      ''db_datareader'',
      ''' + QUOTENAME(@user_name) + ''';

    EXEC sys.sp_addrolemember
      ''db_denydatawriter'',
      '''
       + QUOTENAME(@user_name) + '''; 

GO
'
FROM   sys.databases
WHERE  database_id > 4
       AND state_desc = 'ONLINE' 

O podría mirar sys.sp_MSforeachdb como aquí o la versión mejorada de Aaron Bertrand aquí

Si no ve todos los caracteres cuando ejecuta esto, abra las Opciones de consulta de texto y verifique la configuración de 'Número máximo de caracteres que se muestran en cada columna'. Asegúrese de que esté configurado en un valor lo suficientemente grande como para mostrar todos los caracteres.