none
Ajout de rôles pour un utilisateur dans une base de données RRS feed

  • Question

  • Bonjour,

    J'essaye d'ajouter des droits pour un utilisateur sur diverses bases de données. Actuellement, je fais des tests avec une base de test.

    Pour vous expliquez la situation initiale, je voulais mapper les droits à l'utilisateur depuis les propriétés de celui-ci. (Sécurité => Connexions => DOMAIN\User => Propriétés => Mappage de l'utilisateur).

    J'ai réussi à accéder au menu une seule fois, à la création de la connexion (et donc de l'utilisateur), j'ai pu mettre les droits sur quelques bases, mais c'est la galère. Aujourd'hui, je n'arrive plus à accéder à ce menu, ça plante continuellement, je suppose, à cause des 10000 bases de données à lister au départ.

    Donc je me suis orienté vers une autre approche, que je ne maîtrise pas du tout, mais soit.

    Du coup, j'ai lancé les commandes suivantes sur ma base de test pour affecter les droits :

    USE DBTEST;

    GRANT CONNECT TO "DOMAIN\User"

    EXEC sp_addrolemember 'db_datareader', 'DOMAIN\User'

    EXEC sp_addrolemember 'db_datawriter', 'DOMAIN\User'

    Ça marche, les droits sont bien ajoutés. Par contre, je ne comprends pas pourquoi, mais il m'ajoute un schéma dans la base de données. Pourquoi ?

    Le schéma est rajouté à l'emplacement suivant : Bases de données => DBTEST => Sécurité => Schémas et ce nomme du coup DOMAIN\User

    Je n'ai pas eu ce comportement en passant par le mappage dans management studio. Si vous avez une idée, je vous en serais reconnaissant.

    Merci d'avance.

    Cordialement,

    mardi 15 mars 2016 10:02

Toutes les réponses

  • Salut,

    En effet, en passant par le mappage de données tu n'a pas le même comportement.

    Le script généré par la GUI génère le script ci dessous, ce qui peut expliquer la différence de comportement

    USE DBTEST
    GO
    
    CREATE USER [DOMAIN\User] FOR LOGIN [DOMAIN\User]
    GO
    USE DBTEST
    GO
    ALTER ROLE [db_datareader] ADD MEMBER [DOMAIN\User]
    GO
    USE DBTEST
    GO
    ALTER ROLE [db_datawriter] ADD MEMBER [DOMAIN\User]
    GO


    Please mark this reply as answer if it solved your issue or vote as helpful if it helped so that other forum members can benefit from it

    mercredi 16 mars 2016 16:14
  • Bonjour,

    Un grand merci, je vais tester ça.

    Il me restera juste à trouver un moyen d'appliquer les droits pour mes 10000 bases.

    Si tu as une idée, je suis preneur.

    Cordialement,

    jeudi 17 mars 2016 10:32
  • Voila un moyen, il doit y en avoir plein d'autres mais celui la fonctionne assez bien et n'est pas très complexe :

    declare @SQL_CMD nvarchar(max);
    declare @SQL_CMD_2 nvarchar(max);
    set @SQL_CMD=N'
    
    CREATE USER [DOMAIN\User] FOR LOGIN [DOMAIN\User]
    
    ALTER ROLE [db_datareader] ADD MEMBER [DOMAIN\User]
    
    ALTER ROLE [db_datawriter] ADD MEMBER [DOMAIN\User]
    '
    
    
    declare @name varchar(max)
    DECLARE db_cursor CURSOR LOCAL FAST_FORWARD FOR 
    SELECT top 10 name
    FROM MASTER.dbo.sysdatabases
    WHERE name NOT IN ('master','model','msdb','tempdb') 
    
    OPEN db_cursor  
    FETCH NEXT FROM db_cursor INTO @name  
    
    WHILE @@FETCH_STATUS = 0  
    BEGIN  
         /*Script here*/  
    	 set @SQL_CMD_2=N' exec [' + @name + N']..sp_executesql @SQL_CMD'
    	 exec sp_executesql @SQL_CMD_2,N'@SQL_CMD nvarchar(max)',@SQL_CMD=@SQL_CMD
    
     
    FETCH NEXT FROM db_cursor INTO @name
    END
    CLOSE db_cursor  
    DEALLOCATE db_cursor

    Dans la variable @SQL_CMD, tu mets ton script d'autorisation

    Dans le curseur, tu donnes la listes des bases sur lesquelles tu dois appliquer l'ajout de user.

    Hesites pas a voter si ça marche pour toi ;)


    Please mark this reply as answer if it solved your issue or vote as helpful if it helped so that other forum members can benefit from it

    jeudi 17 mars 2016 11:18