Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server - Como conceder acesso de leitura a TODOS os bancos de dados para um logon?


Uma maneira seria definir "Resultados para texto" no menu de consulta no SSMS e executar o abaixo.

Na verdade, ele não faz a alteração, mas gera um script para você revisar e executar.
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' 

Ou você pode ver sys.sp_MSforeachdb como aqui ou a versão melhorada de Aaron Bertrand aqui

Se você não estiver vendo todos os caracteres ao executar isso, abra as Opções de consulta para texto e verifique a configuração para 'Número máximo de caracteres exibidos em cada coluna'. Certifique-se de que está definido para um valor grande o suficiente para exibir todos os caracteres.