0

我有很多跨不同客户端使用的存储过程,对于少数客户端,有一个用户 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
4

3 回答 3

1

DATABASE_PRINCIPAL_ID怎么样

IF DATABASE_PRINCIPAL_ID('AdminRole') IS NOT NULL
于 2012-04-12T18:13:32.107 回答
1

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

IF USER_ID('AdminRole') IS NOT NULL GRANT EXECUTE T​​O [AdminRole] ELSE Print 'AdminRole 在数据库中不存在'

于 2012-04-12T19:19:27.583 回答
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
于 2012-04-13T00:13:20.837 回答