SQL Server認証を使用するSQL Serverのデフォルトインスタンスと2人のユーザー、User1とUser2があります。
User1はパブリックサーバーの役割を持ち、User2はパブリックサーバーの役割+ sysadminサーバーの役割を持っています。
1つのデータベースsptest1を作成しました。そのデータベース内で、ストアドプロシージャsp_viewtbl
を作成し、スキーマも作成しました。スキーマを使用して、User1のストアドプロシージャの実行を無効にしました。
Sysadminサーバーの役割を持つUser2によるストアドプロシージャの実行を拒否するにはどうすればよいですか?
User3を作成し、sysadminおよびpublicとして権限を付与したとします。では、その新しいユーザーが同じストアドプロシージャを実行できないようにするにはどうすればよいでしょうか。たとえsysadmin権限を持っていても、他のログインからsp_viewtbl
を保護する必要があります。
Sysadminロールのメンバーは、SQL Serverのすべてに対する権限を拒否することはできません。 DENY(Transact-SQL) のドキュメントには次のように記載されています。
...ただし、オブジェクトの所有者またはsysadmin固定サーバーロールのメンバーにはDENYは適用されません。
したがって、sysadminがストアドプロシージャを実行できないようにするには、ストアドプロシージャにコードを配置して、ユーザーがsysadminであるかどうかを確認し、そうである場合はエラーを返す必要があります。ただし、システム管理者は次の方法で簡単に回避できます。
Sysadminユーザーが機密データを表示できないようにすることが目的である場合、その方法は Always Encrypted を使用することです。これにより、アプリケーションのみがアクセスできるキーを使用してデータが暗号化および復号化されます。システム管理者がテーブルを読み取る場合、暗号化されたデータのみが表示されます。