Инициирование выполнения операторов SQL — КиберПедия 

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Инициирование выполнения операторов SQL

2020-06-02 106
Инициирование выполнения операторов SQL 0.00 из 5.00 0 оценок
Заказать работу

В некоторых случаях выполнение одного оператора SQL может вызвать запуск другого оператора или даже целого их блока. Поддержка такой функции (триггерной схемы) и была осуществлена в версии SQL:2003.

Триггер – это механизм, который задает триггер-событие (событие для запуска), время активизации триггера и одно или несколько запускаемых действий. Триггер-событие инициирует запуск, выражаясь простым языком, дает команду "огонь". Время активизации триггера указывает, в какой момент должно произойти действие: непосредственно перед триггер-событием или после него. Запускаемое действие – это выполнение одного или нескольких операторов SQL. При запуске более одного оператора SQL все операторы должны содержаться в пределах структуры BEGIN ATOMIC… END. Само триггер-событие может использовать оператор INSERT, UPDATE или DELETE.

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

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

CREATE TRIGGER CustomerDelete BEFORE DELETEON CUSTOMER FOR EACH ROWWHEN State = NYINSERT INTO CUSTLOG VALUES ('deleted a NY customer'):

Теперь при каждом удалении нью-йоркского клиента из таблицы CUSTOMER в регистрационной таблице CUSTLOG будет сделана запись об удалении.

Предоставление полномочий

Администратор базы данных может предоставить любому пользователю любые полномочия. Владелец объекта также может предоставить любому пользователю любые полномочия, связанные с этим объектом. Однако те, кто получил таким образом свои полномочия, не могут их, в свою очередь, предоставить третьим лицам. Это ограничение позволяет администратору или владельцу объекта в достаточной степени сохранять контроль над ситуацией. Доступ к объекту могут получить только пользователи, уполномоченные на это администратором или владельцем объекта.

Если смотреть с точки зрения безопасности, то представляется разумным ограничить возможность раздавать полномочия доступа. Тем не менее часто пользователям нужны именно права на предоставление полномочий. Конвейер не может остановиться только из-за того, что кто-то заболел, находится в отпуске или ушел на обед. Вы можете дать некоторым пользователям право предоставлять их права доступа надежным сменщикам. Для передачи пользователю такого права в операторе GRANT используется предложение WITH GRANT OPTION (предоставляющий полномочия). Следующий оператор показывает пример того, как можно использовать это предложение:

GRANT UPDATE (BonusPct)ON BONUSRATETO SalesMgrWITH GRANT OPTION;

Теперь менеджер по продажам может предоставить права на обновление данных при помощи следующего оператора:

GRANT UPDATE (BonusPct)ON BONUSRATETO AsstSalesMgr;

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

Внимание:
Приходится искать компромисс между безопасностью и удобством. Владелец таблицы BONUSRATE, предоставляя менеджеру по продажам полномочия UPDATE вместе с атрибутом WITH GRANT OPTION, делится с ним значительной частью своей власти. Ему остается надеяться, что менеджер по продажам серьезно отнесется к этой ответственности и будет осторожен с передачей полномочий другим лицам
.

Аннулирование полномочий

Наряду с предоставлением полномочий доступа существует необходимость иметь возможность аннулировать эти полномочия. Обязанности сотрудников со временем изменяются, следовательно, изменяются их потребности в доступе к данным. Нередки случаи перехода на работу к конкуренту. В этом случае все полномочия перешедших сотрудников придется отозвать. В SQL удаление полномочий на доступ выполняется с помощью оператора REVOKE (отозвать). Его синтаксис аналогичен синтаксису оператора GRANT, но только результат получается противоположный.

REVOKE [GRANT OPTION FOR] список-полномочийON объектFROM список-пользователей [RESTRICT | CASCADE];

С помощью этой структуры можно отзывать перечисленные в списке полномочия, не затрагивая при этом все остальные. Главное отличие между операторами REVOKE и GRANT состоит в том, что в первом из них применяется одно из двух необязательных ключевых слов – RESTRICT (ограничить) или CASCADE (каскадное удаление). Пусть для предоставления полномочий вы использовали оператор GRANT вместе с WITH GRANT OPTION. Тогда применение ключевого слова CASCADE в операторе REVOKE приводит к отзыву указанных полномочий как у того пользователя, которому вы их предоставили, так и у всех пользователей, кому (благодаря атрибуту WITH GRANT OPTION) эти полномочия он уже успел предоставить.

С другой стороны, оператор REVOKE с ключевым словом RESTRICT будет отзывать полномочия пользователя, который никому больше их не предоставлял. Если пользователь уже с кем-то поделился полномочиями, указанными в операторе REVOKE с ключевым словом RESTRICT, то выполнение этого оператора будет прервано и будет выведено сообщение об ошибке.

Оператор REVOKE с необязательным предложением GRANT OPTION FOR (возможность предоставления) можно использовать, чтобы отзывать у пользователя возможность предоставлять указанные полномочия, но оставляя их для самого этого пользователя. Если оператор содержит предложение GRANT OPTION FOR и ключевое слово CASCADE, то отзываются все полномочия, предоставленные пользователем, а также полномочия этого пользователя на предоставление полномочий. А если в операторе есть и GRANT OPTION FOR и RESTRICT, то события развиваются по одному из двух вариантов.

· Если пользователь не предоставил никому другому те полномочия, которые вы у него отзываете, то выполняется оператор REVOKE и удаляет способность этого пользователя предоставлять полномочия.

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

Внимание:
Возможность предоставлять полномочия с помощью предложения WITH GRANT OPTION – да еще в сочетании с выборочным отзывом полномочий – делает обеспечение безопасности вашей системы намного более сложным, чем кажется на первый взгляд. Например, любой пользователь, конечно же, может получить одни и те же полномочия от множества "дарителей". И если один из этих "дарителей" затем отзовет предоставленные им полномочия, у пользователя они все равно останутся. Дело в том, что продолжают действовать те же полномочия, но предоставленные другим "дарителем". Если благодаря предложению WITH GRANT OPTION полномочия передаются от одного пользователя к другому, то такая ситуация порождает цепочку зависимости. В этой цепочке полномочия одного пользователя зависят от таких же полномочий другого.
Если вы администратор или владелец объекта, то никогда не забывайте о том, что полномочия, предоставленные с помощью предложения WITH GRANT OPTION, могут "всплыть" в самых неожиданных местах. Достаточно трудным может оказаться отзыв полномочий у нежелательных пользователей при одновременном сохранении их у законных пользователей. Вообще говоря, предложения GRANT OPTION и CASCADE содержат в себе многочисленные ловушки. Поэтому при использовании этих предложений сверяйте стандарт SQL:2003 и документацию по имеющемуся у вас продукту. Это нужно, чтобы четко понимать, каким образом работают конструкции GRANT OPTION и CASCADE
.


Поделиться с друзьями:

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.