存储过程在sql server中的执行权限问题
问题描述:
我有很多用于不同客户端的存储过程,因为少数客户端有一个用户需要为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
答
不知道如果在你的解决方案“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
答
,如果有大量的存储过程,你想ADMINROLE有执行权限数据库中的所有存储的特效运行以下命令
IF USER_ID ('AdminRole')IS NOT NULL 授予执行[AdminRole] ELSE 打印'AdminRole在数据库中不存在'
这是数据库级别而不是在每个存储过程中运行? – Sharpeye500 2012-04-12 20:07:11