Gewähren Sie das Stapeln von Berechtigungen

9

Für die Rolle db_denycustomermöchte ich, dass nur der Spaltencode der Kundentabelle AUSWÄHLBAR ist und keiner der anderen. Also habe ich das gemacht:

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

... und es funktioniert gut. Cool! Aber warum ?

Was ich in verwandten Artikeln gelesen habe, ist, dass Berechtigungen gestapelt werden, aber DENYVorrang haben. Im Gegensatz dazu scheint in meinem Fall die letzte Berechtigungs- "Abfrage" Vorrang zu haben. Sicher genug, wenn ich sie in umgekehrter Reihenfolge ausführe, DENYverbirgt letzterer auch die Codespalte.

Könnten Sie das bitte näher erläutern?

Ich habe dem Benutzer, mit dem ich getestet habe, auch die Standardeinstellungen db_datawriterund db_datareaderRollen hinzugefügt.

George Menoutis
quelle

Antworten:

10

Dies ist ein dokumentiertes Verhalten, das aus Gründen der Abwärtskompatibilität bereitgestellt wird. Dokumentationsauszug:

Achtung Ein DENY auf Tabellenebene hat keinen Vorrang vor einem GRANT auf Spaltenebene. Diese Inkonsistenz in der Berechtigungshierarchie wurde aus Gründen der Abwärtskompatibilität beibehalten.

Dan Guzman
quelle