SQL Server 2005: права доступа типа - Control
Знаете ли Вы что…
В SQL Server 2005 возможно дать пользователю права доступ типа Control к объекту (таблице, виду и т.д.), который фактически дает те же права, что и у собственника объекта.
Пример:
GRANT CONTROL
ON t_Table TO Uesr1
GO
Control имеет некоторые особенности.
Обычно цепочка предоставлений прав доступа к объекту пользователями всегда хранится, на случай, если в дальнейшем эти права будут отменены с использованием опции Cascade.
Например:
1. пользователь User1 дал права доступа типа Select к объекту Table пользователю User2;
2. права пользователя User1 по доступу к объекту Table были отменены с использованием опции Cascade;
3. в результате User2 также лишился прав доступа к объекту.
С Control ситуация выглядит иначе.
Пример:
1.владелец объекта дал права доступа к объекту типа Control пользователю User1 с использованием опции GRANT OPTION;
2.пользователь User1 дал права доступа типа Control пользователю User2;
3.права пользователя User1 по доступу к объекту были отменены с использованием опции Cascade;
4.пользователь User2 по-прежнему имеет права Control на объект.
Grant Control on T
to usr1
WITH GRANT OPTION
go
Execute as user = 'usr1'
go
Grant Control on T
to usr2
go
REVERT
go
Revoke Control on T
from usr1 Cascade
go
--Usr2 по-прежнему имеет права Control на T
Как обойти эту ситуацию…
Если требуется, чтобы права Control были отменены у всех пользователей, которым их дал User1, User1 должен быть явно указан в момент предоставления прав другому пользователю:
Grant Control on T
to usr2
as usr1
go