Разрешениями можно управлять при помощи инструкций GRANT, DENY и revoke

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;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: