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

sql server中存储过程的执行权限问题,sql,sql-server,sql-server-2008,tsql,sql-server-2005,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存

我在不同的客户机上使用了很多存储过程,对于少数客户机,有用户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
怎么样

怎么样


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

如果用户ID('AdminRole')不为空 授予[AdminRole]执行权限 其他的
打印“数据库中不存在AdminRole”

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

如果用户ID('AdminRole')不为空 授予[AdminRole]执行权限 其他的
打印“数据库中不存在AdminRole”

不确定解决方案中的“AdminRole”实际上是SQL登录、SQL用户还是SQL数据库角色

如果“AdminRole”是SQL用户(在数据库级别)或SQL角色(在数据库级别;语法相同),并且您希望检查它是否存在(而不是检查当前用户是AdminRole还是AdminRole的ismember),请执行以下操作:

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


不确定解决方案中的“AdminRole”实际上是SQL登录、SQL用户还是SQL数据库角色

如果“AdminRole”是SQL用户(在数据库级别)或SQL角色(在数据库级别;语法相同),并且您希望检查它是否存在(而不是检查当前用户是AdminRole还是AdminRole的ismember),请执行以下操作:

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


这是在DB级别,不在每个存储过程中运行吗?这是在DB级别,不在每个存储过程中运行吗?
IF DATABASE_PRINCIPAL_ID('AdminRole') IS NOT NULL
IF EXISTS(SELECT name FROM sys.database_principals WHERE name='AdminRole')
BEGIN
    -- do your GRANT here
END
IF EXISTS(SELECT name FROM sys.server_principals WHERE name='AdminRole')
BEGIN
    -- do your GRANT here
END