取消公众的许可

时间:2013-10-28 05:01:43

标签: sql-server tsql

请看下面的快照。我想知道为什么我不能删除以下代码的权限。但我可以使用GUI删除权限。

撤消所有对象:: [dbo]。[表1] FROM [PUBLIC];

enter image description here

1 个答案:

答案 0 :(得分:0)

它在SQL Server 2005上进行了测试,查询工作正常。但是,不要指望表“属性”对话框会自动更新,即使在向前移动并返回到另一个页面(如“存储”)之后也是如此。您必须关闭并重新打开对话框以查看修改。

我通过以下步骤运行以下脚本来检查:

来源:How to list permissions for Public Role for a database in 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

请注意,使用撤消所有时会发出警告:不赞成使用ALL权限,仅为兼容性而维护。它并不意味着在实体上定义了所有权限。