特定のユーザーにのみ特定のスキーマへのアクセスを許可するため、特定のユーザーのdboスキーマに対するすべての権限を拒否しようとしています。私が次のことを試みると(saを使用)、
DENY CONTROL, ALTER ON SCHEMA :: dbo TO AppUser
私はこのメッセージを受け取ります:
Sa、dbo、エンティティ所有者、information_schema、sys、または自分へのアクセス許可を付与、拒否、または取り消すことはできません。
ユーザーのすべてのdboスキーマ権限を拒否することはできますか?
編集:考えたばかりです。dboスキーマには、publicが所有するテーブルとビューがいくつかあります(自分の考えではなく、変更できません)。これが私がメッセージを受け取っている理由でしょうか?もしそうなら、これを回避する方法はありますか? dboへのアクセスを拒否する目的は、これらのテーブルへの不要なアクセスを防ぐことです。
編集:パブリックロールと混同されたと思います。前述のテーブルとビューの実際の所有者はdboですが、パブリックロールにはSELECT、INSERT、UPDATEなどの権限があります。他のデータベースと同様に、パブリックロールの権限を持つテーブルを持つ新しいデータベースでメッセージを再現しようとしましたが、メッセージは表示されません-成功し、拒否されたユーザーはこれらのテーブルを見ることができなくなりました。だから私の質問に答えるために、はいそれは可能ですが、なぜそれが私にとってうまくいかないのかわかりません。
Management Studioを再起動すると修正されました。
なんらかの不具合のようです-何らかの理由で、AppUser
を使用してクエリを実行しているように機能していました。再度確認したところ、sa
を使用して確実にログインしていたため、何が起こったのかわかりません。
以前は正常に完了し、現在は同じメッセージを表示している新しいスキーマの権限を変更しようとしたときに気付きました。ログインを削除して再度セットアップしようとしたところ、現在sa
アカウントで使用しているもの以外のManagement Studioのインスタンスをすべて閉じたにもかかわらず、ユーザーがまだログインしているというエラーが発生しました。 this 投稿のアドバイスを使用してセッションを強制終了しようとしましたが、権限がないというエラーが発生しました(この時点で、sa
アカウントを使用していることを確認しました)。最後に、現在のインスタンスも閉じて、sa
として再度ログインしました。それ以降、正常に機能しました-新しいスキーマとdbo
に対してAppUser
を許可/拒否できます。