2012-04-12 133 views
0

我有很多用于不同客户端的存储过程,因为少数客户端有一个用户需要为AdminRole添加AdminRole和执行权限,因为少数客户端没有用户AdminRole和没有必要拥有执行权限。存储过程在sql server中的执行权限问题

每个存储过程具有

对于前:

CREATE PROCEDURE PROCEDURENAME AS 

SELECT FIRSTNAME FROM TABLE1 

GO 

GRANT EXECUTE ON PROCEDURENAME TO ADMINROLE 

GO 

这一行到底,但是这无法在没有管理员角色来执行。我如何在SQL存储过程中实现这个逻辑?

If userrole contains AdminRole then 

    --Execute these 2 lines 

GRANT EXECUTE ON PROCEDURENAME TO ADMINROLE 
GO 

else 

'Do nothing 

回答

1

不知道如果在你的解决方案“AdminRole”其实SQL登录,SQL用户或SQL数据库角色

如果“AdminRole”是SQL的用户(在数据库级别)或SQL角色(在数据库级;相同的语法),并要检查,如果存在的话(而不是检查当前用户是否AdminRole或AdminRole的ismember),这样做:

IF EXISTS(SELECT name FROM sys.database_principals WHERE name='AdminRole') 
BEGIN 
    -- do your GRANT here 
END 

如果“AdminRole”是SQL登录(在服务器级别) ,请执行以下操作:

IF EXISTS(SELECT name FROM sys.server_principals WHERE name='AdminRole') 
BEGIN 
    -- do your GRANT here 
END 
1

,如果有大量的存储过程,你想ADMINROLE有执行权限数据库中的所有存储的特效运行以下命令

IF USER_ID ('AdminRole')IS NOT NULL 授予执行[AdminRole] ELSE 打印'AdminRole在数据库中不存在'

+0

这是数据库级别而不是在每个存储过程中运行? – Sharpeye500 2012-04-12 20:07:11