Auteur de questions
Ajout de rôles pour un utilisateur dans une base de données

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,
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
-
-
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