Использование представлений для фильтрации привилегий

Лишение привилегий

Как ANSI определяет команду CREATE TABLE для создания таблиц, но не предусматривает команды DROP TABLE для отказа от них, так же стандарт поддерживает команду GRANT для передачи привилегии пользователям, но не предусматривает способа лишить пользователя привилегий. Потребность лише­ния привилегий удовлетворяется с помощью команды REVOKE, которая де-факто стала одной из характеристик стандарта.

Синтаксис команды REVOKE повторяет синтаксис команды GRANT, но имеет противоположное значение. Таким образом, лишить Adrian привилегии выполнять команду INSERT для таблицы Orders можно с помощью команды:

REVOKE INSERT ON Orders FROM Adrian;

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

REVOKE INSERT, DELETE ON Customers FROM Adrian, Stephen;

Но кто имеет право лишать пользователей привилегий? Когда пользователь, имевший привилегии, лишается их, лишаются ли привилегий пользователи, по­лучившие привилегии от него? Поскольку эта характеристика не является стан­дартной, однозначных ответов не существует. Наиболее распространенным подходом является следующий: привилегии отменяются пользователем, передав­шим их, и отмена привилегий осуществляется каскадно, т.е. операция применя­ется последовательно ко всем пользователям, получившим привилегии от того пользователя, который их лишается в данный момент.

С привилегиями можно работать проще, используя представления. При пере­даче привилегии для базовой таблицы пользователю, она автоматически приме­няется ко всем строкам и, с возможными исключениями для UPDATE и REFERENCES, ко всем столбцам таблицы. Создавая представление, которое ссылается на базовую таблицу, и передавая привилегии представлению, а не базовой таблице, можно ограничить их любым выражением, применимым в запросе, который формирует представление. Это во многом определяет основные возможности команды GRANT.

Кто может создавать представления? Для того, чтобы создать представ­ление, нужно иметь привилегию использования команды SELECT для всех таб­лиц, на которые есть ссылка в представлении. Если представление является обновляемым, любые привилегии INSERT, UPDATE и DELETE на таблицу, лежащую в основе представления, автоматически применимы также и к пред­ставлению. Если нет привилегий обновления таблиц, лежащих в основе пред­ставления, то их нет и для создаваемых конкретных представлений, даже если сами представления являются обновляемыми. Поскольку внешние ключи в пред­ставлениях не применяются, нет необходимости использовать привилегию REFERENCES при создании представлений. Эти ограничения определены ANSI. Можно использовать также нестандартные привилегии (будут рассмотре­ны далее в этой главе). В следующих разделах предположим, что создатели рассматриваемых представлений являются владельцами или имеют соответст­вующие привилегии на все используемые базовые таблицы.


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



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