You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求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
关键说明
  1. 脚本逻辑
    • 通过sys.procedures获取数据库内所有存储过程,关联sys.schemas拿到存储过程所属的架构(避免同名不同架构的存储过程被遗漏)
    • 动态拼接REVOKE EXECUTE语句,确保每个存储过程都被覆盖
  2. 安全建议
    • 先运行PRINT @RevokeSQL查看生成的所有语句,确认没有误操作再执行EXEC sp_executesql
    • 确保你拥有足够的权限(比如CONTROL数据库权限,或者针对每个存储过程的ALTER权限)
  3. 自定义调整
    • 如果需要保留某些存储过程的权限,直接在WHERE子句里排除对应的存储过程名称即可

这样就能一次性完成所有存储过程的权限撤销啦!

内容的提问来源于stack exchange,提问作者user819774

火山引擎 最新活动