我有很多存储过程用于不同的客户端,少数客户端有一个用户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
答案 0 :(得分:1)
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