Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server - Wie gewährt man einem Login Lesezugriff auf ALLE Datenbanken?

Eine Möglichkeit wäre, „Results to Text“ im Abfragemenü in SSMS festzulegen und dann das Folgende auszuführen.

Es nimmt die Änderung nicht wirklich vor, sondern generiert ein Skript, das Sie überprüfen und ausführen können.

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' 

Oder Sie könnten sich sys.sp_MSforeachdb ansehen wie hier oder Aaron Bertrands verbesserte Version hier

Wenn Sie beim Ausführen nicht alle Zeichen sehen, öffnen Sie die Abfrageoptionen für Text und überprüfen Sie die Einstellung für „Maximale Anzahl der in jeder Spalte angezeigten Zeichen“. Stellen Sie sicher, dass dieser Wert groß genug ist, um alle Zeichen anzuzeigen.