授予服务器角色SQL Server 2008R2

时间:2017-09-13 06:54:15

标签: sql-server

我有一个工具可以更新我的sql表' eptrack'以下信息

服务器,实例,用户ID,访问,开始日期和到期日。

每次更新此表时,触发器都会启动一个作业,该作业又连接到相应的服务器/实例并授予所请求的服务器角色。

我可以通过以下查询授予角色。

exec sp_addsrvrolemember'na\admin_Test1', 'sysadmin'

但是,当我尝试通过以下查询从表中选择此信息时,我收到错误。

EXEC sp_addrolemember '(select userid from eptrack)' , '(select access from eptrack)'

我是否可以获得有关授予从表中为同一个表中的userid选择的服务器角色的查询的帮助

4 个答案:

答案 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和访问权。