sql server中存储过程的执行权限问题
我在不同的客户机上使用了很多存储过程,对于少数客户机,有用户AdminRole,需要为AdminRole添加执行权限;对于少数客户机,没有用户AdminRole,也不需要有执行权限 每个存储过程都具有 例如: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存
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