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

SQL Server - Hvordan giver man læseadgang til ALLE databaser til et login?

En måde ville være at indstille "Resultater til tekst" på forespørgselsmenuen i SSMS og derefter udføre nedenstående.

Det foretager faktisk ikke ændringen, men genererer et script, som du kan gennemgå og udføre.

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' 

Eller du kan se på sys.sp_MSforeachdb som her eller Aaron Bertrands forbedrede version her

Hvis du ikke kan se alle tegnene, når du kører dette, skal du åbne Forespørgselsindstillinger for tekst og kontrollere indstillingen for 'Maksimalt antal tegn vist i hver kolonne'. Sørg for, at denne er indstillet til en værdi, der er stor nok til at vise alle tegn.



  1. Oracle:tabellen muterer

  2. Forklaring af en BLOB og en CLOB

  3. Opdel en række baseret på en kolonneværdi

  4. Sådan importeres en CSV-fil til en MySQL-tabel