求SQL Server 2014中撤销特定用户组对指定数据库所有存储过程执行权限的脚本
嘿,我来帮你搞定这个需求!针对SQL Server 2014,要撤销特定用户组对指定数据库内所有存储过程的执行权限,完全不用手动逐个写语句——我们可以借助系统视图动态生成撤销脚本,高效又准确。
完整实现脚本
你只需要替换脚本里的两个占位符,就能直接用:
[YourTargetDB]:替换成你要操作的数据库名称[YourUserGroup]:替换成需要撤销权限的用户组名称
-- 切换到目标数据库 USE [YourTargetDB]; GO -- 声明变量存储动态SQL语句 DECLARE @RevokeSQL NVARCHAR(MAX) = N''; -- 生成所有存储过程的撤销执行权限语句 SELECT @RevokeSQL += N' REVOKE EXECUTE ON OBJECT::[' + s.name + N'].[' + p.name + N'] TO [' + [YourUserGroup] + N']; ' FROM sys.procedures p INNER JOIN sys.schemas s ON p.schema_id = s.schema_id -- 可选:如果需要排除特定存储过程,添加WHERE子句 -- WHERE p.name NOT IN ('ExcludedProc1', 'ExcludedProc2') -- 先预览生成的语句(可选,建议先检查) PRINT @RevokeSQL; -- 执行撤销操作(确认预览无误后取消注释) -- EXEC sp_executesql @RevokeSQL; GO
关键说明
- 脚本逻辑:
- 通过
sys.procedures获取数据库内所有存储过程,关联sys.schemas拿到存储过程所属的架构(避免同名不同架构的存储过程被遗漏) - 动态拼接
REVOKE EXECUTE语句,确保每个存储过程都被覆盖
- 通过
- 安全建议:
- 先运行
PRINT @RevokeSQL查看生成的所有语句,确认没有误操作再执行EXEC sp_executesql - 确保你拥有足够的权限(比如
CONTROL数据库权限,或者针对每个存储过程的ALTER权限)
- 先运行
- 自定义调整:
- 如果需要保留某些存储过程的权限,直接在
WHERE子句里排除对应的存储过程名称即可
- 如果需要保留某些存储过程的权限,直接在
这样就能一次性完成所有存储过程的权限撤销啦!
内容的提问来源于stack exchange,提问作者user819774




