許可のスタックを拒否する


9

役割のためにdb_denycustomer、私がしたいだけで、顧客テーブルの列コードを選択し、他の人のどれもします。だから私はこれをしました:

DENY SELECT ON dbo.customer TO db_denycustomer
GRANT SELECT ON dbo.customer (code) TO db_denycustomer

...そしてそれはうまくいきます。涼しい!しかし、なぜですか?

私が関連記事で読んだのは、その許可スタックですが、DENY優先されます。対照的に、私の場合、最後の権限「クエリ」が優先されたようです。案の定、逆の順序で実行すると、後者DENYもコード列を非表示にします。

これについて詳しく説明してもらえますか?

テストしたユーザーのデフォルトdb_datawriterdb_datareaderロールも含めました。

回答:


10

これは、下位互換性のために提供されている動作のドキュメントです。ドキュメントの抜粋:

注意テーブルレベルのDENYは、列レベルのGRANTよりも優先されません。権限階層におけるこの不整合は、下位互換性のために保持されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.