请看下面的快照。我想知道为什么我不能用下面的代码删除权限。但我可以使用 GUI 删除权限。
REVOKE ALL ON OBJECT::[dbo].[Table1] FROM [PUBLIC];
请看下面的快照。我想知道为什么我不能用下面的代码删除权限。但我可以使用 GUI 删除权限。
REVOKE ALL ON OBJECT::[dbo].[Table1] FROM [PUBLIC];
它在 SQL Server 2005 上对此进行了测试,并且查询工作正常。但是,不要期望表格属性对话框会自动更新,即使在前后移动到另一个页面(如存储)之后也不会自动更新。您必须关闭并重新打开对话框才能看到修改。
我通过分步运行以下脚本来检查这一点:
资料来源:如何列出 SQL Server 中数据库的公共角色的权限。
grant select, insert, update on dbo.Table1 to public
GO
SELECT a.[name] + ' ' + v.[name] + ' ON ' + QuoteName(oo.[name])
+ '.' + QuoteName(o.[name]) + ' TO ' + QuoteName(u.[name])
FROM dbo.sysprotects AS p
JOIN master.dbo.spt_values AS a
ON (a.number = p.protecttype
AND 'T' = a.type)
JOIN master.dbo.spt_values AS v
ON (v.number = p.action
AND 'T' = v.type)
JOIN dbo.sysobjects AS o
ON (o.id = p.id)
JOIN dbo.sysusers AS oo
ON (oo.uid = o.uid)
JOIN dbo.sysusers AS u
ON (u.uid = p.uid)
WHERE 'public' = u.name
GO
revoke all on object::dbo.Table1 to public
GO
-- Run query again
请注意,使用revoke all时会发出警告:ALL 权限已被弃用,仅为了兼容性而维护。它并不意味着在实体上定义的所有权限。