sql >> Database >  >> RDS >> Sqlserver

SQL Server - Hoe geef ik leestoegang tot ALLE databases aan een login?

Een manier zou zijn om "Resultaten op tekst" in te stellen in het zoekmenu in SSMS en vervolgens het onderstaande uit te voeren.

Het brengt de wijziging niet echt aan, maar genereert een script dat u kunt bekijken en uitvoeren.

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' 

Of je zou kunnen kijken naar sys.sp_MSforeachdb zoals hier of de verbeterde versie van Aaron Bertrand hier

Als u niet alle tekens ziet wanneer u dit uitvoert, opent u de Query-opties voor tekst en controleert u de instelling voor 'Maximum aantal tekens dat in elke kolom wordt weergegeven'. Zorg ervoor dat dit is ingesteld op een waarde die groot genoeg is om alle tekens weer te geven.



  1. Problemen met het gebruik van pg_search met een polymorfe associatie

  2. Onverwacht resultaat van multiset-toewijzing in Oracle SQL

  3. Hoe kan ik JPA-joinkolomnamen specificeren?

  4. django.db.utils.ProgrammingError:relatie bot_trade bestaat niet