GRANT. Разрешает роли или пользователю выполнять операции, определенные в момент предоставления разрешения.
DENY. Запрещает пользователю или роли определенные разрешения и предотвращает наследование этих разрешений от других ролей..
REVOKE. Отзывает ранее запрещенные или предоставленные разрешения.
Информация о серверных разрешениях доступна из представления каталога sys.server_permissions.
Пользователи могут получить информацию о своих разрешениях с помощью функции fn_my_permissions.
Чтобы уменьшить затраты времени и усилий на обслуживание структуры разрешений, следует назначать разрешения ролям базы данных, а не отдельным пользователям базы данных.
GRANT - выдача разрешений участнику на защищаемый объект.
Синтаксис:
GRANT { ALL [ PRIVILEGES ] }
| permission [ ( column [,...n ] ) ] [,...n ]
[ ON [ class :: ] securable ] TO principal [,...n ]
[ WITH GRANT OPTION ] [ AS principal ]
Аргументы:
ALL -только для совместимости с SQL 92
permission - имя разрешения.
column - указывает имя столбца таблицы, на который предоставляется разрешение. Требуются круглые скобки «()».
class - указывает класс защищаемого объекта, для которого предоставляется разрешение. Квалификатор области «::» обязателен.
securable - указывает защищаемый объект, для которого предоставляется разрешение.
TO principal - имя участника. Состав участников, которым можно предоставлять разрешения, меняется в зависимости от защищаемого объекта.
WITH GRANT OPTION - показывает, что получающему разрешению будет также дана возможность предоставлять указанное разрешение другим участникам.
AS principal - задает участника, от которого участник, выполняющий данный запрос, наследует право на предоставление разрешения.
Пример. Предоставление разрешения SELECT на таблицу (предоставляется разрешение SELECT пользователю RosaQdM на таблицу Person.Address в базе данных AdventureWorks).
USE AdventureWorks;
GRANT SELECT ON OBJECT::Person.Address TO RosaQdM;
GO
Пример. Разрешение BACKUP DATABASE пользователю Peter:
USE AdventureWorks;
GO
--Предоставляем разрешения пользователю базы данных Peter
--на резервное копирование базы данных AdventureWorks.
GRANT BACKUP DATABASE TO Peter;
Пример: разрешения SELECT, INSERT и UPDATE на таблицу Sales.Customer предоставляются пользователю Sara.
USE AdventureWorks;
GO
--Предоставляем пользователю Sara некоторые разрешения
для таблицы Sales.Customer
GRANT SELECT, INSERT, UPDATE
ON Sales.Customer TO Sara;
Если нужно запретить доступ пользователя к таблице, то можно столкнуться с двумя ситуациями. Если до этого пользователю было предоставлено разрешение на эту таблицу, то для удаления ранее предоставленных разрешений следует воспользоваться инструкцией REVOKE.
Пример:
USE AdventureWorks;
GO
--Отзываем разрешение SELECT на таблицу Sales.Customer у Sara.
REVOKE SELECT
ON Sales.Customer TO Sara;
Однако пользователь может сохранить отозванное разрешение вследствие принадлежности к роли, которой предоставлено данное разрешение. В этом случае необходимо использовать инструкцию DENY, чтобы запретить доступ этому пользователю.
Пример:
USE AdventureWorks;
GO
--Запрещаем пользователю Sara разрешение DELETE на таблицу Sales.Customer. независимо от того, какие разрешения этот пользователь мог унаследовать от роли.
DENY DELETE
ON Sales.Customer TO Sara;
Инструкция REVOKE может использоваться для удаления уже выданных прав доступа, а инструкция DENY может использоваться, чтобы предотвратить получение участником определенного разрешения посредством инструкции GRANT.
Предоставление разрешения удаляет DENY или REVOKE для этого разрешения на данный защищаемый объект.
REVOKE - удаляет разрешение, выданное или запрещенное ранее.
Синтаксис:
REVOKE [ GRANT OPTION FOR ]
{
[ ALL [ PRIVILEGES ] ]
|
permission [ ( column [,...n ] ) ] [,...n ]
}
[ ON [ class :: ] securable ]
{ TO | FROM } principal [,...n ]
[ CASCADE] [ AS principal ]
Аргументы:
GRANT OPTION FOR - указывает, что право предоставлять указанное разрешение будет отозвано. Данный аргумент необходим при использовании аргумента CASCADE.
permission - имя разрешения.
column - указывает имя столбца таблицы, для которого производится отмена разрешений. Необходимо поставить скобки.
class - указывает класс защищаемого объекта, для которого производится отмена разрешения. Необходимо ввести квалификатор области ::.
securable - указывает защищаемый объект, для которого проводится отмена разрешения.
TO | FROM principal - имя участника.
CASCADE - указывает, что разрешение также отменяется и у участников, получивших доступ через текущего участника. Аргумент CASCADE необходимо использовать совместно с аргументом GRANT OPTION FOR.
Каскадная отмена разрешения, предоставленного с помощью параметра WITH GRANT OPTION, приведет к отмене разрешений GRANT и DENY для этого разрешения.
AS principal - задает участника, от которого участник, выполняющий данный запрос, получает право на отмену разрешения.
Пример. Отмена разрешения SELECT для таблицы (отменяет разрешение SELECT у пользователя RosaQdM для таблицы Person.Address в базе данных AdventureWorks).
USE AdventureWorks;
REVOKE SELECT ON OBJECT::Person.Address FROM RosaQdM;