Sql server 更改多个安全帐户的角色
我在sql数据库上有许多安全帐户,我想通过简单的字符串比较来删除/添加角色Sql server 更改多个安全帐户的角色,sql-server,Sql Server,我在sql数据库上有许多安全帐户,我想通过简单的字符串比较来删除/添加角色 基本上我想列出所有 帐目 筛选出未启动的帐户 使用“MyDomain\” 删除角色A 添加角色B 现在我发现我用它列出了所有的帐户和。我的问题是,我不知道如何从中“获取”输出并使用它 我的第一次尝试是基于反馈的解决方案 DROP TABLE [dbo].[XTemp] create table XTemp(DbRole sysname,MemberName sysname,MemberSID varbinary(85)
假设您使用的是SQL 2005或更高版本,并且在不带参数的情况下执行
sp\u helprolember
,这就是运行sp\u helprolember
的查询(使用sp\u helptext
提取):
这将使您能够将所需信息收集到临时表中
如果您希望坚持记录的行为,可以将SP的输出存储到临时表中:
create table #t
(DbRole sysname,
MemberName sysname,
MemberSID varbinary(85)
)
insert #t
exec sp_helprolemember
select * from #t
编辑
有两种方法可以使用此数据修改系统。一种是使用光标:
DECLARE @memberName sysname
DECLARE curMember CURSOR fast_forward FOR
SELECT MemberName
FROM #t
WHERE MemberName LIKE 'Domain\%'
OPEN curMember
FETCH NEXT FROM curMember INTO @memberName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC sp_addrolemember 'OldRole', @memberName
FETCH NEXT FROM curMember INTO @memberName
END
CLOSE curMember
DEALLOCATE curMember
另一种是使用动态SQL:
DECLARE @sql NVARCHAR(MAX),
SELECT @sql = 'EXEC sp_addrolemember ''OldRole'', ''' + MemberName + ''''
FROM #t
WHERE MemberName LIKE 'Domain\%'
EXEC sp_executesql @stmt = @sql
正如您所看到的,动态SQL版本更紧凑,但需要更多的努力来维护
请记住,在执行任一语句后,从
sp\u helprolemember
提取到表中的数据不再是最新的,可能需要刷新。您可以使用Excel生成SQL查询-我知道这听起来很蹩脚,但它非常简单和强大。它特别适合于必须执行一次或只执行一次的任务
=“EXEC sp_dropsrvrolemember'&A1&',“sysadmin'
)为a列中存储的值生成查询(当然,该公式可以引用多个包含输入数据的列,并生成非常复杂的查询)谢谢,这似乎是朝着正确的方向发展。但是我不知道如何“使用它”我的尝试是这样的:(我在测试时存储在“真实”表中)@EKS-我建议您编辑问题,将添加到pastebin的片段和您的问题包括在内-它将帮助问题的未来用户
DECLARE @sql NVARCHAR(MAX),
SELECT @sql = 'EXEC sp_addrolemember ''OldRole'', ''' + MemberName + ''''
FROM #t
WHERE MemberName LIKE 'Domain\%'
EXEC sp_executesql @stmt = @sql