2010-02-03 56 views

回答

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

相关问题