以下のスナップショットを参照してください。次のコードで許可を削除できないのはなぜだろうと思っていました。しかし、GUI を使用してアクセス許可を削除できます。
OBJECT::[dbo].[Table1] FROM [PUBLIC] のすべてを取り消します。
以下のスナップショットを参照してください。次のコードで許可を削除できないのはなぜだろうと思っていました。しかし、GUI を使用してアクセス許可を削除できます。
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 パーミッションは非推奨であり、互換性のためにのみ維持されています。エンティティに定義されたすべての権限を意味するわけではありません。