Udziel odmowy stosu uprawnień

9

W przypadku tej roli db_denycustomerchcę, aby można było WYBIERAĆ tylko kod kolumny tabeli klienta, i żaden z pozostałych. Więc zrobiłem to:

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

... i działa dobrze. Fajne! Ale dlaczego ?

W pokrewnych artykułach przeczytałem o stosie uprawnień, ale DENYma on pierwszeństwo. Natomiast w moim przypadku wydaje się, że ostatnie zapytanie „zapytanie” miało pierwszeństwo. Oczywiście, jeśli wykonam je w odwrotnej kolejności, ta druga również DENYukrywa kolumnę kodu.

Czy mógłbyś rozwinąć tę kwestię?

Podałem również domyślne db_datawriteri db_datareaderrole użytkownika, z którym testowałem.

George Menoutis
źródło

Odpowiedzi:

10

Jest to udokumentowane zachowanie zapewniające zgodność wsteczną. Fragment dokumentacji:

Przestroga Odmowa na poziomie tabeli nie ma pierwszeństwa przed DOTACJĄ na poziomie kolumny. Ta niespójność w hierarchii uprawnień została zachowana dla kompatybilności wstecznej.

Dan Guzman
źródło