Читаем Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ полностью

SQL позволяет.одному и тому же получателю прав получать одни и те же полномочия из различных источников, даже если предоставляемые права уже есть у получателя. Каждый раз, когда один пользователь расширяет у другого пользователя права передавать полномочия, он открывает еще один источник, из которого любой пользователь может получить полномочия. Структура полномочий потенциально может стать пресловутым "птичьим гнездом", из которого очень трудно вытащить фактическое состояние полномочий индивидуального пользователя или объекта.

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

GRAN TINSERT

ON DEPARTMENT

TO BRUNHILDE

WITH GRANT OPTION;

Позднее SERENA отменяет привилегию и право предоставлять полномочия у BRUNHILDE:

REVOKE INSERT

ON DEPARTMENT

FROM BRUNHILDE;

SERENA считает, что BRUNHILDE больше не имеет полномочий INSERT и не может предоставлять другим права к таблице DEPARTMENT. Однако выполненный оператор REVOKE не имеет эффекта, поскольку BRUNHILDE все еще имеет полномочия INSERT и право предоставлять привилегии, полученные от HPOTTER.

Так как количество пользователей с привилегиями и возможностью предоставлять другим права растет, вероятно, что различные пользователи могут предоставлять одни и те же привилегии и возможность предоставлять другим права одному пользователю. Довольно просто, как и ядерное деление, это может выйти из-под контроля. Отмена какого-либо полномочия может оказаться большой работой. Отмена всех (или многих) полномочий у одного конкретного пользователя может оказаться астрономически сложной проблемой.

Если у пользователя была возможность получать права от различных пользователей, существует два возможных решения, оба не очень приятных.

* Найдите каждое право, предоставленное этому пользователю, вместе с тем, кто предоставлял это право, и заставьте всех отменить каждое предоставленное право. Это станет весьма запутанным, если использовались варианты ALL и PUBLIC, потому что отмена более целенаправленного права не отменяет прав, предоставленных через ALL, PUBLIC, роли или группы.

* Владелец каждой таблицы и объекта (или SYSDBA) выполняет операторы REVOKE, действующие на всех пользователей этой таблицы, а затем выдает операторы GRANT для установления привилегий только тем пользователям, кому нужно сохранить свои права.

Сервер не выдает никаких сообщений для команд REVOKE, независимо от того, была ли она успешна или ошибочна. Это будет тот самый момент вашей первой, неприятности, связанной с полномочиями SQL, когда вы возденете глаза к небесам и начнете размышлять о реальном назначении комитетов по стандартам на этой Земле. Хорошо спроектированная графическая утилита управления правами может сохранить вам рассудок. К счастью, многие программы администрирования осуществляют такую поддержку. Доступно множество инструментов управления полномочиями. (См. приложение 12.)

Более подробную информацию об отмене полномочий см. в следующем разделе.

! ! !

СОВЕТ. Хотя определение пользователей, ролей и назначение привилегий часто откладывается до момента, когда система готова к поставке пользователям, тем не менее создание схемы привилегий и соотнесение ее со списком пользователей нужно запланировать при проектировании системы. Поддержка диаграммы такой схемы является весьма полезным делом как при проектировании и тестировании системы, так и при ее документировании.

. ! .

<p>Отмена полномочий</p></span><span>

Оператор REVOKE требуется для удаления полномочий, назначенных операторами GRANT. Согласно стандарту, REVOKE должен каскадом отменить все привилегии, полученные всеми пользователями как результат WITH GRANT OPTION от данного пользователя. Однако вам не следует на это полагаться в Firebird, потому что конфликт правил стандарта при некоторых условиях может привести к логике реализации, отличной от предложенной в стандарте.

Операторы REVOKE могут отменить любую привилегию, которую может назначить оператор GRANT. Только пользователь SYSDBA или пользователь, предоставивший привилегию, могут отменить ее- те же самые или другие привилегии, предоставленные другими пользователями, не отменяются.

Полномочия, предоставленные "в куче", не могут отменяться индивидуально. Это означает:

* привилегия, которую пользователь получил в результате назначения ALL или в качестве роли, может быть отменена только предоставившим эту привилегию, путем отмены ALL или роли соответственно;

* отмена привилегии у пользователя, который получил ее путем PUBLIC или группы UNIX, может быть выполнена предоставившим эту привилегию путем отмены PUBLIC или группы соответственно;

* привилегии, предоставленные для PUBLIC, могут быть отменены только FROM PUBLIC.

<p>Использование REVOKE</p></span><span>

Упрощенный синтаксис для REVOKE внешне отличается от синтаксиса GRANT. Предложение ТО <получатель> заменяется на FROM <получатель?.

REVOKE <привилегии>

ON <объект>

FROM <получатель> ;

Перейти на страницу:

Похожие книги

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Майерс , Скотт Мейерс

Программирование, программы, базы данных / Программирование / Книги по IT