Назад | Перейти на главную страницу

SQL Server отменяет выбор

Предположим, что пользователь «Боб» получает разрешение SELECT от Джона, а Боб также получает разрешение SELECT от другого пользователя, Джо, но на этот раз с опцией GRANT.

Что произойдет, если кто-то отменит разрешение select у Боба с помощью каскада? Будет ли удалено разрешение выбора из учетной записи Боба и всех учетных записей, которым Боб дал разрешение (даже если они были у них раньше откуда-то еще, например, из группы?)? Если да, то потеряет ли право выбора вся группа или только один пользователь, у которого тоже было право выбора от Боба?

Нет, они не потеряют разрешения.

Если GRANT выполняется для одного и того же разрешения несколькими участниками, SQL Server будет отслеживать это. То есть он будет хранить разрешение несколько раз с разницей в зависимости от того, какой принципал выполнил GRANT.

Итак, предположим, что администратор запускает эти:

GRANT SELECT ON OBJECT::MyDb.dbo.MyTable to UserA WITH GRANT OPTION  
GRANT SELECT ON OBJECT::MyDb.dbo.MyTable to UserB

Затем UserA запускает вторую инструкцию:

GRANT SELECT ON OBJECT::MyDb.dbo.MyTable to UserB

И, наконец, Admin запускает это:

REVOKE SELECT ON OBJECT::MyDb.dbo.MyTable TO UserA CASCADE

UserB сохраняет права SELECT для MyTable, потому что они были предоставлены администратором в первом пакете.

В вашем случае вся группа не потеряет доступ, только один пользователь, которому Боб предоставил SELECT, при условии, что никто другой также не предоставил такое же разрешение.

Однако один пользователь сохранит разрешения, если он является частью группы Windows или роли базы данных, которая также имеет разрешения. То есть до тех пор, пока разрешение не было предоставлено Бобом.