You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何单语句撤销用户所有表权限?解析两类撤销语句差异

撤销SQL Server表权限:两种语句的差异解析

你的推测完全在点子上!这两种撤销权限语句的核心区别,就是它们作用的范围边界——一个是精准针对dbo架构下的单张表,另一个则可以覆盖更大范围的对象(比如整个架构甚至所有架构)。下面详细拆解:

第一种:精准撤销单表权限(仅针对指定架构的特定表)

这种写法是最常用的“精准打击”,只收回用户在dbo架构下某一张特定表的指定权限:

REVOKE SELECT, UPDATE, DELETE, INSERT, EXECUTE, REFERENCES, VIEW DEFINITION
ON dbo.[目标表名]
TO [你的用户名];
  • 适用场景:你只需要收回用户对某一张表的权限,不想影响他对其他表或其他架构对象的正常操作。
  • 注意:如果你的表不在dbo架构下,一定要替换成对应的架构名(比如sales.订单表),否则SQL Server会在当前会话的默认架构里找这张表,找不到就会报错。

第二种:批量撤销架构级权限(覆盖架构下所有对象)

如果你的第二种语句是类似下面这种,那它就是一次性撤销用户对整个架构下所有对象的权限:

REVOKE SELECT, UPDATE, DELETE, INSERT, EXECUTE, REFERENCES, VIEW DEFINITION
ON SCHEMA::dbo
TO [你的用户名];

这种写法会把用户在dbo架构下所有表、视图、存储过程、函数等对象的指定权限全部收回,范围比第一种大得多。

要是你需要覆盖所有架构下的对象,SQL Server没有直接的SCHEMA::*语法,得用动态SQL循环所有架构来执行:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'
REVOKE SELECT, UPDATE, DELETE, INSERT, EXECUTE, REFERENCES, VIEW DEFINITION
ON SCHEMA::' + QUOTENAME(s.name) + N'
TO [你的用户名];'
FROM sys.schemas s;

EXEC sp_executesql @sql;

关于SSMS权限查看的几个关键提醒

在SSMS里右键表→属性→权限,选中用户后看到的权限,容易踩几个坑:

  • 权限来源:这里显示的权限可能是直接授予的,也可能是通过数据库角色继承的(比如用户属于db_datareader角色,就会自动有所有表的SELECT权限)。如果你用REVOKE只撤销了直接授予的权限,继承的权限还会存在,这时候要么用DENY强制拒绝(优先级高于所有授予权限),要么把用户从对应的角色里移除。
  • REVOKE vs DENY:REVOKE是“收回之前给的权限”,相当于回到没授权的初始状态;DENY是“强制禁止”,哪怕用户通过角色有相关权限也会失效。
  • 刷新视图:修改权限后,记得刷新SSMS的权限界面(或者重新打开表属性窗口),不然可能看到的还是旧的权限状态。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:40:17