Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server - Come concedere l'accesso in lettura a TUTTI i database a un accesso?

Un modo sarebbe impostare "Risultati su testo" nel menu delle query in SSMS, quindi eseguire quanto segue.

In realtà non apporta la modifica, ma genera uno script da rivedere ed eseguire.

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' 

Oppure potresti guardare sys.sp_MSforeachdb come qui o la versione migliorata di Aaron Bertrand qui

Se non vedi tutti i caratteri quando esegui questo, apri le Opzioni di query per il testo e controlla l'impostazione per "Numero massimo di caratteri visualizzati in ogni colonna". Assicurati che sia impostato su un valore sufficientemente grande da visualizzare tutti i caratteri.