在sql server中执行存储过程的权限问题

时间:2012-04-12 18:06:41

标签: sql sql-server sql-server-2008 tsql sql-server-2005

我有很多存储过程用于不同的客户端,少数客户端有一个用户AdminRole,需要为AdminRole添加执行权限,少数客户端没有用户AdminRole,也没有必要具有执行权限。

每个存储过程都有

例如:

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

3 个答案:

答案 0 :(得分:1)

DATABASE_PRINCIPAL_ID

怎么样?
IF DATABASE_PRINCIPAL_ID('AdminRole') IS NOT NULL

答案 1 :(得分:1)

如果存在大量存储过程并且您希望ADMINROLE对数据库中的所有存储过程具有执行权限,请运行以下命令

如果USER_ID('AdminRole')不是NULL 授予执行[AdminRole] 其他 打印'AdminRole在数据库中不存在'

答案 2 :(得分:1)

不确定您的解决方案“AdminRole”是否实际上是SQL登录,SQL用户或SQL数据库角色

如果“AdminRole”是SQL用户(在数据库级别)或SQL角色(在数据库级别;相同的语法),并且您想检查它是否存在(而不是检查当前用户是AdminRole还是AdminRole成员) ),做:

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