【发布时间】:2011-01-12 17:02:38
【问题描述】:
我正在尝试从多个数据库中的角色中删除用户。不确定用户是否可以在所有数据库中担任相同的角色。如何检查用户是否在角色中以及是否将用户从角色中删除。
例如 如果用户存在于角色中 开始 从角色中删除用户 结束
【问题讨论】:
标签: sql sql-server database roles
我正在尝试从多个数据库中的角色中删除用户。不确定用户是否可以在所有数据库中担任相同的角色。如何检查用户是否在角色中以及是否将用户从角色中删除。
例如 如果用户存在于角色中 开始 从角色中删除用户 结束
【问题讨论】:
标签: sql sql-server database roles
您可以将存储过程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 并没有什么坏处。
【讨论】:
这就是我所做的:
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;
【讨论】: