Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server - Comment accorder un accès en lecture à TOUTES les bases de données à une connexion ?

Une façon serait de définir "Résultats en texte" dans le menu de requête de SSMS, puis d'exécuter ce qui suit.

Il n'effectue pas réellement la modification, mais génère un script que vous pouvez examiner et exécuter.

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' 

Ou vous pouvez regarder sys.sp_MSforeachdb comme ici ou la version améliorée d'Aaron Bertrand ici

Si vous ne voyez pas tous les caractères lorsque vous l'exécutez, ouvrez les options de requête pour le texte et vérifiez le paramètre "Nombre maximum de caractères affichés dans chaque colonne". Assurez-vous que cette valeur est suffisamment grande pour afficher tous les caractères.