Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD.doc
Скачиваний:
9
Добавлен:
22.04.2019
Размер:
507.9 Кб
Скачать

Операторы grant и revoke

Предоставление пользователям необходимых привилегий и изъятие привилегий осуществляется с помощью операторов GRANT и REVOKE. Оба оператора могут использоваться как для объектных, так и для системных привилегий.

Для объектных привилегий синтаксис оператора GRANT таков: 

GRANT привилегия ON объект TO обладатель_привилегий

[WITH GRANT OPTION]; 

где привилегия – это нужная привилегия, объект – это объект, к которому разрешается доступ, а обладатель_привилегий – пользователь, получающий привилегию.

Для системных привилегий синтаксис оператора GRANT таков: 

GRANT привилегия TO обладатель_привилегий

[WITH ADMIN OPTION]; 

где привилегия ­– это предоставляемая системная привилегия, обладатель_привилегий – пользователь, получающий привилегию.

По умолчанию пользователь, получивший какую-либо объектную или системную привилегию, не может передать ее другому пользователю. Право передачи регулируется наличием необязательного параметра WITH GRANT OPTION для объектных привилегий и WITH ADMIN OPTION для системных привилегий. Пользователь, получивший привилегию с указанием данной опции, имеет право передавать привилегию далее.

Для объектных привилегий синтаксис оператора REVOKE таков: 

REVOKE привилегия ON объект FROM обладатель_привилегий

[CASCADE CONSTRAINTS];

 где привилегия – это отменяемая привилегия, объект – это объект, на который предоставлена привилегия, обладатель_привилегий – пользователь, получающий эту привилегию. Необязательный параметр CASCADE CONSTRAINTS имеет то же значение, что и в операторе DROP TABLE – если команда GRANT отменяет привилегию REFERENCES (разрешение создавать внешние ключи, ссылающиеся на таблицу из другой схемы), то наличие параметра CASCADE CONSTRAINTS предварительно удалит все существующие внешние ключи, созданные благодаря наличию данной привилегии.

Для системных привилегий синтаксис оператора REVOKE таков: REVOKE привилегия FROM обладатель_привилегий;

 где привилегия – это отменяемая системная привилегия, обладатель_привилегий – пользователь, который более не будет ее иметь.

Специальная привилегия ALL используется в том случае, когда нужно предоставить все возможные привилегии на какой-то объект.

Роли

Роль – это именованный набор системных и объектных привилегий. Роль это реализация идеи пакетной обработки данных. Действительно, если представить достаточно большую базу данных, состоящую из ста и более таблиц, то при появлении нового пользователя, которому нужно предоставить привилегии доступа к разным объектам, администратор базы данных должен выполнить довольно большой объем работы и проконтролировать, что выданы все необходимые привилегии. А если и самих пользователей базы данных достаточно много, то не трудно себе представить, сколько команд GRANT или REVOKE нужно постоянно выполнять администратору базы данных, чтобы управлять доступом к объектам базы данных.

Похожая проблема возникает, если появляется новый объект, доступ к которому нужно предоставлять для определенной категории пользователей. В этом случае администратор базы данных должен отдельно для каждого пользователя выполнить набор команд GRANT. Но в этом случае, при наличии большого числа пользователей, не исключена возможность, ошибки администратора и тогда каким-то пользователям привилегии не будут выданы.

Все перечисленные проблемы решаются использованием ролей. Обычно поступают следующим образом: сначала выделяют категории пользователей, которые должны иметь различные привилегии доступа к объектам базы данных. После этого для каждой из выделенных категорий пользователей формируется набор привилегий и объединяется в роль. Далее роль предоставляется всем пользователям, относящимся к той или иной категории. При этом выдача или изъятие роли, независимо от того, сколько привилегий она включает, осуществляется при помощи всего одной команды GRANT или REVOKE соответственно.

При появлении нового пользователя достаточно определить его категорию и выдать ему соответствующую роль. При появлении новой привилегии, которой должны обладать пользователи той или иной категории ее достаточно включить в роль и тогда все пользователи, владеющие этой ролью, получат и новую привилегию.

Примеры команд GRANT и REVOKE для назначения и изъятия ролей, включения и изъятия привилегий из ролей:

 -- создание роли

CREATE ROLE student;

-- выдача привилегий роли student

GRANT select ON TimeTable, Books TO student;

 -- назначение роли student для пользователей

GRANT student TO PetrovAV, IvanovAA;

 -- при включении привилегии в роль все пользователи

-- PertovAV и IvanovAA получат эту привилегию,

-- поскольку обладают ролью student

GRANT select ON Prepods TO student;

 -- при изъятии привилегии из роли все пользователи,

-- которым назначена эта роль, перестанут владеть

-- этой привилегией

REVOKE select ON Prepods FROM student;

 Существуют ряд встроенных ролей, которые используются для выполнения типовых задач:

CONNECT – роль, включающая в себя привилегии дающие возможность организации соединения (сессии) с базой данных;

RESOURCE – роль, включающая привилегии, дающие возможность создавать любые объекты внутри своей схемы;

PUBLIC – роль, которой обладают все пользователи базы данных. При необходимости разрешить какие-либо действия всем без исключения пользователям базы данных, нужно включить привилегию в роль PUBLIC.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]