我正在尝试通过网页自动授予和撤销用户帐户的服务器角色。 在页面中输入的详细信息将存储在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"
请协助解决此问题。
答案 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';