С.Д. Кузнецов - Основы баз данных (1121716), страница 89
Текст из файла (страница 89)
Если в операторе содержится кеятетст, то при выполнении операции система проверит, не передавалась ли какая-либо из указанных привилегий каким-либо ацсь1Р от того ацСЬТР, у которого привилегия должна быть аннулирована (это вполне возможно, если ранее привилегия была передана с правом передачи). Если это действительно так, операция не выполняется; в противном случае указанные привилегии у указанных ацсЬТР аннулируются. Иначе говоря, при наличии ключевого слова ееятетст не допускается, например, ситуация, показанная на рис. 18.2.
Рнс. 18.2. Передача полученной привилегии На этом рисунке ацсЬТР1 является владельцем объекта базы данных С ИМЕНЕМ ОЬ1ЕСС И, СЛЕДОВатЕЛьНО, Обладает всеми привилегиями над этим объектом. Пунктирной стрелкой обозначена одна из подобных привилегий рг1. От имени ацсЬТР1 привилегия рг1 была передана ацсЬТР2 вместе с привилегией на ее дальнейшую передачу. Наконец, от имени ацСЬТР2 привилегия рг1 была передана ацсь1РЗ, Тогда операция аннули- 425 Курс Основы баз данных рования этой привилегии от имени ацгыР1 у аагыР2 при наличии ключевого слова веятятст не будет выполнена успешно.
В той же ситуации привилегия была бы аннулирована для аагЫР2 (и для анГЫРЗ), если бы в операторе овлнт присутствовало ключевое слово слеслое. В общем случае если выполняется операция ееуоке ... слеслое, то указанные привилегии аннулируются у всех ансЫР, прямо или косвенно (через промежуточные ашИР) получивших привилегии от текущего аигЫР 8ОЬ-сессии, в которой выполняется данная операция. Если в операторе содержится раздел овлггт орттон еоя, но имеется ключевое слово ееететст, то указанные привилегии для указанных аагЫР не аннулируются, но у указанных аагИР аннулируется привилегия передачи данных привилегий (операция должна успешно выполняться только при соблюдении обсуждавшихся ранее условий). Однако если в операторе одновременно содержатся и овлнт овттон еов, и слеслое, то указанные привилегии аннулируются у всех ансЫР, которые прямо нли косвенно (через промежуточные ацгЫР) получили привилегии от текущего аигЫР 8О -сессии, в которой выполняется данная операция.
Задание в операторе необязательного раздела оелнтеР ву позволяет явно указать, что должно использоваться в качестве текущего ааГЫР— текущий пользовательский идентификатор или текущее имя роли ЯОЬ- сессии. Если раздел оелнтеР Ву в операторе ЕЕУОКЕ не содержится, тО действия производятся от имени текущего ааГЫР ВОЬ-сессии (о том, как он определяется, см. выше).
если текущий (или указанный) ангыР не обладает ни одной из указанных в операторе ееуоке привилегий, то выполнение операции не производится (фиксируется ошибка). Если ацгЫР обладает некоторыми, но не всеми, привилегиями из числа указанных, то операция выполняется по отношению к этим некоторым привилегиям, но выдается предупреждение. Возможны ситуации, когда у некоторого ангЫР остается некоторая привилегия после выполнения операции аннулирования у этого анСЫР этой привилегии. Одна из таких ситуаций проиллюстрирована на рис. 18.3.
Рис.18.3. Косвенная и прямая передача привилегий 426 Лекция! 8 Авторизация доступа к данным, управление транзакциями и сессиями Здесь привилегия рг1 передана от ацсЫР1 к ацгй1Р2 вместе с правом на дальнейшую передачу этой привилегии. Далее, привилегия рг1 передается от ацсыР2 к ацсй1Рз. И затем выполняется прямая передача привилегии от зцсЫР1 к ацгЫРЗ (на самом деле, порядок таких действий не является существенным). Теперь предположим, что от имени ацсЫР1 выполняется операция КЕЧОКЕ рг1 ОМ оЬЗесг ЕЕОМ ацСЬ|Р2 САЯСАРЕР В соответствии с правилами ЯЯ).:1999 после выполнения этой операции ацсЫРЗ будет продолжать влалеть привилегией рг1 по отношению к объекту оЬЗ есг, поскольку получил данную привилегию двумя разными способами. Грубо говоря, операция Ве)токе, выполняемая от имени ацсыР1, выполняется только по тем путям графа идентификаторов авторизации и объектов базы данных, которые начинаются с узлов, соответствующих ацсыР, указанных в разделе ВВОм этой операции.
Далее, напомним, что если при передаче от ацсЫР| к ацГЫР2 привилегии на выполнение некоторых действий над некоторой таблицей т (например, ()ВРАте) явно не указывается список имен столбцов этой таблицы, то привилегия распространяется на все столбцы этой таблицы (включая столбцы, которые, возможно, еше будут созданы). Если действительно использовался такой способ передачи привилегий, то в дальнейшем можно аннулировать привилегию ацтЫР2 на модификацию отдельных (уже определенных) столбцов таблицы т, оставив привилегию на модификацию всех остальных столбцов (включая те, которые еше не созданы). И последнее замечание.
Если некоторая привилегия была передана псевдоацсыР ВРВыс, то, конечно, этой привилегией обладают все ецсЫР. Но нет возможности аннулировать такую привилегию у отдельно указываемого ацгЫР. Привилегия была передана всем, и аннулировать ее можно только сразу у всех. Аннулированиеролей Вариант оператора ееуОке, используемый для аннулирования ролей, выглядит следуюшим образом: ЕЕЧОКЕ [ АРМ1М ОРТ1ОМ ЕОЕ ) го1е пате сопкпа11зс ЕЕОМ ( РРВЫС ! ацГЫР сопппа1|зг ) ОЕАМТЕР ВУ ( СРКВЕМТ РЯЕЕ [ СРЕЕЕНТ ЕОЬЕ ) ) ( ЕЕЯТК1СТ [ САЯСАРЕ ) 427 Основы баз данных Действие операции аннулирования ролей очень похоже на действие операции аннулирования привилегий. Отличие состоит в том, что аннулируются не привилегии, а роли, а также в том, что для аннулирования привилегии на передачу роли используется раздел лпмгп орттсп рск*.
Управление транзакциями в 801. Область организации транзакций и управления ими настолько широка, что заслуживает отдельных книг и учебных курсов. В этом курсе мы ограничимся рассмотрением вопросов управления транзакциями в пределах стандарта языка Я)1.. АС1ьл-транзакция В Я)1.:1999 поддерживается классическое понимание транзакции, характеризуемое аббревиатурой йст (от лпопз1су, Сопв(вгепсу, 1во1ас(оп и йпгаЬ111су). В соответствии с этим понятием под транзакцией разумеется последовательность операций (например, над базой данных), обладающая следующими свойствами. в Алзомарноснзь (Лгозпзсу). Это свойство означает, что результаты всех операций, успешно выполненных в пределах транзакции, должны быть отражены в состоянии базы данных, либо в состоянии базы данных не должно быть отражено действие ни одной операции (конечно„здесь речь идет об операциях, изменяющих состояние базы данных).
Свойство атомарности, которое часто называют свойством «все или ничегов, позволяет относиться к транзакции, как к динамически образуемой составной операции над базой данных**. ° Согласооаннослчь (сопоуесепсу). В классическом смысле это свойство означает, что транзакция может быть успешно завершена с фиксацией результатов своих операций только в том случае, когда действия операций не нарушают целостность базы данных, т. е.
удовлетворяют набору ограничений целостности, определенных для этой базы данных. В стандарте ЗО(.:1999 это свойство расширяется тем, что во время выполнения транзакции разрешается устанавливать точки согласованности (см, ниже про точки сохранения) и явным образом проверять ограничения целостности***. ' В действительности, как видно нз приведенных описаний, варианты операторов свхнт н ЯКЧОКК для привилегий и ролей настолько близки, что непонятно их синтаксическое разделение, которое, очевидно, усложняет реализацию.
Как кюкется, зто разделение не обосновано в станларте БОЕ:1999, " В обгцем случае состав и порялок выполнения операций, выполняемых внутри транзакции, становится известным только на стадии выполнения. "*' Читателей может смутить параллельное использование терминов сеозесееаннесть и 428 Лекция 18 Авторизация доступа к данным, управление транзакциями н сессиями ° Изоляция (тле!астап). Требуется, чтобы две одновременно выполняемые транзакции* никоим образом не действовали одна на другую. Другими словами, результаты выполнения операций транзакции т! не должны быть вьщны никакой другой транзакции Т2 до тех пор, пока транзакция т! не завершится успешным образом.
° Долговечиоспгь (пигаЫ ! ! су). После успешного завершения транзакции все изменения, которые были внесены в состояние базы данных операциями этой транзакции, должны гарантированно сохраняться, даже в случае сбоев аппаратуры или программного обеспечения. Порождение транзакций в ЗОЕ:1999 В соответствии со стандартом языка Я'.>) Н999 транзакции** могут образовываться явным образом с использованием оператора ятйет тейн9- дст ТОн, либо неявно, когда выполняется оператор, для которого требуется контекст транзакции, а этого контекста не существует. Например, операторы ЕЕЬЕСТ, ОРОЛТЕ или СКЕйтЕ тйВЬЕ могут выполняться только в контексте транзакции, а для выполнения оператора СОННЕСТ (см.
раздел «Подключения и сессии») такой контекст не требуется, и выполнение оператора СОМПЕСТ не приводит к неявному образованию транзакции. Для завершения транзакции должен быть явно использован один из двух операторов — Сопит т (требование завершить транзакцию с фиксацией ее результатов) или ЕОЬЬВАСК (требование завергпить транзакцию с удалением результатов всех выполненных операций из состояния базы данных*'*). Установка характеристик транзакции У каждой выполняемой транзакции имеются три характеристики, значения которых существенно влияют на действия системы при управлении транзакцией, — уровень изоляции ((ло)ау!оп !еуе!), режим доступа целостность.