2010-05-10 77 views
0

所有,SQL Server 2005的用户和角色

我试图编写脚本在SQL Server Management数据库Studio 2005中 在我的数据库用户属于不同的角色。 不幸的是我找不到如何编写用户和角色之间的关系。

感谢,

中号

回答

0

下面是一些代码,我们用它来先检查用户是否已经映射到一个角色,如果没有,做的映射。您应该能够在使用database_prindentals和database_role_members的顶部使用TSQL,并使用它来提取数据库中的关系。

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

的角色成员被存储在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; 

用户仍然可以通过他们的服务器的固定角色的成员,存储在sys.server_role_memebers并需要向sys.server_principals被连接获得额外的特权。