Предоставить отказ в разрешении укладки

9

Для роли db_denycustomerя хочу, чтобы только SELECTable можно было выбрать код столбца таблицы клиента, а не все остальные. Итак, я сделал это:

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

... и работает нормально. Круто! Но почему ?

В связанных статьях я читал, что стек разрешений, но DENYимеет приоритет. Напротив, в моем случае, кажется, что последний «запрос» разрешения имел приоритет. Конечно, если я выполню их в обратном порядке, последний также DENYскрывает столбец кода.

Не могли бы вы уточнить это?

Я также включил настройки по умолчанию db_datawriterи db_datareaderроли для пользователя, с которым я тестировал.

Джордж Менутис
источник

Ответы:

10

Это задокументированное поведение для обратной совместимости. Отрывок документации:

Внимание DENY уровня таблицы не имеет приоритета над GRANT уровня столбца. Это несоответствие в иерархии разрешений было сохранено для обратной совместимости.

Дэн Гусман
источник