Sql server 允许用户访问函数列表的脚本。

Sql server 允许用户访问函数列表的脚本。,sql-server,function,Sql Server,Function,我需要为SQL数据库中的所有函数授予用户权限。我需要在每天恢复的数据库上安排此作业 恢复后,用户需要获得该功能的“选择”权限。下面是手动操作的屏幕截图。 如何为所有函数编写此操作的脚本。下面是获取该数据库中所有函数的脚本。有人能告诉我循环此函数并授予“选择权限”的命令吗 谢谢你抽出时间 USE DBNAME; GO SELECT name AS function_name ,SCHEMA_NAME(schema_id) AS schema_name ,type_desc FROM sys.ob

我需要为SQL数据库中的所有函数授予用户权限。我需要在每天恢复的数据库上安排此作业

恢复后,用户需要获得该功能的“选择”权限。下面是手动操作的屏幕截图。

如何为所有函数编写此操作的脚本。下面是获取该数据库中所有函数的脚本。有人能告诉我循环此函数并授予“选择权限”的命令吗

谢谢你抽出时间

USE DBNAME;
GO
SELECT name AS function_name
,SCHEMA_NAME(schema_id) AS schema_name
,type_desc
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%'
order by type_desc;
GO

我知道这可能不是最好的解决方案,但实现这一点的一种方法是使用光标。而不仅仅是将此代码放在您的a作业中,该作业将在数据库恢复和完成后运行。请注意,此代码实际上并没有
授予
权限,而只是打印出
授予
语句,您需要验证fy确认它是您想要的,而不是注释掉
PRINT
行并取消注释
EXEC

DECLARE @function_name NVARCHAR(250);

DECLARE fun_cursor CURSOR 
FOR
    SELECT SCHEMA_NAME(schema_id) + '.' + name
        FROM sys.objects
        WHERE type_desc LIKE '%FUNCTION%'

OPEN fun_cursor

FETCH NEXT FROM fun_cursor
INTO @function_name

WHILE @@FETCH_STATUS = 0 
    BEGIN
        PRINT 'GRANT SELECT ON ' + @function_name + ' TO MYUSER' --Used for debugging
        --EXEC sp_executesql N'GRANT SELECT ON @function_name TO MYUSER',@function_name
FETCH NEXT FROM fun_cursor
INTO @function_name
    END

CLOSE fun_cursor;
DEALLOCATE fun_cursor;

注意:请注意:请不要评论为什么游标不好,而是在您自己的答案中提供另一种解决方案。

屏幕截图顶部有一个框,上面写着“脚本”“--它将生成一个脚本来应用您选择的值。这有帮助吗?游标确实不好,但它们存在的原因是:有时你需要它们。