В документации MSDN для sys.database_permissions
говорится, что столбец состояния может быть 'G', 'D', 'R' или 'W'.Значение 'R' имеет описание 'REVOKE', что делает его звучащим так, будто строка с этим значением будет соответствовать аннулированному разрешению.Однако, как я могу судить по документам для REVOKE
, отзыв разрешения полностью удаляет его, так что я ожидаю, что просто удалите строку из sys.database_permissions
.Это то, что произошло, когда я проверил предоставление и затем отозвал разрешение;после GRANT
разрешение появляется в этом представлении, а после REVOKE
оно исчезает.
Мой вопрос: при каких обстоятельствах это представление будет содержать строки с состоянием, установленным в 'R'?Я спрашиваю об этом, потому что я не уверен, нужно ли мне обрабатывать строки 'R' при рассмотрении этого представления в коде.
Я могу придумать несколько потенциальных сценариев, где это может произойти, но ненайдено любое подтверждение:
- Могут появиться строки 'R', если вы предоставили некоторое общее разрешение, а затем отменили более детальное разрешение, которое подразумевалось в общем разрешении (гранулярное разрешение будет отображаться как 'R').Пока я не нашел таких разрешений.
- Строки 'R' могут появиться очень кратко, пока SQL обрабатывает команду
REVOKE
, и тогда вся строка исчезает.Я не наблюдал этого, но, по-видимому, есть только очень небольшое окно времени, когда оно появилось бы.