检查角色是否由DB中的特定用户组成?

时间:2010-02-03 16:42:33

标签: sql sql-server database roles

我试图将用户从多个数据库中的角色中删除。不确定用户是否可以在所有数据库中担任相同的角色。如何检查用户是否在角色中以及是否将用户从角色中删除。

e.g。    IF用户存在于角色中    开始          从角色中删除用户    END

2 个答案:

答案 0 :(得分:3)

这就是我所做的:

IF EXISTS(SELECT *
          FROM sys.database_role_members AS RM
          JOIN sys.database_principals AS U
            ON RM.member_principal_id = U.principal_id
          JOIN sys.database_principals AS R
            ON RM.role_principal_id = R.principal_id
          WHERE U.name = @username
            AND R.name = @rolename)
EXEC sp_droprolemember @rolename, @username;

答案 1 :(得分:2)

您可以将存储过程sp_helpuser的输出存储在表变量中,并对其进行查询:

declare @groups table (
    UserName varchar(max),
    GroupName varchar(max),
    LoginName varchar(max),
    RefDBName varchar(max),
    DefSchemaName varchar(max),
    UserId int,
    SID varbinary(max)
)   

insert into @groups exec sp_helpuser 'TheUser'

if exists (select * from @groups where GroupName = 'TheRole')
    begin
    print 'Removing user from role...'
    exec sp_droprolemember 'TheRole', 'TheUser'
    end

但是,无论用户是否担任角色,执行sp_droprolemember都没有什么坏处。