批量赋予用户所有存储过程或函数的执行权限

--*********************查询数据库所有对象**********************************

--存储过程
select * from sysobjects where xtype='P' --表值函数  xtype='IF',标量值函数  xtype='FN',聚合函数 xtype='AF'

--*********************批量生成权限操作SQL**********************************

--存储过程
select 'GRANT EXEC ON dbo.['+name+'] TO 数据库用户名;' from sysobjects where xtype='P'
--表值函数
--select 'GRANT EXEC ON dbo.['+name+'] TO 数据库用户名;' from sysobjects where xtype IN('IF','TF') --表值函数不需要单独赋予权限
--标量值函数
select 'GRANT EXEC ON dbo.['+name+'] TO 数据库用户名;' from sysobjects where xtype='FN'
--聚合函数
select 'GRANT EXEC ON dbo.['+name+'] TO 数据库用户名;' from sysobjects where xtype='AF'


--*********************查询拥有对象具体操作权限**********************************

--查询用户是否拥有存储过程(proc_AddQrcode)权限
SELECT * FROM sys.database_permissions WHERE major_id=OBJECT_ID('dbo.proc_AddQrcode')

--*********************赋予用户对象操作权限**********************************

--赋予存储过程(proc_AddQrcode)执行权限 给用户lyx
GRANT EXECUTE ON dbo.proc_AddQrcode TO lyx;

--赋予标量值函数(f_AddDateByType)执行权限 给用户lyx
GRANT EXECUTE ON dbo.f_AddDateByType TO lyx;

其他权限:

INSERT
DELETE
UPDATE
SELECT
CONNECT
EXECUTE
REFERENCES
TAKE OWNERSHIP
VIEW DEFINITION
ALTER


--*******************************************************

SELECT OBJECT_ID(name),name from sysobjects where xtype='FN' AND OBJECT_ID(name)=855415857
--SELECT OBJECT_ID('pro_DeleteAndCopyHsCase')

SELECT major_id,TB.name,COUNT(DISTINCT TA.type)
FROM sys.database_permissions TA
LEFT JOIN sysobjects TB ON TA.major_id=OBJECT_ID(TB.name)
WHERE TB.xtype='P' --'FN'
GROUP BY major_id,TB.name
HAVING COUNT(DISTINCT TA.type)>1


SELECT * FROM sys.database_permissions WHERE major_id=855415857

原文地址:https://www.cnblogs.com/My-Dream/p/11189699.html