2010-05-10 9 views
0

Tous,SQL Server 2005 Utilisateurs et rôles

Je suis en train de scripter une base de données dans SQL Server Management Studio 2005. Dans mes utilisateurs de bases de données appartiennent à des rôles différents. Malheureusement, je n'arrive pas à trouver le moyen d'écrire un script sur la relation entre les utilisateurs et les rôles.

Merci,

M

Répondre

0

Voici un code que nous utilisons pour d'abord vérifier si un utilisateur est déjà mis en correspondance avec un rôle, et sinon, de faire la cartographie. Vous devriez être en mesure de prendre le TSQL en haut qui utilise database_prinicipals et database_role_members et l'utiliser pour extraire les relations que vous avez dans votre base de données.

SELECT @sql = ' IF EXISTS (SELECT * FROM ' + @DatabaseName + '.sys.database_principals a 
      JOIN ' + @DatabaseName + '.sys.database_role_members b ON a.principal_id = b.role_principal_id 
      JOIN ' + @DatabaseName + '.sys.database_principals c ON b.member_principal_id = c.principal_id 
      WHERE a.Type = ''R'' AND a.Name = ''' + @CurrentDbRole + ''' 
      AND  c.type IN (''U'', ''S'') AND c.name = ''' + @MappedUser + ''')'     
     + ' BEGIN 
       PRINT ''''; 
       PRINT N''The [' + @MappedUser + '] user is already a member of the [' 
         + @CurrentDbRole + '] role in the [' + @DatabaseName + '] database. Skipping Role Member creation.''; 
       PRINT ''''; 
      END 
      ELSE 
      BEGIN 
       PRINT ''''; 
       PRINT N''Adding the [' + @MappedUser + '] database user as member of the [' + @CurrentDbRole 
         + '] role in the [' + @DatabaseName + '] database... ''; 
       PRINT ''''; 

       USE ' + @DatabaseName +'; 
       EXECUTE sp_addrolemember [' + @CurrentDbRole + '], [' + @MappedUser + ']; 

       PRINT ''''; 
       PRINT ''Completed adding the user to the role.''; 
       PRINT '''';    
      END; '; 
1

Les membres de rôle est stocké dans sys.database_role_members:

select u.name as UserName, 
    r.Name as RoleName 
from sys.database_principals u 
join sys.database_role_members m on u.principal_id = m.member_principal_id 
join sys.database_principals r on m.role_principal_id = p.principal_id; 

utilisateur peut encore obtenir des privilèges supplémentaires par leur serveur fixe membres des rôles, qui est stocké dans sys.server_role_memebers et doit être jointe à sys.server_principals.