技术求助:如何为SQL Server所有函数授予ALTER权限
为SQL Server所有函数授予ALTER权限的正确方法
你提供的代码GRANT ALTER ON FUNCTION::dbo TO [username]存在语法错误,FUNCTION::后需指定具体函数名,无法直接通过架构名批量授予函数权限。以下是两种可行方案:
方案1:授予指定架构下所有对象的ALTER权限(含函数)
如果允许用户修改该架构下的所有对象(表、视图、函数等),可直接对架构授权:
GRANT ALTER ON SCHEMA::dbo TO [username];
方案2:仅授予所有函数的ALTER权限
若需严格仅针对函数授权,需通过动态SQL批量生成授权语句(覆盖所有函数类型):
DECLARE @SQL NVARCHAR(MAX) = N''; SELECT @SQL += N'GRANT ALTER ON OBJECT::' + QUOTENAME(s.name) + N'.' + QUOTENAME(o.name) + N' TO [username];' + CHAR(10) FROM sys.objects o JOIN sys.schemas s ON o.schema_id = s.schema_id WHERE o.type IN ('FN', 'IF', 'TF', 'FS', 'FT'); -- 包含标量、内联表值、多语句表值、CLR标量、CLR表值函数 EXEC sp_executesql @SQL;
可选调整
如果只需针对特定架构(如dbo)下的函数,在WHERE子句中追加条件:
AND s.name = 'dbo'
内容的提问来源于stack exchange,提问作者Prakash
相关产品推荐
相关产品推荐

