全,
我正在尝试在SQL Server Management Studio 2005中编写数据库脚本。在我的数据库中,用户属于不同的角色。不幸的是,我找不到如何描述用户和角色之间的关系。
谢谢,
我
发布于 2010-05-11 01:57:30
角色成员身份存储在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连接。
发布于 2010-05-11 01:23:13
下面是一些代码,我们用来首先检查用户是否已经映射到角色,如果没有,则执行映射。您应该能够将使用database_prinicipals和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; ';https://stackoverflow.com/questions/2804757
复制相似问题