sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server - Hur ger man läsåtkomst till ALLA databaser till en inloggning?

Ett sätt skulle vara att ställa in "Resultat till text" på frågemenyn i SSMS och sedan köra nedan.

Den gör faktiskt inte ändringen utan genererar ett skript som du kan granska och köra.

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 så kan du titta på sys.sp_MSforeachdb som här eller Aaron Bertrands förbättrade version här

Om du inte ser alla tecken när du kör detta, öppnar du frågealternativ för text och kontrollerar inställningen för 'Maximalt antal tecken som visas i varje kolumn'. Se till att detta är inställt på ett värde som är tillräckligt stort för att visa alla tecken.



  1. camelCase kolumn i postgresql databas i rails (ActiveRecord)

  2. Vad är skillnaden mellan VARCHAR och CHAR?

  3. MySQL:indexera json-arrayer med variabel längd?

  4. SQLiteException med WHERE +KEY_Date+='+date+'