web-dev-qa-db-ja.com

明示的に拒否されている大規模なグループの一部である個々のユーザーにSELECT権限を付与するにはどうすればよいですか?

現在、標準のActive Directoryアカウント「ドメインユーザー」によって会社の全員に対するSELECTを拒否するように設定されているテーブルSuperSecretDataがあります。しかし、いくつかの特定の個人ユーザーは、そこからSELECTできる必要があります。これを達成する適切な方法は何ですか?

Table Properties - Permissions

3
J.D.

DENYはGRANTをオーバーライドし、継承されたDENYは直接GRANTをオーバーライドします。また、スキーマレベルまたはデータベースレベルのDENYは、オブジェクトレベルのGRANTをオーバーライドします。

したがって、DENYを直接オーバーライドすることはできません。

SuperSecretDataと同じユーザーが所有するビュー、シノニム、またはストアドプロシージャを作成し、それらへのアクセスを許可できます。

sQLサーバー上のほぼすべてのエンティティに対してSELECTを "ドメインユーザー"に付与するより良い方法はありますか。

はい。組み込みの役割は使用せず、常にスキーマレベルの付与を使用してください。その後、セキュリティを強化するために個別のスキーマを作成できます。例えば

grant select on schema::dbo to ...

組み込みの役割の代わりに

alter role db_datareader add . . .

またはデータベースレベルの付与

grant select to ...