授予和撤消SQL服务器角色

时间:2017-11-08 07:47:24

标签: sql sql-server tsql

我正在尝试通过网页自动授予和撤销用户帐户的服务器角色。 在页面中输入的详细信息将存储在SQL表中,我创建了一个作业,用于从表中选择所需信息并授予/撤消该角色。 当表中包含1个用户信息时,代码工作正常。 但是,当表包含多个用户时,我发现了一个问题。

我用来向用户授予角色的查询如下所示。

DECLARE @epfunc TABLE
(userid SYSNAME,
 access SYSNAME
);
INSERT INTO @epfunc
VALUES
(
(
    SELECT userid
    FROM epfunc
),
(
    SELECT access
    FROM epfunc
)
);
DECLARE @rolename SYSNAME, @membername SYSNAME;
SELECT @rolename = access,
       @membername = userid
FROM @epfunc;

execute sp_addsrvrolemember @membername, @rolename

epfunc表包含以下列 " Servername,Instancename,Databasename,Environment,userid,access,startdate,expirydate,Grantedby"

请协助解决此问题。

2 个答案:

答案 0 :(得分:0)

DECLARE @rolename SYSNAME, @membername SYSNAME;
SELECT @rolename = access,
       @membername = userid
FROM @epfunc;

当你有多行时,上面的代码部分会存储结果的最后一行,所以如果你有多个用户,它就不会按预期工作..

我会使用光标下面的某些东西(伪代码)

    declare cursor cs
    for select * from @epfunc

    open cs
    fetch next from cs into 
    @rolename,@membername

WHILE @@FETCH_STATUS = 0  
BEGIN   
execute sp_addsrvrolemember @membername, @rolename
increment cursor

end
close and deallocate cursor

答案 1 :(得分:0)

REVOKE ALL PRIVILEGES ON `classicmodels` .* from 'cars'@'localhost';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER,CREATE TEMPORARY TABLE,LOCK
TABLES,CREATE view,EVENT,TRIGGER,show view,CREATE routine,ALTER routine,EXECUTE on `classicmodels`.* TO
'cars'@'localhost';