问题描述
我有一个需要授予执行权限的功能列表,我发现查询应该像这样执行
GRANT EXECUTE ON [dbo].[FunctionName] TO [GroupName]
但是,由于数据库中有40个函数,因此我需要通过更新函数名称来执行40次。当我拥有新功能时,我需要以相同的方式执行新功能,我的问题是是否存在一个脚本/函数来获取数据库中所有函数的名称并仅执行一次。我可以使用以下代码获取功能列表:
SELECT name AS function_name
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%'
我还创建了一个函数来执行它:
ALTER function [dbo].[listFunction]()
returns int
AS
BEGIN
declare @Result int;
declare @ListFn nvarchar(100);
set @ListFn = (
SELECT name AS function_name
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%'
);
if @ListFn=null
set @Result = 1
else
set @Result = 0
return @Result
end
但是如何迭代每个函数并授予执行权限,那么还有什么帮助呢?
编辑:我已经使用chema对此进行了编辑
DECLARE @SchemaName varchar(max)
DECLARE @GroupName varchar(max)
SET @SchemaName = 'dbo'
SET @GroupName = '[groupname]'
select 'GRANT EXECUTE ON OBJECT::' + @SchemaName + '.' + P.name + ' to ' + @GroupName
from sys.objects P
inner join sys.schemas S on P.schema_id = S.schema_id
where S.name = @SchemaName
and P.type_desc LIKE '%FUNCTION%'
编辑2:我创建了一个执行授予的过程,因为它不能与功能一起使用,所以我执行了该过程,但未显示任何误解,但是我不知道它是否正确:
CREATE PROCEDURE ExecuteAllFunctions
AS
BEGIN
DECLARE @i int
declare @Result int;
declare @ListFn nvarchar(100);
DECLARE @a TABLE (fnct nvarchar(max))
DECLARE @SchemaName varchar(max)
--DECLARE @a TABLE (id uniqueidentifier)
DECLARE @GroupName varchar(max)
SET @SchemaName = 'dbo'
SET @GroupName = '[GroupName]'
INSERT INTO @a select 'GRANT EXECUTE ON OBJECT::' + @SchemaName + '.' + P.name + ' to ' + @GroupName
from sys.objects P
inner join sys.schemas S on P.schema_id = S.schema_id
where S.name = @SchemaName
and P.type_desc LIKE '%FUNCTION%'
--EXEC @ListFn
--SET @i = 1
--WHILE (@i <= (SELECT MAX(fnct) FROM @a))
-- BEGIN
-- set @ListFn = (select fnct from @a a where a.fnct=)
-- SET @i = @i + 1
-- END
--if @ListFn=null
--set @Result = 1
--else
--set @Result = 0
--return @Result
end
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)