我有一个工具可以更新我的sql表' eptrack'以下信息
服务器,实例,用户ID,访问,开始日期和到期日。
每次更新此表时,触发器都会启动一个作业,该作业又连接到相应的服务器/实例并授予所请求的服务器角色。
我可以通过以下查询授予角色。
exec sp_addsrvrolemember'na\admin_Test1', 'sysadmin'
但是,当我尝试通过以下查询从表中选择此信息时,我收到错误。
EXEC sp_addrolemember '(select userid from eptrack)' , '(select access from eptrack)'
我是否可以获得有关授予从表中为同一个表中的userid选择的服务器角色的查询的帮助
答案 0 :(得分:0)
您应该使用光标来浏览表格,一次获得1行,分配2个变量并将它们传递给sp_addsrvrolemember
,如下所示:
declare @eptrack table (userid sysname, access sysname);
insert into @eptrack values ('na\admin_Test1', 'sysadmin');
declare @rolename sysname, @membername sysname;
select @rolename = access, @membername = userid
from @eptrack;
exec sp_addsrvrolemember @membername, @rolename;
答案 1 :(得分:0)
根据sp_addrolemember
,它也接受变量
-- Syntax for SQL Server and Azure SQL Database
sp_addrolemember [ @rolename = ] 'role',
[ @membername = ] 'security_account'
所以你可以试试下面的东西
declare @rolename sysname,
@membername sysname
select @rolename='db_Datareader',@membername='test'
EXEC sp_addrolemember @rolename,@membername
上面的选择可以来自您的表格,如果有多个结果来自选择,这将无法按预期工作,您可能希望有一个方法一次只跟踪/获取一行
答案 2 :(得分:0)
感谢您的帮助。我尝试了如下所述的上述查询
声明@rolename sysname, @membername sysname
select @ rolename =(从eptrack选择访问权限),@ membername =(从eptrack中选择userid) EXEC sp_addrolemember @ rolename,@ membername
我看到用户ID不存在的错误。我刚刚在表中插入了信息,然后执行了查询。
答案 3 :(得分:0)
这很有效,谢谢。但是我们正在输入用户ID并手动访问,我们需要从表中选择的那些信息
声明@eptrack表(userid sysname,access sysname);
插入@eptrack值((从eptrack中选择userid),(从eptrack中选择访问));
声明@rolename sysname,@ membername sysname;
选择@rolename = access,@ membername = userid 来自@eptrack;
exec sp_addsrvrolemember @membername,@ rolename;
我尝试了上面的一个,看到错误用户ID不是有效登录。 想检查我是否正在输入选择命令?
该表将频繁插入新行,并且每次插入新值时,查询都需要从表中选择用户ID和访问权。