Книги, научные публикации Pages:     | 1 | 2 | 3 | 4 | 5 |

С. Н. Смирнов, И. С. Задворьев Учебное пособие 2-е издание исправленное и дополненное Москва 2002 УДК 681.3.06 32.973.2 57 Смирнов С. И. С. ...

-- [ Страница 3 ] --

Если совпадения ни с одним параметром не обна ружено, то возвращается параметр Если не задано, то возвращается не определенное значение (NULL).

SQL> SELECT 2 не "Функция DECODE" 3 FROM Функция DECODE мужскбй SELECT 2 не "Функция DECODE" 3 FROM Функция DECODE пол не определен Листинг 113. Примеры применения функции декодиро вания Ч процедурное расширение SQL Наряду с декодированием функцию DECODE используют для написания запросов с особенно изощренной логикой, например, в зависимости от значений полей в записи одной таблицы можно выбирать, по какому правилу соединять эту запись с записями другой таблицы. Результат функции DECODE удобно передавать в качестве параметра агрегирующей функции. Пример эффективного кодирования SQL-выражений приведен в разделе "Методы повышения Функция...) возвращает наибольшее значение из списка параметров При этом используются обычные правила сравнения для различных типов.

Функция...) возвращает наименьшее значение из списка параметров Примеры применения функций GREATEST и LEAST представлены в листинге SELECT G, L 2 FROM dual;

G L 10 Листинг 114. Пример применения функций GREATEST и LEAST Справочные функции Функция возвращает целое число, которое уникаль но идентифицирует текущего пользователя.

Функция USER возвращает имя текущего пользователя Oracle.

Раздел Функция возвращает сведения о текущей сессии. помеща ется в одиночных кавычках и должен принимать значения из следующего списка: ENTRYID, SESSIONSID, TERMINAL, LANG, LANGUAGE, LABEL, INSTANCE, Примеры применения функций USER и с различными параметрами представлены в листинге SQL> SELECT ENTRYID, 2 TERMINAL, 3 LANG FROM dual;

USER UID ENTRYID TERMINAL LANG 5 0 US 115. Пример применения справочных функций В качестве хорошего примера работы встроенных SQL функций приведем готовую функцию подсчета контрольной суммы для символьной строки. Естественно, для серьезных приложений требуется использование специально разрабо танных и сертифицированных алгоритмов, поэтому функцию chksum следует рассматривать лишь как иллюстрацию при менения функций SUBSTR, MOD, ASCII и управ ляющих конструкций PL/SQL. Создание функции и работа с ней представлены в листинге CREATE OR REPLACE FUNCTION 2 IN VARCHAR) RETURN NUMBER IS 3 ic 4 := 0;

5 0;

7 i := 0;

8 с PL/SQL Ч процедурное расширение SQL 9 BEGIN 10 := 11 WHILE i LOOP 12 с := SUBSTR(text, 13 : suml + suml >= 255 THEN 15 suml := END IF;

18 i := 19 END 21 ic : suml*256 + Х RETURN ic;

Function created.

SQL> SELECT номер chk FROM dual 2 UNION 3 SELECT номер FROM dual 4 UNION ALL 5 SELECT 1 FROM CHK 116. Пример создания и работы функции контрольной суммы процедур и функций Процедуры и функции Ч это объекты базы данных и, следовательно, они создаются командой CREATE уничто жаются командой DROP. При создании процедуры или функ ции должны быть определены имя объекта, перечень и тип параметров и логика работы программы, закодированная на языке PL/SQL.

Чтобы создать процедуру или функцию, необходимо иметь системные привилегии CREATE PROCEDURE. Для создания процедуры, функции или пакета в схеме, отличной от своей схемы, требуется системная привилегия CREATE ANY PROCEDURE. Более тонкие вопросы разграничения доступа будут рассмотрены в соответствующем разделе.

После определения имени новой процедуры или функции необходимо задать имена, типы и виды параметров. Для каж дого параметра обычно указывается вид Ч IN, OUT или IN OUT. Вид параметра IN предполагает, что значение парамет ра должно быть определено при обращении к программе и не изменяется программой. Попытка изменить в теле программы значение параметра вида IN приведет к сообщению об ошиб ке. Вид параметра OUT предполагает изменение значения параметра в процессе работы программы, то есть параметр вида OUT Ч это параметр. Параметр IN OUT Ч это параметр, которому при вызове должно быть присвое но значение, которое может быть изменено в теле программы.

Дополнительно к определениям, необходимым для процедуры, в определении функции должен быть указан тип данных возвращаемого функцией значения. Возврат значения функции выполняется оператором RETURN.

Оператор определения процедуры Oracle использует сле дующий синтаксис:

' N CREATE [OR REPLACE] PROCEDURE | OUT IN | OUT | IN I Ключевое слово OR REPLACE указывает на безусловное замещение старого текста процедуры. Если ключевое слово OR REPLACE не указано и процедура определена, то заме Ч процедурное расширение SQL щения старого значения кода процедуры не происходит и возвращается сообщение об Обратите внимание, что при описании переменных про цедуры не используется ключевое слово DECLARE. Блок оп ределения данных начинается сразу после ключевого слова AS (или IS, по выбору пользователя).

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

Пусть таблица создана предложением:

CREATE TABLE NUMBER, Протокол создания процедуры представлен в листинге 117.

CREATE OR REPLACE PROCEDURE InsRec 2 IN NUMBER) 3 AS 4 Coeff CONSTANT NUMBER := 5 BEGIN INSERT INTO Tabl / Procedure created.

117. Протокол создания процедуры, вставку записей в таблицу Tabl Процедура InsRec может быть отправлена на выполнение командой EXEC утилиты SQL*Plus, вызовом из анонимного блока или другой программы. Последующая выборка из таб лицы Tabl иллюстрирует изменения в базе данных, осущест вленные вызовом процедуры InsRec.

SQL> BEGIN 2 InsRec(240) Раадел 4 / PL/SQL procedure successfully completed.

SELECT * FROM ARG1 120 04-05- Листинг 118. Протокол изменений в базе выполняемых созданной процедурой.

В большинстве случаев первая попытка скомпилировать программу на PL/SQL (процедуру, функцию, пакет или триг гер) приводит к получению сообщения о наличии в програм ме ошибок. Чтобы уточнить выявленные в процессе синтак анализа ошибки, можно воспользоваться командой SQL*Plus SHOW ERRORS. Эта команда показывает ошибки, обнаруженные в процессе выполнения CREATE PROCE DURE, CREATE FUNCTION, CREATE TYPE BODY, CRE ATE PACKAGE, CREATE PACKAGE BODY CREATE TRIGGER. Если команда SHOW ERRORS используется без параметров, то возвращаются ошибки последней компилиро ванной процедуры, функции, тела пакета или тригге ра.

Рассмотрим пример обнаружения и исправления ошибки.

В процедуре, представленной в листинге добавим оши бочный оператор, изменяющий значение параметра вида IN (напомним, что параметры вида IN не должны изменяться).

Листинг представляет протокол компиляции и вывод ко манды SHOW ERRORS.

SQL> CREATE OR REPLACE PROCEDURE InsRec 2 IN NUMBER) 3 AS Ч процедурное расширение SQL 4 Coeff CONSTANT NUMBER := 5 BEGIN 6 Argl := Argl + 7 INSERT INTO / Warning: Procedure created with compilation er SQL> SHOW ERRORS Errors for PROCEDURE LINE/COL ERROR 6/1 PLS-00363: expression cannot be used as an assignment target PL/SQL: Statement ignored Листинг 119. Протокол, иллюстрирующий способ ди агностики синтаксических ошибок в тексте процедуры Конечно, выявление синтаксических ошибок Ч это пер вый, самый простой шаг в процессе отладки процедур и функций. Для удобства отладки программ на языке PL/SQL можно использовать специализированные например интегрированную среду SQL Navigator производства Quest Software. Обсуждение методов и средств отладки семантики программ и комплексной отладки выходит за рамки этой кни ги.

Напомним, что функции PL/SQL отличаются от процедур тем, что возвращают в вызывающую среду значение парамет ра.

Оператор определения функции Oracle использует сле дующий синтаксис:

CREATE [OR REPLACE] FUNCTION ] функции [ | OUT | OUT |....])] 217, RETURN | Ключевое слово OR REPLACE указывает на безусловное замещение старого текста функции. Если ключевое слово OR REPLACE не указано и функция определена, то старого значения кода функции не происходит и возвращает ся сообщение об ошибке.

Описание типа данных для возвращаемого функцией зна чения требуется обязательно.

При описании переменных функции так же, как и при описании переменных процедуры, не используется ключевое слово DECLARE. Блок определения данных начинается сразу после ключевого слова IS (или AS, по выбору пользователя).

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

CREATE TABLE (Atl NUMBER, INSERT INTO INSERT INTO Tabl INSERT INTO Tabl Протокол создания функции представлен в листинге 120.

CREATE OR REPLACE FUNCTION 2 Arg2 IN DATE) RETURN NUMBER AS 3 NUMBER 0;

4 BEGIN 5 SELECT INTO SumVar FROM Tabl 6 WHERE At2 BETWEEN Argl AND 7 RETURN 9 / Function created.

Ч расширение SQL SQL> BEGIN 1/2, 3 END;

4 / PL/SQL procedure successfully completed.

Листинг 120. Протокол создания функции и обраще ния к ней из среды PL/SQL Если характер использования приложений изменился, то для освобождения ресурсов базы данных может потребовать ся уничтожить процедуру или функцию. В собственной пользователю не требуются дополнительные привилегии для уничтожения процедуры или функции. Для уничтожения процедуры или функции в схеме другого пользователя необ ходимо наличие привилегии DROP ANY PROCEDURE.

Для уничтожения процедуры Oracle использует следую щий синтаксис:

DROP PROCEDURE Для уничтожения функции Oracle использует следующий синтаксис:

DROP FUNCTION Х Х Рассмотрим пример уничтожения функции SQL > DROP FUNCTION SumRecInt;

Function dropped;

121. Протокол уничтожения функции в среде Пакеты Процедуры, функции, переменные и типы, объединенные общим функциональным замыслом, часто оформляют в виде единого объекта базы данных Ч пакета. Прием оформления родственных программ в пакет хорошо известен из програм мистской практики. Особенностью пакетов PL/SQL является компиляция и хранение интерфейсной и испол няемой частей пакета. Пакет как объект состоит из двух час тей: спецификации пакета и тела пакета. В спецификации па кета хранится описание процедур, функций, глобальных пе ременных, констант, типов и курсоров, которые доступны для внешних приложений. В теле пакета определяются все про цедуры, функции и переменные, включая те, которые не были определены в спецификации пакета. Процедуры, функции и переменные, определенные в теле но не описанные в его спецификации, являются локальными. Внешние по отно шению к пакету приложения не могут обращаться к локаль объектам пакета. Локальные объекты предназначены ис ключительно для использования только процедурами и функ циями самого пакета.

Особенностью пакетов PL/SQL является поддержка пере функций и процедур. Процедуры или функции могут иметь одинаковое имя, но различный по типу или ко личеству набор аргументов. В момент обращения к конкрет ной процедуре или функции по числу и типу передаваемых аргументов автоматически определяется требуемая версия процедуры или функции, которая и исполняется. Поддержка перегружаемых процедур, в частности, используется в стан дартном пакете DBMS_OUTPUT для формы обраще ния к процедуре для вывода данных различных типов.

Для создания пакета пользователь должен иметь приви легию CREATE PROCEDURE. Создание пакета в схеме дру PL/SQL Ч процедурное SQL пользователя требует наличия привилегии CREATE ANY PROCEDURE. Оператор определения интерфейсной части (спецификации) пакета Oracle использует следующий синтаксис:

CREATE [OR REPLACE] PACKAGE I Ключевое слово OR REPLACE указывает на безусловное замещение спецификации пакета. Если ключе вое слово OR REPLACE не указано и пакет определен в схе ме, то замещения старой спецификации пакета не происходит и возвращается сообщение об ошибке.

Спецификация пакета начинается с описания констант, типов и переменных. При описании переменных пакета клю чевое слово DECLARE не используется.

пример создания спецификации пакета, ко торая состоит из описания константы, функции и процедуры.

CREATE OR REPLACE PACKAGE PACAA AS 2 PACAA_CONST CONSTANT NUMBER := 3 FUNCTION NUMBER) RETURN NUMBER;

4 PROCEDURE 6 / Package created.

Протокол создания спецификации Оператор определения исполнительной части (тела) паке та Oracle использует следующий синтаксис:

CREATE [OR REPLACE] PACKAGE BODY ] I Ключевое слово OR REPLACE указывает на безусловное замещение старого текста тела пакета. Если ключевое слово OR REPLACE не указано и пакет определен в системе, то за мещения старого значения тела пакета не происходит и воз вращается сообщение об ошибке.

Определение тела пакета начинается с описания конс тант, типов и переменных. Константы, типы и переменные, описанные в спецификации пакета, являются глобальными и в теле пакета повторно не описываются. При описании кон стант и переменных пакета ключевое слово DECLARE не ис пользуется.

Рассмотрим пример создания тела спецификация которого приведена в листинге 122. Пусть функция пакета mulconst выполняет умножение аргумента на константу паке та, а процедура фиксирует факт обращения к функ ции mulconst записью в таблицу значения счетчика рбраще ний и текущей даты. Предполагается, что таблица TabAUD с соответствующими типами данных атрибутов к моменту соз дания тела пакета создана. Протокол создания тела пакета приведен ниже.

SQL> CREATE OR REPLACE PACKAGE BODY PACAA AS 2 NUMBER 0;

3 FUNCTION NUMBER IS 4 BEGIN 5 AUDITMUL;

7 END;

9 PROCEDURE AUDITMUL IS BEGIN 11 PACAA_COUNT PACAA_COUNT + 1;

12 INSERT INTO TabAUD 14 COMMIT;

15 END;

16 END;

/ PL/SQL Ч расширение SQL Package body created.

Листинг 123. Протокол создания пакета, цификация которого представлена в листинге Обратите внимание на то, при описании функций и процедур пакета в отличие от описаний одиночных функций и процедур оператор CREATE не используется.

Константы, типы или переменные, объявленные в специ фикации пакета, могут быть доступны из других программ.

Чтобы обратиться к глобальной переменной или константе нужно указать в качестве префикса имя пакета.

Ниже приведен пример, иллюстрирующий возможность доступа к глобальной константе пакета и невозможность дос тупа к частной переменной пакета. Сравните два примера из листинга 124:

BEGIN 4 / 1. PL/SQL procedure successfully completed.

BEGIN 3 END;

4 / * ERROR at line line 2, column 30:

component must be de- Х clared line 2, column 3:

PL/SQL: Statement ignored Листинг 124. иллюстрирующий доступность глобальных переменных и констант пакета недоступность частных переменных констант Чтобы вызвать процедуру или функцию в вызове также нужно указать имя пакета. Как и переменные и кон станты, функции и процедуры, объявленные только в теле пакета, недоступны извне. В заключение темы рассмотрим пример использования функции созданного пакета.

BEGIN 3 END;

4 / 133. PL/SQL procedure successfully completed.

SQL> SELECT * FROM AT 1 19-03- Листинг 125. Пример обращения функции созданно го пакета При использовании переменных пакета внима ние на то, как производится инициализация пакетных пере менных. В данном случае, после останова и повторного за пуска для новой сессии или после пакета счетчик обращений будет установлен в нулевое состояние. Если по логике приложения требуется независимое от остановов сервера приращение можно воспользоваться таким объектом, как последователь PL/SQL Ч процедурное расширение языка SQL ность. пакетные переменные также можно в блоке инициализации пакета, который выполняется один раз при первом обращении к пакету.

Как правило, в программах PL/SQL происходит обраще ние к объектам базы данных: таблицам, представлениям, по следовательностям, другим программам. Если какой-либо объект, на который будет удален или переопределен, то программа станет непригодной к использо ванию (недействительной). Просмотреть такие программы можно в представлении словаря данных ALL_OBJECTS (у соответствующих записей поле STATUS имеет значение INVALID).

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

SQL> SELECT 2 FROM WHERE OWNER OBJECT NAME Листинг 126. Создание списка недействительных объектов 8. № 1628.

Результатом выполнения такого запроса будут названия программ, представлений, объектных типов и их тел, кото рые в настоящий момент являются непригодными ис пользования, и имена их владельцев. Немного изменив запрос (добавив в него символьные строки вида ALTER COMPILE), можно получить сценарий, с по мощью которого можно будет перекомпилировать объекты.

Также для компиляции объектов схемы можно, использовать процедуру системного пакета Если какая-либо PL/SQL программа станет недействи тельной, то при обращении к ней будет выдано сообщение об и произойдет сброс текущего состояния всех пакетов, т. е. все пакетные переменные и другие конструкции потеря ют свои текущие значения. Иногда может возникнуть необ ходимость специально сбросить состояния пакетов для теку щей сессии. Например, если пакетные переменные играют роль "переменных окружения" для приложения, определяя его поведение в зависимости от их значения. В этом случае следует использовать процедуру систем ного пакета Пример ее работы представлен в листинге 127.

Пусть пакет 1 имеет пакетную символьную менную SQL> BEGIN 4 END;

5 / ' PL/SQL procedure successfully completed.

BEGIN 3 END;

PL/SQL Ч расширение SQL / PL/SQL procedure successfully completed.

SQL> set serveroutput on SQL> BEGIN имеет значение 3 END;

4 / vl имеет значение NULL PL/SQL procedure successfully Листинг Пример сброса состояний пакетов Для освобождения ресурсов сервера может потребоваться уничтожить пакет. В собственной схеме пользователю не требуются дополнительные привилегии для уничтожения па кета. Для уничтожения пакета в схеме другого пользователя необходима привилегия DROP ANY PROCEDURE.

Для уничтожения спецификации пакета и тела пакета Oracle использует следующий синтаксис:

DROP PACKAGE [BODY] Необязательное ключевое слово BODY указывает, что уничтожается только тело пакета. Если ключевое BODY опущено, то удаляется и спецификация и тело пакета.

Параметр задает имя уничтожаемого пакета.

Пример уничтожения пакета рассматривается в листинге 128.

SQL> DROP PACKAGE Package dropped Листинг 128. Пример данных Триггер базы данных Ч это процедура, которая автома тически запускается при возникновении определенных собы тий, связанных с выполнением операций вставки, удаления или модификации данных таблицы. Событие, управляющее запуском описывается в виде логических условий.

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

Триггер запускается при выполнении одной из трех опе раций изменения содержимого таблицы: INSERT, DELETE или UPDATE. Триггер может запускаться и опе раторами, но хотя бы один оператор из трех должен быть обязательно указан в условии запуска триггера. Если пере чень операторов, запускающих триггер, включает оператор UPDATE, для условий срабатывания могут быть указаны конкретные изменяемые столбцы.

Код триггера может выполняться либо до, либо после тех операторов, которые инициировали запуск триггера. Напри мер, если триггер запускается проверки полномочий пользователя на право выполнения то, конечно, нужно использовать триггер с запуском до опе рации (с ключевым словом BEFORE). Если триггер применя ется для формирования данных для аудиторской записи, то разумно использовать триггер с запуском после выполнения операции (с ключевым словом AFTER).

Иногда возникает необходимость отключения триггеров, например, при проведении массовых операций над данными.

Для этого предназначены следующие операторы, которые PL/SQL Ч процедурное расширение SQL могут переключать режим, разрешая или запуск Ч ALTER TRIGGER (изменяется режим указанного триггера) с опцией DISABLE или ENABLE и ALTER TABLE (в этом случае переключается режим у всех триггеров, свя занных с таблицей).

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

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

Чтобы создать триггер, необходимо иметь системную привилегию CREATE TRIGGER. Для создания триггера в схеме, отличной от текущей схемы пользователя, требуется системная привилегия CREATE ANY TRIGGER.

Оператор определения триггера Oracle использует сле дующий синтаксис:

CREATE ]TRIGGER | | DELETE | UPDATE [OF } [OR DELETE | UPDATE ON \ } [FOR EACH условие ] Ключевое слово OR REPLACE указывает на безусловное замещение старого текста триггера. Если ключевое слово OR REPLACE не указано и триггер уже определен, то замещения старого кода триггера не происходит и возвращается сообще ние об ошибке.

Ключевые слова BEFORE или AFTER указывают на вы полнение кода триггера либо до, либо после операторов ма нипулирования данными, инициировавших запуск триггера.

Ключевые слова INSERT, DELETE или UPDATE опре деляют конкретный оператор, запускающий триггер. Не обязательное ключевое слово OR присоединяет дополнитель ный оператор, запускающий триггер.

Ключевое слово ON задает имя таблицы, ассоциирован ной с триггером.

Необязательное ключевое слово FOR EACH ROW опре деляет триггер как строчный.

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

Прежде чем перейти к примеру построения триггера, приведем некоторые дополнительные сведения об обработке исключительных ситуаций в Oracle. Для аварийного заверше ния PL/SQL применяется процедура RAISE_APPLICATION_ERROR. С ее помощью можно обра ботать до определяемых пользователем ошибок с номе рами в от -20000 до -20999. Вызов процедуры приводит к генерации ис ключительной ситуации и завершению выполнения вызвав шей процедуру программы (сравните с рассмотренным выше оператором PL/SQL RAISE). При этом в среду, вызвавшую программу, возвращается номер и текстовое сообщение о ти пе Рассмотрим пример триггера, который выполняется, если значение вводимого атрибута "слишком уклоняется" от сред него значения для текущего состояния таблицы. В роли меры "слишком большого уклонения" выберем широко применяе мое в инженерной практике "трех сигм". Пусть таб лица создана и заполнена предложениями:

CREATE TABLE INSERT INTO Ч SQL INSERT INTO INSERT INTO Tabl Протокол создания триггера представлен в листинге 129.

При срабатывании триггера предусмотрена генерация стан дартной обработки ошибки, которой присваивается номер 20002 с соответствующим диагностирующим сообщением.

Обратите внимание на предопределенную переменную содержащую (по ее смыслу) вводимое значение ат рибута 1.

SQL> CREATE OR REPLACE TRIGGER TRIG_TB 2 BEFORE INSERT ON Tabl FOR EACH ROW 3 DECLARE 4 StatAvg NUMBER;

5 StatStd NUMBER;

6 StatN NUMBER;

8 SELECT, INTO StatStd FROM 10 IF > 3) THEN большое. ' 12 END IF;

.

13 END;

14 / Trigger created.

Листинг 129. Пример создания который запускается при превышении статистики укло нения среднего значения заданного порога Работу механизма триггера проиллюстрируем на приме ре. При вводе значения, достаточно близкого к среднему (в данном случае 4), триггер не запускается и "ничего не проис ходит". При вводе значения атрибута, равного 7 соответст вующая статистика указывает на большое уклонение, проис * ходит срабатывание триггера и новая строка не включается.

Представленная в листинге операция выборки подтвер ждает ожидаемое изменение в таблице.

INTO 1 row created.

INSERT INTO INSERT INTO Tabl * line 1:

Слишком большое at line ORA-04088: error during execution of trigger SQL> SELECT * FROM Tabl;

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

CREATE OR REPLACE TRIGGER TRIG_TB 2 BEFORE INSERT ON Tabl FOR EACH ROW 4 StatAvg NUMBER;

Ч расширение SQL 5 StatStd NUMBER;

6 NUMBER;

7 Special_case EXCEPTION;

8 BEGIN 9 SELECT 10 INTO StatN, StatAvg, StatStd FROM Tabl;

. 11 IF 12 THEN RAISE 13 END IF;

14 EXCEPTION 15 WHEN Special_case THEN.

16 большое 17 WHEN OTHERS THEN 19 END;

20 / Trigger created.

Листинг 131. Пример создания триггера, который запускается так же, как триггер TRIG_TB1, но проводит иную обработку ситуации При вводе атрибута равного 7, соответствующая статистика указывает на большое уклонение, происходит сра батывание Выводится диагностическое сообщение и вводится новая строка. Представленная в лис тинге операция выборки подтверждает ожидаемое изме нение в таблице.

INSERT INTO Tabl Слишком большое уклонение 1 row created.

SQL> SELECT * FROM Раздел 132. Пример, иллюстрирующий работу триг гера по контролю вводимых данных На предложения языка SQL, включенные в код триггера Oracle, наложены некоторые ограничения. Тело триггера не может включать в себя явное использование управляющих операторов COMMIT, ROLLBACK и операто ров языка определения данных CREATE, ALTER и DROP, операторов, управляющих разграничением доступа GRANT и REVOKE, а также неявное выполнение перечисленных опе раторов через вызовы процедур и функций.

Наиболее часто при создании и сопровождении триггеров встречается проблема так называемых мутирующих таблиц.

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

CREATE TABLE INSERT INTO Tabl INSERT INTO Tabl.

CREATE OR REPLACE TRIGGER 2 BEFORE DELETE ON FOR EACH ROW 3 BEGIN 4 IF THEN 5 UPDATE Tabl SET At2=NULL 6 WHERE. 7 END IF;

9 / Trigger created.

Ч процедурное расширение SQL DELETE FROM Tabl WHERE DELETE FROM Tabl WHERE Atl=At * ERROR at line table U1.TAB1 is mutating, trig ger/function not see it at line ORA-04088: error during execution Листинг 133. Пример мутирующей таблицы Причина возникновения ошибки состоит в том, что для операторов SQL, которые работают с множеством строк, не гарантируется порядок обработки указанных строк. Поэтому при каждом выполнении одинаковых операторов могут быть получены различные результаты. различных источниках предложены многочисленные способы решения проблемы мутирующей таблицы. Рассмотрим следующий алгоритм: в триггере уровня строки сохранить записи, которые подлежат изменениям в таблице PL/SQL (для объявления PL/SQL таб лицы понадобится пакет), а необходимые действия по изме таблицы выполнить в триггере AFTER. Реализация этой идеи представлена в листинге CREATE OR REPLACE PACKAGE packagel AS 2 PROCEDURE 3 PROCEDURE IN 4 PROCEDURE 5 END;

6 / Package created.

SQL> CREATE OR REPLACE PACKAGE packagel AS 3 TYPE IS TABLE OF INTEGER 4 INDEX BY 5 At2_table 6 At2_ind 8 PROCEDURE clear_count IS 9 BEGIN 11 END;

13 PROCEDURE IN INTEGER) IS 14 BEGIN 17 END;

19 PROCEDURE null_tab IS 20 INTEGER;

21 BEGIN 22 FOR i IN l..At2_ind LOOP 24 UPDATE Tabl SET 25 WHERE 26 END 27 END;

30 / Package body created.

CREATE OR REPLACE TRIGGER 2 BEFORE DELETE ON Tabl 3 BEGIN 7 / Trigger created.

SQL> CREATE OR REPLACE TRIGGER Tr 2 BEFORE DELETE ON Tabl FOR EACH ROW 3 BEGIN END;

6 / Trigger created.

Ч процедурное расширение SQL SQL> CREATE OR REPLACE TRIGGER Tr 2 AFTER DELETE ON END;

6 / Trigger created.

SQL> DELETE FROM Tabl WHERE 1 row deleted.

SQL> SELECT.* FROM AT 134. Решение проблемы мутирующей таблицы Несмотря на то, что листинг кажется громоздким и непо нятным, пример имеет прозрачную логику. В пакете packagel объявлена PL/SQL таблица Для каждой удаляемой записи триггер Тг2 с помощью пакетной функции add_At заносит в нее значение поля At2 удаляемой записи и увеличи вает значение "индекса" для этой таблицы. Значение "индек са" (пакетной переменной перед каждым примене нием оператора DELETE к таблице Tabl обнуляет триггер вызывая пакетную процедуру clear_count. А после фор мирования PL/SQL таблицы и внесения изменений в таблицу выполняется триггер который имеет тип AFTER и вносит изменения, которые ранее выполнялись непосредст в теле первой версии триггера Схематично после довательность срабатывания триггеров можно представить так: Trl (BEFORE обнуляем "индекс"), Tr2(BEFORE FOR EACH Ч для каждой записи значение At2), Tr3(AFTER Ч реализуем изменения, запомненные в PL/SQL таблице).

Некоторым недостатком такого способа является боль шой объем памяти, требуемый для промежуточного хранения Раздел изменяемых данных. Отчасти его можно устранить Ч при завершении работы приложения PL/SQL таблице значение пустой таблицы или применить системную пакет ную функцию для освобождения памяти.

пакеты Oracle Промышленная разработка серверной логики на языке PL/SQL требует от программиста знаний возможностей, пре доставляемых стандартными средствами сервера В комплект поставки сервера входит большое паке тов, предназначенных для облегчения и унификации процесса разработки пользовательских процедур и функций.

для экономии времени и повышения производительности следует широко использовать стандарт ные пакеты Oracle.

Всего стандартных пакетов поставляется около Наличие тех или иных пакетов зависит от версии сервера и комплекта поставки. Если какие Ч либо пакеты отсутствуют, но из документации известно, что для данной версии они су ществуют, то администратор базы данных должен выполнить соответствующий сценарий, создающий необходимые про граммы, таблицы, представления, синонимы, предоставляю щий привилегии и т. п. Как правило, стандартные пакеты на ходятся в схеме пользователя SYS и имеют имена с префик сом DBMS. Далее рассмотрим с основными стандарт ными пакетами: DBMS_SQL (динамический SQL), DBMS_JOB (управление заданиями), UTL_FILE (файловый ввод-вывод), DBMS_LOB (работа с большими объектами).

Динамический SQL Основное отличие динамически формируемых SQL предложений от обычных состоит в том, что первые динамически формируются и выполняются во время Ч процедурное расширение выполнения PL/SQL программы, а вторые Ч но кодируются при написании самой программы.

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

Большинство PL/SQL программ кодируется для конкрет ной базы данных, конкретной структуры таблиц. Благодаря этому, практически любую PL/SQL можно напи сать с использованием только статических предложений, осо бенно если не учитывать сложность и размер программы. Но даже если не требуется создать программу, обладающую гиб костью при управлении непредусмотренными при кодирова нии выражениями, существует, по крайней мере, две причи ны, по которым необходимо использование динамически формируемых SQL-предложений:

В хранимые процедуры нельзя передавать в качестве па раметра имя объекта базы данных. При компиляции про граммы PL/SQL Oracle кроме синтаксической проверки про водит также проверку полномочий и зависимостей объектов базы чтобы удостоверится в правильности написания программы. Если же имя объекта базы данных неизвестно, такая проверка невозможна. Поэтому выражение вида SELECT FROM где передается как параметр, будет отвергнуто еще при проверке кода.

В PL/SQL нельзя использовать выражения языка DDL.

Например, нельзя создать последовательность или таблицу.

Если бы в PL/SQL непосредственно поддерживались DDL предложения, то программа могла бы создавать таблицы и зависела бы от этих таблиц, еще не существующих при ком пиляции, что также является недопустимым.

комплект поставки сервера входит пакет DBMS_SQL, обеспечивающий выполнение динамически формируемых SQL-предложений в программах на PL/SQL.

Динамические SQL-предложения конструируются непосред ственно во время выполнения программы в виде символьной строки, передаются соответствующим программам пакета DBMS_SQL для разбора и исполнения. Ответствен ность за возможное нарушение объектных зависимостей и прав доступа, которые Oracle в данном случае во время ком пиляции не проверяет, теперь ложится на программиста.

Если некоторое SQL-предложение является динамически формируемым, то приложение должно обеспечить построе ние правильного SQL-предложения, его разбор и выполнение, определение столбцов для строк возвращаемого набора (в случае запроса) и выборку строк. Число шагов, требуемое для выполнения динамического SQL-предложения, изменяется в зависимости от типа предложения. Для выполнения операто ра DDL и, скажем, запроса, они будут разными.

Для динамически сформированных операторов SQL, ко торые возвращают данные (т. е. для операторов SELECT) ис пользуется следующая последовательность обработки: от крытие курсора, разбор запроса, связывание переменных, оп ределение столбцов, выполнение запроса, выборка строк, по лучение значений столбцов, закрытие курсора.

Приведем пример использования динамического SQL для выполнения запроса. Пусть таблицы и созданы и заполнены с помощью следующих CREATE TABLE INTEGER, CREATE TABLE INTEGER, INSERT INTO INSERT INTO Tabl Ч расширение SQL Создадим процедуру, которая копирует данные из лицы, указанной параметром p_table_namel в таблицу ука занную параметром p_table_name2.

CREATE OR REPLACE PROCEDURE copy 2 (p_table._namel IN IN IS 3 l_Atl.5 INTEGER;

6 d_cursor INTEGER;

7 ignore INTEGER;

8 BEGIN 9 := FROM 12 " (c_cursor, _ 13 (c_cursor, 14 ignore 15 := 17 VALUES (:Atl, 18 " LOOP 19 IF THEN 20 1, _ 21 2, 23.

24 ignore := 25 ELSE ' 21 END IF;

28 END 29 COMMIT;

32 END;

33 I Procedure created.

SQL> BEGIN copy 3 END;

PL/SQL procedure successfully completed.

SQL> SELECT * FROM AT 1 15-03- 2 05-03- 135. Пример выборки данных с использова нием динамического SQL В данном примере предполагалось, что структура таблиц одинакова и они имеют заранее известные названия столбцов.

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

Вернемся к логике процедуры сору. В полном соответст вии с изложенной последовательностью действий, функция DBMS_SQL.OPEN_CURSOR открывает курсор и возвращает в переменную c_cursor его идентификатор. Затем для курсора процедура DBMS_SQL.PARSE производит синтаксический разбор запроса, который выбирает данные из таблицы источника. Обратите внимание на последний параметр про цедуры PARSE Ч пакет DBMS_SQL содержит три глобаль ные константы типа INTEGER: V6, V7 и NATIVE. Константы Ч процедурное расширение языка SQL указывают на использование определенных правил. V6 и определяют поведение SQL-предложения по правилам Oracle 6 или Oracle 7 соответственно, NATIVE определяет поведе ние согласно той версии базы данных, с которой работает приложение. Процедура определяет столбцы для записей, возвращаемых запросом. В запросе два столбца и процедура вызывается дважды. После выполнения этих операций запрос выполняется функцией EXECUTE. Для каждой записи, извлеченной из этого по аналогич ной схеме формируется предложение вставки во вто рую таблицу. В предложении INSERT требуется подстановка копируемых значений данных (связывание объявленных пе ременных с их значениями). Для этого служит Каждая запись вставляется в таблицу с помощью другого курсора.

Обратите внимание Ч для предложения INSERT, опре деляющего второй курсор, функция PARSE вызывается толь ко один раз. Действительно, для всех записей копируемой таблицы оно будет отличаться только значениями данных.

Поэтому, чтобы не производить каждый раз синтаксический разбор, необходимо определить связанные переменные и только указывать их значения для каждой вставки данных. В конце процедуры оба закрываются. * Для остальных видов динамически сформированных предложений SQL, которые различаются наличием или от сутствием возвращаемых данных, параметрами и т. п., ис пользуются другие схемы вызова процедур и функций пакета DBMS_SQL.

Таблица 6. Описание процедур и функций пакета DBMS SQL Имя Описание или Связывает значение с переменной в курсоре. Если переменная является вида IN или IN OUT, то связываемое значение должно быть того же типа.

CLOSE_CURSOR Закрывает открытый курсор, освобо ждая выделенную под него память.

Получает значение атрибута записи курсора для текущей записи данного курсора.

Определяет поле записи, которая должна быть выбрана из курсора.

PARSE Разбор для курсо ра. Если разбираемое предложение является DDL-предложением, то про цедура выполняет это предложение.

EXECUTE Выполняет предложение, разобран ное в курсоре, и возвращает число обработанных в процессе выполнения строк (для операторов INSERT, UPDATE и FETCH_ROWS Извлекает строку из курсора в ло кальный буфер. Чтобы затем прочи тать значения в извлеченной строке, надо использовать процедуру column value.

EXECUTE AND Выполняет предложение, разобран FETCH ное в курсоре, и извлекает первую курсора.

Проверяет, открыт ли курсор.

LAST ERROR Если имеет место ошибка во время POSITION выполнения операции, разобранной в курсоре, то функция возвращает от носительную позицию в курсорном предложении, которая послужила причиной ошибки.

Возвращает число строк, извлечен COUNT ных до момента ее вызова из курсора.

Ч процедурное расширение SQL LAST_SQL Возвращает код FUNCTION CODE новый курсор.

Файловый ввод-вывод Иногда возникает необходимость организовать работу программ PL/SQL с текстовыми файлами, например, для ор ганизации обмена данными с внешними системами. Конечно, с этой целью можно использовать клиентское приложение, например SQL*Loader, или с помощью Oracle Report Builder создать текстовый отчет. Но есть ситуации, когда обработку файлов требуется встроить именно в хранимые программы на стороне сервера, например, для ведения собственного журна ла аудита или протокола, характеризующего действия жений. При неудачном завершении операции изменения, сде ланные в таблицах аудита, будут отменены наряду с измене ниями собственно данных. Если же производить запись изме нений в текстовый файл на стороне сервера, то они сохраня ются и после отката транзакций. С помощью механизмов PL/SQL для работы с файлами также можно загружать в базу данных Java-программы.

Пакет предоставляет программам PL/SQL возможность открывать текстовый файл, находящийся в не котором каталоге на сервере и работать с ним. пакет UTL_FILE входят процедуры, описанные в таблице 7.

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

SQL> SELECT value dir FROM 2 WHERE name='utl file C:\Dirl Листинг 136. Просмотр доступных каталогов.

Используется следующая последовательность действий с текстовыми файлами Ч сначала файл открывается в соответ ствующем режиме (для чтения, для записи или для добавле ния данных), производятся действия с его содержимым, затем файл закрывается. После открытия файла во все последую щие процедуры и функции передается его идентификатор, который представляет собой переменную специального типа, объявленного в пакете UTL FILE.

Таблица 7. Описание процедур и функций пакета UTL FILE Имя процедуры Описание или функции FOPEN Открывает указанный файл для чте ния/записи.

Проверяет, открыт ли файл.

FCLOSE Закрывает файл.

FCLOSE_ALL Закрывает все открытые файлы.

Считывает строку из файла.

PUT Записывает строку в файл. Символ конца строки не добавляется.

Записывает строку в файл. Символ конца строки В качестве примера работы с пакетом приве дем процедуру, которая построчно переносит результат за проса к таблице в файл. У процедуры имеется параметр p_mode, режим открытия файла.

Ч процедурное расширение SQL CREATE OR REPLACE PROCEDURE IN IS 2 fid 3 BEGIN 4 fid := 5 FOR rec IN (SELECT FROM LOOP 7 END LOOP;

9 EXCEPTION 10 WHEN 11 THEN ка талог ' ) 12 WHEN 13 THEN ре жим работы с 14 WHEN дескриптор файла ;

WHEN 17 THEN не был открыт для 18 WHEN 19 THEN ОС при чтении 20 WHEN 21 THEN ОС при записи в 22 WHEN THEN внутренняя 24 WHEN OTHERS THEN 27 / Procedure created.

Раздел SQL> BEGIN 3 END;

4 / PL/SQL procedure successfully completed.

137. Пример работы с текстовыми файлами из PL/SQL В ходе выполнения процедуры с параметром p_mode, равным (append), в файл находящийся в катало ге будут вставлены записи из таблицы Обрати те внимание Ч если вызвать процедуру с параметром p_mode, равным (write), то существующее содержимое файла будет заменено на содержимое таблицы. После откры тия файла в цикле с помощью процедуры выполняется запись строк в него. Ис ключительные ситуации, которые могут возникнуть при ра боте пакета объявлены в самом пакете и обраба тываются в процедуре Для сложных действий с файлами можно использо вать готовые библиотеки, программы которых могут осуще ствлять поиск строк в записывать строки в заданное место в файле, форматировать их и т. п.

Управление заданиями Управление заданиями является мощным средством реа лизации бизнес-логики для баз данных. Для систем, осущест вляющих пакетную обработку данных, обязательно наличие который позволяет в заданные моменты времени выполнять задания. Например, для систем, автоматизирую щих финансовые расчеты за оказание каких-либо услуг, целе сообразно в некоторые установленные моменты времени ав томатически собирать сведения о задолженности клиентов за оказанные услуги. Во время, когда сервер баз данных Ч процедурное расширение SQL жен в меньшей степени, например ночью или в выходные в пакетном режиме автоматически запускаться процедуры, выполняющие эти действия. Для сервера Oracle планировщиком заданий являются процедуры и функции па кета DBMS_JOB.

При использовании пакета DBMS_JOB можно поставить в очередь заданий программы, которые будут выполнены в различные сроки в соответствии с указанными параметрами запуска. На выполнение можно отправить любую программу, написанную на языке PL/SQL. Эти программы могут выпол няться либо фоновым процессом сервера БД с привилегиями поставившего их в очередь пользователя, либо собственно пользовательским процессом. В приведенных примерах при меняется процедура Данная процедура посылает серверу БД запрос на выполнение указанной поль зователем хранимой программы для запуска ее отдельным фоновым процессом.

Процесс, который управляет заданиями, называется SNP процессом. Для того чтобы задания, находящиеся в очереди, могли выполняться по заданному должен суще ствовать хотя бы один SNP-процесс. Всего в системе могут находиться до тридцати шести SNP-процессов, имеющих идентификаторы от SNPO до SNP9 и от SNPA до SNPZ. Если при работе SNP-процесса происходит сервер авто матически запускает его снова. Для определения интервалов между попытками запуска служат параметры в файле ини циализации базы данных.

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

Таблица 8. Описание процедур и пакета DBMS JOB Имя процедуры Описание или SUBMIT Устанавливает задание в очередь.

CHANGE Изменяет параметры задания в очереди.

WHAT Изменяет описание для задания.

NEXT_DATE Изменяет следующее время вы полнения для задания.

REMOVE Удаляет задание из очереди.

BROKEN Помечает задание как ненужное.

RUN Указывает немедленно выпол нить задание.

INTERVAL Изменяет интервал между после дующими запусками задания.

Будем рассматривать в качестве задания процедуру которая за один вызов выполняет вставку одной записи в таб лицу Поставим ее в очередь со следующими DECLARE 2 NUMBER;

3 BEGIN 5.

9 / PL/SQL procedure successfully completed.

Листинг 138. Пример создания задания с помощью процедуры SUBMIT Ч SQL В очередь помещается процедура с немедленным вы полнением сразу после помещения и последующим выполне нием каждые 10 секунд. На терминал выводится уникальный номер задания, присвоенный (23).

Данные о заданиях пользователя, которые в данный мо мент находятся в очереди, хранятся в представлении словаря данных USER_JOBS. Пример просмотра информации о зада ниях представлен в 139.

SELECT job, 2 FROM JOB LAST_SEC NEXT_SEC BROKEN INTERVAL WHAT 23 11:27:01 N.

Листинг 139. Пример просмотра сведений о заданиях в очереди из представления USER JOBS В первом столбце указаны номера заданий, которые оп ределяет процедура SUBMIT при постановке задания в оче редь. Эти номера генерируются специальной последователь ностью SYS.JOBSEQ. Знать номер, присвоенный заданию, необходимо, например, для его удаления из очереди. Для это го используется процедура REMOVE, параметром которой является только номер, а не имя задания. В следующих столбцах указаны сведения о времени последнего и следую щего выполнения задания, интервала выполнения и какая именно программа составляет задание. Меткой BROKEN по мечаются те задания, при шестнадцати попытках выполнения которых произошли ошибки. задание можно пометить специально, используя процедуру может возникнуть необходимость удалить не нужное больше задание. Пример удаления задания из очереди приведен в листинге 140., BEGIN 2 REMOVE 4 / procedure successfully completed.

Листинг 140. Пример удаления задания из очереди Важно учитывать то, что время следующего выполнения задания зависит от успешности предыдущего выполнения. То есть если, например, установить в понедельник при постанов ке задания в очередь в процедуре SUBMIT параметр чтобы она выполнялась каждый понедельник, то необязательно так будет происходить на самом деле. Если в понедельник произошел сбой в работе и задание выполнить не удалось, а удалось только, скажем, в среду, то время ново го выполнения будет вычислено начиная со среды, и выпол няться оно будет, соответственно, каждую среду. Точно так же, если послать задание на RUN, то время следующего выполнения будет рассчитано с этого мента.

Управление Oracle в настоящее время поддерживает следующие типы данных для работы с большими неструктурированными объ ектами максимальный размер которых не превышает 4 гигабайта:

Ч BLOB Ч тип для хранения неструктурированных двоичных данных;

Ч CLOB и NCLOB Ч типы для хранения символьных данных.

Эти типы данных могут использоваться при описании столбца таблицы, атрибута объекта или в PL/SQL. Различие Ч процедурное расширение SQL между типами и состоит в использовании раз личных кодовых таблиц.

Тип BFILE предназначен для описания файлов, находя щихся вне базы данных Oracle. По этой причине при работе с объектами типа BFILE не поддерживается механизм Oracle (для типов поддерживается). Та ким образом, можно выделить внешние (BFILE) и внутренние (BLOB, CLOB) объекты.

Структура всякого включает две компонен ты:

Ч указатель на объект (внутренняя ссылка на фактиче ское LOB-значение), который и находится в таблице;

Ч LOB-значение, которое хранится в специально отве денном месте для хранимых в столбцах LOB можно указать отдельное табличное пространство).

Значение LOB-поля может храниться либо вместе со строкой таблицы, либо Содержание поля с LOB может характеризоваться одним из трех пусто, NULL и наличие значения. Для того чтобы установить указатель на LOB-объект, используется функция EMPTY_BLOB (EMPTY_CLOB). реально играют роль всего только места хранения указателя на факти ческий объект, в БД. При всякой работе с LOB-объектом доступ к нему производится через соответст вующий указатель. Когда в выбирается ко мандой SELECT указатель, он становится согласованным по чтению. Это значит, что данные, выбранные в свою очередь по этому указателю, будут все время соответствовать момен ту выборки этого указателя. Если потом то же самое поле бу дет выбрано в другую LOB-переменную, и далее изменено, то значение, выбираемое по первой LOB-переменной, не изме нится.

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

Для обращения к файлам используется специальный объ ект базы данных Ч каталог, который представляет собой ука зание на место нахождения файлов в файловой системе. Ка талог создается CREATE DIRECTORY AS путь ОС.

CREATE DIRECTORY AS Directory created.

Пример создания каталога Проиллюстрируем вышесказанное на примере таблицы SQL> CREATE ТаЫ BLOB, 2 At Table created.

SQL> INSERT INTO 1 row created.

INSERT INTO VAL UES 1 row created.

SQL> INSERT INTO Tabl VALUES 1 row created.

142. Пример вставки в таблицу LOB объектов и для объектов BLOB (CLOB), столбцам типа BFILE можно присвоить значения NULL или значения-указатели на Ч расширение SQL файлы. Для этого служит специальная функция BFILENAME.

Пример ее работы представлен в листинге При удалении этой записи из таблицы с файлом filel никаких действий не производится.

Для работы с предназначен стандартный пакет Процедуры и функции из этого пакета по зволяют производить различные операции (чтение, запись) над LOB-объектами как целиком, так и по частям.

Таблица 9. Описание процедур и функций пакета DBMS LOB Имя процедуры Описание или APPEND Приписывает к одному другой:

WRITE Записывает данные в LOB-объект.

COMPARE Сравнивает два LOB-объекта одного типа GETLENGTH Возвращает длину LOB-объекта.

Возвращает позицию n-ого вхожде ния строки в LOB-объект.

READ Считывает часть LOB-объекта.

Возвращает часть LOB-объекта начи ная с заданного смещения.

FILECLOSE Закрывает файл по указателю BFILE.

FILECLOSEALL Закрывает все файлы по имеющимся указателям BFILE.

Проверяет фактическое наличие фай ла по указателю.

Выдает имя директории и имя файла для заданного указателя BFILE.

FILEISOPEN Проверяет, открыт ли файл по BFILE указателю.

FILEOPEN Открывает файл для заданного Раздел COPY Копирует ERASE Удаляет объект полностью или час тично.

TRIM Обрезает до заданной длины.

В качестве примера работы с с исполь зованием пакета DBMS_LOB приведем процедуру которая сравнивает файлы в каталоге Имена файлов передаются как параметры.

SQL> CREATE OR REPLACE PROCEDURE f_compare 2 IN VARCHAR2, IN IS 3 fil_l BFILE;

4 fil_2 BFILE;

5 result INTEGER;

6 BEGIN fil_l 8 fil_ 4294967295,1,1);

13 IF (result != 0) THEN 15 ELSE одинаковые 17 END 21 / Procedure created.

SQL> BEGIN 4 / Ч расширение SQL Файлы одинаковые SQL> BEGIN 3 END;

, 4 / Файлы различные BEGIN / BEGIN - * ERROR at line 1:

file or LOB operation FILEOPEN failed He удается найти указанный файл ORA-06512: at line line ORA-06512: at line Листинг 143. Пример работы с При последнем вызове процедуры не удалось открыть указанный файл. Обратите внимание, ошибка произошла при попытке открыть файл. Установка же указателя на объект BFILE произошла нормально.

Для загрузки файлов в таблицы как значена специальная функция LOADFROMFILE пакета Функции в качестве параметров передается пе ременная типа BFILE, связанная с загружаемым файлом, ко личество байт, считываемое из файла и указатель на объект приемник. Пример загрузки файла в таблицу представ лен в листинге DECLARE 2 1_BLOB BLOB;

3 BFILE;

4 BEGIN 9. № 1628.

. 5 SELECT INTO 1_BLOB FROM 6 WHERE FOR UPDATE;

7 fil_l 12 COMMIT;

END;

14 / PL/SQL procedure- successfully completed.

Листинг 144. Пример загрузки файлов в таблицу как Обратите внимание, сначала объект, в который загружа ются данные из блокируется с помощью SQL выражения SELECT FOR UPDATE, а функция LOADFROMFILE осуществляет в него загрузку. В этом при мере блокировалось значение, предварительно зированное функцией EMPTY_CLOB() (строка с 1=2). В том случае, если блокировать строку, в которой значение BLOB столбца равно NULL (строка Atl=l) и попытаться выполнить загрузку в него, то произойдет ошибка.

Остальные функции пакета DBMS_LOB предназначены для чтения элементов, записи объектов, их сравнения и т. п.

Управление доступом, Сервер Oracle производит обработку данных в условиях многопользовательского доступа. Транзакционная модель Oracle, уровни изоляции, блокировка таблиц и строк обсуж даются в разделе "Методы обеспечения целостности данных.

Использование возможностей сервера по обеспечению совме стной работы с одними данными в программах на имеет свои особенности. Как правило, программа должна за блокировать данные, над которыми она собирается произво Ч расширение SQL дить действия, а затем их выполнить. Если произвести такую блокировку не удается, то приложение либо выдает сообще ние пользователю о том, что необходимые для выполнения операции данные заблокированы, либо выполняет преду смотренные в таком случае действия, например, через неко торый интервал времени пытается выполнить блокировку еще раз. В некоторых средствах разработки клиентских приложе ний, например, в Oracle Form Builder, блокирование записей производится автоматически.

Рассмотрим примеры реализации обработки данных в ус ловиях многопользовательского доступа в программе на язы ке PL/SQL. Для проведения массовых операций, связанных с, модификацией данных, целесообразно заблокировать всю таблицу с использованием оператора LOCK TABLE. В при мере в листинге 145 процедура пытается вать таблицу, сделав несколько попыток. Параметры проце дуры: количество попыток и время ожидания между ними в секундах. Логика работы процедуры довольно прозрачна Ч после очередной неудачной попытки заблокировать таблицу оператором LOCK TABLE с опцией счетчик попы ток увеличивается и выдерживается пауза в заданное число секунд (ожидание реализуется функцией SLEEP стандартного пакета В случае превышения отведенного числа попыток процедура завершает работу с выдачей соот ветствующего сообщения. Для унификации операции блоки рования таблиц данный пример можно доработать Ч переда вать в качестве параметра имя таблицы и выполнять оператор LOCK TABLE с помощью динамического SQL.

CREATE OR REPLACE PROCEDURE 2 locktable NUMBER, NUMBER) IS 3 a NUMBER := 0;

4 l_err NUMBER := 1;

5 BEGIN 6 WHILE l_err>0 AND a<=p_count LOOP 7 BEGIN 9 LOCK TABLE 10 IN SHARE ROW EXCLUSIVE MODE 12 EXCEPTION WHEN OTHERS THEN 13 IF SQLCODE IN THEN 15 ELSE 17 END IF;

18 END;

19 END LOOP;

21 IF l_err>0 THEN 22 ~ неудачна 23 END IF;

25 EXCEPTION WHEN OTHERS THEN 29 / Procedure created.

Ч пусть таблица -- заблокирована другим приложением BEGIN Х 5 END;

6 / 12:09: Произошла ошибка ORA-20000: Блокировка неудачна 12:09: PL/SQL procedure 145. Пример функции, осуществляющей бло кировку таблицы Ч процедурное расширение SQL Эту или аналогичную процедуру можно использовать в системах обработки данных, для которых требуется блоки ровка всей таблицы. Если же необходимо изменить отдель ную запись, следует использовать процедуру, подобную пред ставленной в листинге 146 процедуре Логика работы процедуры p_update тоже довольно прозрачна Ч по сле блокирования строки (считаем, что возвращается всегда ровно одна строка) происходит ее изменение. Если попытка блокирования завершилась неудачно, выдается соответст вующее сообщение.

CREATE OR REPLACE 2 IN 3 " l_rowid ROWID;

4 locked EXCEPTION;

6 Locked2 EXCEPTION;

7 PRAGMA 8 BEGIN 9 SELECT ROWID INTO l_rowid 10 FROM WHERE Atl=p_atl FOR UPDATE 12 UPDATE Tabl SET At2=p_at 13 WHERE ROWID = 14 EXCEPTION WHEN locked THEN данные 17 WHEN THEN данные заблокированы 19 WHEN OTHERS THEN 20 недиаг ност. ошибка / Procedure created.

Листинг функции, изменяющей запись с предварительной ее блокировкой Использование функций в Начиная с версии Oracle появилась возможность ис пользования пользовательских хранимых программ, отве чающих определенным требованиям, в SQL-выражениях. Вы зов этих программ внутри SQL-выражений ничем не отлича ется от вызова встроенных функций SQL. Как правило, эти функции используются там, где требуется реализация слож ной логики с использованием управляющих структур (прове рок условий, циклов).

Наряду со стандартными требованиями к программам PL/SQL, эти функции должны соответствовать еще ряду ог раничений. Ограничения на их реализацию указываются с помощью так называемых спецификаций доступа или "уров ней чистоты", соответствие которым проверяется на этапе компиляции или вызова. Кроме того, вызываемые функции должны иметь параметры только типа IN. Спецификации дос тупа представлены в таблице Таблица 10. Спецификации доступа Директива Ограничения Функции запрещена модификация данных в таблицах (представлениях) базы данных.

Функции запрещена модификация \ переменных, хранимых в пакетах.

Функции запрещено данных из таблиц и представлений базы дан ных.

RNPS Функции запрещено чтение значений переменных, хранимых в пакетах.

PL/SQL Ч процедурное расширение SQL Для автономных функций соответствие ограничениям проверяется при их вызове в SQL-выражении. В том случае, если функция не соответствует ограничениям, возникает ошибка.

Для пакетных функций указание спецификаций доступа с помощью конструкции PRAGMA Она помещается в заголовке па кета совместно с объявлением функции. В качестве примера можно привести функцию, которая осуществляет вывод сум мы прописью. Полностью привести ее исходный код не пред ставляется возможным в связи с его представим только результаты работы. При формировании результирую щей строки функция обращается к таблицам, в которых нахо дятся справочные данные, поэтому соответствует только уровню SQL> CREATE OR REPLACE PACKAGE p_sum_as_string AS 2 FUNCTION IN NUMBER) RETURN 3 PRAGMA RESTRICT_REFERENCES 5 / Package SELECT str 2 FROM STR 10.34 Десять рублей 34 коп.

745.23 сорок пять рублей 23 коп.

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

Высокая степень безопасности данных должна быть обес печена без уменьшения функциональности СУБД и прак тически без усложнения работы пользователя в системе. Ме ханизм обеспечения безопасности данных должен обладать гибкостью и удобством администрирования системы.

Для обеспечения защиты в Oracle используется система избирательного управления доступом. Это означает, что ад министратор баз данных создает пользователей базы данных и управляет их полномочиями на выполнение конкретных операций с конкретными объектами. Далее описываются раз Средства разграничения в Oracle личные средства разграничения доступа, реализованные в Oracle.

Задача распознавания пользователей и разграничения доступа между пользователями системы решает ся как на уровне средств операционной системы, так и на уровне средств СУБД. Стандартным подходом, характерным для обоих уровней, является деятельность администраторов, которые создают (регистрируют) пользователей в системе и управляют назначением привилегий. С другой стороны всякая система должна поддерживать естественный порядок, при котором пользователь, создающий некоторый объект, имеет право на управление доступом к объекту. Обычное ре шение состоит в реализации концепции привилегии или права доступа. Привилегия Ч это некоторый поддерживаемый сис темой признак, который определяет, может ли конкретный пользователь выполнить конкретную операцию. Имеется не сколько типов привилегий, соответствующих нескольким ти пам операций. В языке SQL Ч базовом языке промышленных СУБД Ч привилегии определяются и отменяются двумя ко мандами: GRANT (предоставить привилегию) и REVOKE (отменить привилегию).

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

В Oracle реализована поддержка принципа "безопасности по умолчанию" или принципа "наименьших привилегий".

265.

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

В разделе рассмотрены следующие программ ные решения по обеспечению безопасности информации, ко торые реализованы в СУБД Ч анализ включающей инфраструктуры;

Ч технологии аутентификации;

Ч статические средства разграничения доступа;

Ч динамические средства разграничения доступа;

Ч средства аудита;

Ч средства управления нагрузкой.

Анализ включающей инфраструктуры Любой сервер баз данных работает под управлением не которой операционной системы, поэтому первым шагом ана лиза защищенности информации в базах данных должен быть анализ защищенности ресурсов сервера баз данных как объ ектов операционной системы. Система безопасности сервера баз данных включает как внешние по отношению к серверу средства (в первую очередь средства операционной системы), так и собственные механизмы сервера. Верхний уровень за щиты информации базы данных состоит в контроле принци пиальной возможности доступа к данным. Прежде чем нется работа с базой данных, администратор должен выпол нить некоторые действия по инициализации сервера. Никакой пользователь не может использовать данные, пока обладаю щий соответствующими правами администратор не сервер и не сделает базу данных доступной. В терминологии Oracle администратор должен запустить экземпляр (instance) доступа в Oracle сервера базы данных. В ходе запуска экземпляра базы данных Oracle открывает определенные файлы операционной систе мы, необходимые для того, чтобы сделать базу данных дос тупной.

Для операционных систем Windows NT или 2000 запуск экземпляра может быть выполнен утилитой Пример запуска экземпляра представлен в листинге 148.

С:

Oracle Server Manager Release - Produc tion (c) Copyright 1997, Oracle Corporation. All Rights Reserved.

Enterprise Edition Release 8.0.5.0.0 -.

PL/SQL Release 8.0.5.0.0 - Production connect internal Password:

Connected.

ORACLE instance started.

Total System Global Area 15077376 bytes Fixed Size - 49152 bytes Variable Size 12906496 bytes Database Buffers 2.048000 bytes Redo Buffers 73728 bytes Database mounted.

Database opened.

Server Manager complete.

148. Протокол запуска экземпляра Oracle на Windows После запуска администратором экземпляра базы данных и ее открытия пользователи могут присоединяться к базе дан ных. Завершая работу с базой данных, администратор раз монтирует ее, отсоединяя от экземпляра, а затем ет экземпляр. В процессе останова сервера базы данных Oracle завершает запущенные процессы и закрывает файлы операционной системы, в которых хранится информация базы данных. Для систем Windows NT и Windows 2000 останов экземпляра осуществляется утилитой Пример оста нова экземпляра представлен в листинге Oracle Server Manager Release 3.0.5.0.0 - Produc tion (c) Copyright 1997, Oracle Corporation. All Rights Reserved.

Enterprise Edition Release 8.0.5.0.0 Production PL/SQL Release 8.0.5.0.0 - Production SVRMGR> connect internal Connected.

Database closed.

Database dismounted.

ORACLE instance shut Server Manager complete.

Листинг 149. Протокол останова экземпляра Oracle на Windows Естественно, что перечень администраторов Oracle, имеющих право запускать экземпляры сервера баз данных, изменять состояние баз данных и их табличных областей, быть продуман, как и технология генерации и смены паролей.

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

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

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

Обычно перевод табличной области в автономное со стояние используется для резервного копирования данных. В то же время с позиций обеспечения безопасности данных управление доступностью табличных областей Oracle может оказаться полезным для решения задач разграничения досту па. Например, если таблицы некоторого приложения находят ся в конкретной табличной области, то администратор может эффективно запретить работу приложения, переведя соответ ствующую табличную область в автономное состояние. Более конкретно, пусть табличная область содержит данные, доступ к которым требуется достаточно редко, но данные важные (архивные данные). Администратор может эффективно за прещать доступ к этим данным, поддерживая соответствую щую табличную область в автономном При полу чении распоряжения о проведении обработки данных адми нистратор переводит табличную область в оперативное со стояние, и пользователи могут выполнять доступные им при ложения по обработке данных из этой табличной области.

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

Раздел ALTER OFFLINE NORMAL;

Tablespace altered.

SELECT * FROM SELECT * FROM TAB2 * ERROR at line ORA-00376: file 5 cannot read at this time data file 5:

, SQL> ALTER TABLESPACE USER_DATA Tablespace altered.

SELECT * FROM Пример управления доступностью таб личной области Oracle Похожим средством защиты данных от преднамеренного или случайного изменения является возможность перевода табличной области в состояние только для чтения (read only).

Каждый пользователь Oracle должен иметь специальный идентификатор: имя или точку входа. Создание нового иден тификатора осуществляется уполномоченным пользователем или администратором выполнением предложения CREATE USER (подробно описанного выше).

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

в Oracle Вновь созданный пользователь не имеет никаких прав на вы полнение операций с объектами системы. Например, при по пытке получить доступ к системе по команде CONNECT сис тема отвергнет попытку доступа, выдав сообщение об отсут ствии необходимых прав доступа у пользователя. Для успеш ной регистрации в системе администратор должен предоста вить пользователю привилегию на образование вы полнив предложение:

GRANT CREATE SESSION TO Протокол взаимодействия с системой Oracle представлен в листинге SQL> CONNECT SQL> CREATE USER IDENTIFIED BY User SQL> CONNECT ERROR: invalid logon denied Warning: You are no longer connected to ORACLE.

SQL> CONNECT Connected.

SQL> GRANT CREATE SESSION TO Ul;

Grant succeeded.

CONNECT Connected.

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

Обычно для подтверждения подлинности пользователь дол жен ввести пароль. В Oracle поддерживается вариант вынесения процедуры аутентификации на уровень операци онной системы. В этом случае сервер определяет идентифи катор пользователя из информации сеанса его работы с опе рационной системой и на основе этой информации разрешает или запрещает пользователю подключение.

Базовое понятие доступа привилегии Привилегия (privilege) Ч это разрешение на выполнение в системе определенного действия. Не имея соответствующей привилегии, пользователь не может получить доступ к дан ным или выполнить какое-либо действие.

Сервер данных поддерживает для каждого пользо вателя привилегий. Привилегии этого набора могут из меняться: назначаться новые или отменяться старые. Множе ство базовых привилегий определено в стандарте ANSI SQL.

Помимо этого в Oracle реализованы некоторые дополнитель ные привилегии (всего поддерживается более 70 типов).

Основой системы разграничения доступа в Oracle являет ся реализация принципа минимальных привилегий. Суть дан ного состоит в том, что пользователю должно быть явно разрешено выполнение каждого действия в системе.

Все привилегии могут быть разделены на два класса: сис темные привилегии (system privelege) и привилегии доступа объектам (object privelege).

Системная привилегия Ч это привилегия, которая дает пользователю право на выполнение какой-либо операции в 272 Средства доступа в Oracle масштабе базы данных. Например, пользователь с системной привилегией ALTER может изменять любую табличную область (за исключением некоторых ограничений на табличную область SYSTEM). Пользователь с системной привилегией SELECT ANY TABLE может выполнять выбор ку из любой таблицы базы данных. Поскольку системные привилегии связаны с возможностью выполнения глобальных изменений в базе данных, их предоставление должно тща тельно планироваться.

Привилегия доступа к объекту Ч это разрешение поль зователю на выполнение определенной операции над опреде ленным объектом, например выполнение выборки из не которой таблицы. При этом пользователь может формировать любые запросы к данной таблице, но не имеет права модифи цировать данные этой таблицы или формировать какой-либо запрос к другой таблице.

Привилегия доступа к объекту базы управляют работой пользователя базы данных с конкретным объектом. Напри мер, администратор может управлять списком пользователей, которые имеют право выполнять выборку из конкретной таб лицы. Для этого он предоставляет привилегии SELECT на эту таблицу конкретным пользователям или ролям. Аналогично можно предоставить на таблицу полномочия INSERT, UPDATE, DELETE. Механизм привилегий доступа к объекту дает администратору возможность детально управлять досту пом к информации базы данных.

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

По этой причине отсутствуют системные привилегии DROP TABLE, DROP VIEW и т. п. (существуют DROP ANY ' TABLE, DROP ANY VIEW). Различие привилегиями, в названиях которых ключевое слово ANY, как правило, заключается в том, что в первом случае при наличии привилегии можно производить действия с объ ектами и в других схемах, а во втором Ч только в своей.

Этот принцип можно использовать для построения защи ты, например, создав все объекты приложения в одной схеме и отменив пользователю-владельцу привилегию CREATE SESSION (остальным пользователям и ролям предоста вив необходимые привилегии). В этом случае гарантируется отсутствие доступа ко всем данным приложения сразу (есте ственно, при ограниченном использовании системных приви легий вроде SELECT ANY TABLE и системных учетных за писей).

Предоставление системных Системные привилегии могут быть предоставлены серве ром Oracle двум объектам системы: пользователям (USER) и ролям (ROLE). Роль представляет собой поименованный на бор Назначение и языковые средства определе ния будут рассмотрены ниже.

Для предоставления системных привилегий пользовате в соответствии с требованиями стандарта используется команда GRANT. Пользователь, выдавший команду GRANT, должен обладать системной привилегией GRANT ANY PRIVILEGE. Оператор определения системных привилегий Oracle использует следующий синтаксис:

GRANT..] ТО \ пользователь }...] [WITH ADMIN OPTION] доступа в Список значений, которые может принимать параметр приведен в представленных ниже таблицах. Системные привилегии по объ ектам Oracle. Список не является исчерпывающим, список может быть взят из документа Server SQL привилегии, определяющие права по с и Для работы с таблицами и представлениями в Oracle пре дусмотрены следующие системные привилегии:

Таблица 11. Обозначение и системных при вилегий Oracle, связанных с работой с таб лицами и представлениями Системная Разрешаемые системной привилегия действия CREATE Разрешает пользователю создавать таблицу ANY TABLE в любой схеме базы данных. Для создания таблицы необходима привилегия на квоту пространства в табличной области, где соз дается таблица.

CREATE Разрешает пользователю создавать таблицу TABLE в собственной схеме базы данных. соз дания таблицы необходима привилегия на квоту пространства в табличной области, где она DROP ANY Разрешает пользователю уничтожать лю TABLE бую таблицу в любой схеме базы данных.

ALTER ANY Разрешает пользователю изменять таблицу TABLE в любой схеме базы данных.

INSERT ANY Разрешает пользователю вставку строк в TABLE любую таблицу или представление любой схемы базы данных.

UPDATE Разрешает пользователю модифицировать ANY любые строки в любой таблице или пред TABLE ставлении любой схемы базы данных.

DELETE Разрешает пользователю удалять любые ANY строки в любой таблице или представлении TABLE любой схемы базы данных.

SELECT Разрешает пользователю выполнять произ ANY вольную выборку из любой таблицы, пред TABLE ставления или снимка любой схемы базы данных.

LOCK ANY Разрешает пользователю выполнять бло TABLE кировку любой таблицы любой схемы базы данных.

BACKUP Разрешает пользователю применять утили ту Export в инкрементальном режиме для TABLE таблиц из любой схемы базы COMMENT Разрешает пользователю вносить коммен ANY тарии в словарь данных для столб TABLE ца любой таблицы в любой схеме базы дан Рассмотрим пример. пользователю U1 предостав лена системная привилегия CREATE TABLE. Команда со здания таблицы проходит Попытка создать таблицу в схеме пользователя U2 отвергается системой.

После предоставления привилегий CREATE ANY TABLE предыдущая операция выполняется успешно.

Протокол взаимодействия с системой Oracle, иллюстри рующий пример, приведен в листинге CONNECT Средства доступа в Oracle CREATE TABLE Table created.

CREATE TABLE CREATE TABLE * ERROR at line 1: insufficient privi SQL> CONNECT SQL> GRANT CREATE ANY TABLE TO Grant succeeded.

SQL> CONNECT CREATE TABLE Table created.

Листинг Пример использования привилегий на создание таблицы Отметим парадоксальный, на первый взгляд, факт, со стоящий в том, что пользователь U1, создавший таблицу в схеме U2, не имеет никаких прав на операции с данной лицей. Пользователь U2 может выполнять выборку из табли цы Tabl, а пользователь U1 Ч нет. Разрешение на выполне ние конкретной операции должно быть предоставлено явно.

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

SQL> CONNECT Connected.

SELECT * FROM SELECT * FROM * ERROR at line 1: insufficient privi leges SQL> CONNECT Connected.

SQL> SELECT * FROM Tabl;

no rows selected SQL> CONNECT SQL> GRANT SELECT ANY TABLE TO Grant succeeded.

SQL> SELECT * FROM no rows selected 153. Пример использования привилегий для таблицы, созданной в схеме другого пользо вателя Дополнительно только для представлений в Oracle преду смотрены следующие системные привилегии:

Таблица 12. Обозначение и сущность дополнительных системных привилегий Oracle, связанных исключительно с работой с представлениями Системная Разрешаемые системной привилегия привилегией действия CREATE Разрешает пользователю создавать пред ANY VIEW ставление в любой схеме данных.

CREATE Разрешает пользователю создавать пред VIEW ставление в собственной схеме базы дан ных.

DROP ANY Разрешает пользователю уничтожать любое VIEW представление в любой схеме базы данных.

Средства разграничения доступа в Системные определяющие права по работе с процедурами и Для работы с процедурами в Oracle предусмотрены сле дующие системные привилегии:

Таблица 13. Обозначение и сущность системных при вилегий Oracle, связанных с работой с про цедурами Системная Разрешаемые системной привилегия привилегией действия CREATE ANY Разрешает пользователю создавать PROCEDURE процедуру, функцию или пакет в любой схеме базы данных.

DROP ANY Разрешает пользователю хра PROCEDURE нимую процедуру, функцию или в любой схеме базы данных.

EXECUTE Разрешает пользователю выполнять лю ANY бую хранимую процедуру или функцию, PROCEDURE как входящую в состав пакета, так и оди ночную, и ссылаться на любой элемент спецификации пакета из любой схемы ба зы данных.

ALTER ANY Разрешает пользователю изменять любую хранимую процедуру, функцию или пакет из любой схемы базы данных.

Рассмотрим пример. Пусть пользователь U1 создал про цедуру InsRec, выполняющую вставку записи в таблицу и представленную в листинге 154. Попытка выполнить эту процедуру пользователем U2 отвергается системой. После предоставления администратором привилегии EXECUTE ANY PROCEDURE пользователю U2 запуск процедуры про ходит успешно. Обратите внимание на то, что явная вставка (не через процедуру) строк в таблицу пользователю U не разрешена.

CONNECT BEGIN 4 / BEGIN * ERROR at line 1:

line 1, column 7:

identifier must be de clared ' ORA-06550: line 1, column PL/SQL: Statement ignored SQL> CONNECT GRANT EXECUTE ANY PROCEDURE TO Grant succeeded.

SQL> CONNECT BEGIN 3 END;

4 / PL/SQL procedure successfully completed.

INSERT INTO Ul.Tabl INSERT INTO Ul.Tabl * ERROR at line ORA-00942: table or view does not exist Средства в Oracle SQL> CONNECT Connected.

SQL> SELECT * FROM. AT 5.5 05-04- Листинг 154. Пример, иллюстрирующий предоставле ние системных привилегий по выполнению про цедур Симметричные системные привилегии предусмотрены для работы с триггерами базы данных.

Таблица Обозначение и сущность системных при вилегий Oracle, связанных с работой с триг герами баз данных Системная Разрешаемые системной привилегия привилегией действия CREATE ANY Разрешает пользователю создавать триг TRIGGER гер базы данных в любой схеме базы дан ных, с таблицей любой схемы.

CREATE Разрешает пользователю создавать триг TRIGGER гер базы данных в собственной схеме ба зы данных.

DROP ANY Разрешает пользователю уничтожать про TRIGGER извольный триггер в любой схеме базы данных.

ALTER ANY Разрешает пользователю изменять любой TRIGGER триггер из любой схемы базы данных.

определяющие права по с Для работы с пользователями в Oracle предусмотрены следующие системные привилегии:

Таблица 15. Обозначение и сущность системных при вилегий Oracle, определяющих права по рабо те с пользователями Системная Разрешаемые системной привилегия привилегией действия CREATE USER Разрешает создавать нового пользователя.

Данная привилегия позволяет определять квоту в табличном пространстве, опреде лять табличное пространство по умолча нию и временное табличное пространство, а также определять профиль пользовате ля.

DROP USER Разрешает пользователю уничтожать лю бых пользователей базы данных.

ALTER USER Разрешает пользователю изменять харак теристики пользователя, в частности, из менять пароль или метод аутентификации, переопределять любую квоту в табличном пространстве, переопределять табличное пространство по умолчанию и временное табличное пространство, а также переоп ределять профиль пользователя.

BECOME Разрешает пользователю регистрировать USER ся в системе как пользователь.

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

CONNECT.

Connected.

SQL> GRANT CREATE USER TO Grant succeeded.

CONNECT CREATE USER U2 IDENTIFIED BY User created.

SQL> GRANT CREATE SESSION TO GRANT CREATE SESSION TO U * ERROR at line insufficient privileges 155. Пример, иллюстрирующий предоставле ние по созданию поль зователя определяющие права по работе с областями Особенность привилегии MANAGE со в ее ориентации на управление состоянием табличной области. Спецификой табличной области является возмож ность ее перевода в автономное или оперативное состояние.

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

Для работы с табличными областями в Oracle предусмот рены следующие системные привилегии.

Таблица 16. Обозначение и сущность системных при вилегий Oracle, связанных с работой с таб личными областями Разрешаемые системной привилегией действия CREATE Разрешает пользователю создавать таб TABLESPACE личную область.

DROP Разрешает пользователю уничтожать TABLESPACE любую табличную область, кроме таб личной области SYSTEM.

ALTER Разрешает пользователю изменять лю TABLESPACE бую табличную область.

MANAGE Разрешает пользователю переводить таб TABLESPACE личные области в оперативное (online) и автономное (offline) состояние и вы полнять резервное копирование таблич ной области.

UNLIMITED Разрешает пользователю задействовать TABLESPACE произвольную часть табличного про странства. Данная привилегия перекры вает любые ограничения на допустимые квоты пространства табличной области.

Привилегия не применима к ролям.

CONNECT SQL> GRANT MANAGE TABLESPACE TO Grant succeeded.

CONNECT Средства в Oracle SQL> ALTER TABLESPACE APP_DATA OFFLINE NORMAL;

Tablespace altered.

ALTER TABLESPACE APP_DATA 2 ADD DATAFILE '.

ALTER TABLESPACE ADD DATAFILE * ERROR at line 1:

insufficient privileges SQL> ALTER TABLESPACE ONLINE;

Tablespace altered.

Листинг 156. Пример, иллюстрирующий предоставле ние системных привилегий по управлению личной областью определяющие права по с работы с последовательностями в Oracle предусмот рены следующие системные привилегии.

Таблица Обозначение и сущность системных при Oracle, связанных с работой с по следовательностями Системная Разрешаемые системной привилегия привилегией действия CREATE ANY Разрешает пользователю создавать произ SEQUENCE вольную последовательность в любой схеме.

CREATE Разрешает пользователю создавать после SEQUENCE довательность в собственной схеме базы данных.

DROP ANY Разрешает пользователю уничтожать SEQUENCE извольную последовательность в любой схеме.

- ' ALTER ANY Разрешает пользователю изменять пара SEQUENCE метры произвольной последовательности в любой схеме.

SELECT ANY Разрешает пользователю вычислять зна SEQUENCE последовательности из любой схе мы базы данных.

определяющие права по с синонимами Для работы синонимами в Oracle предусмотрены сле дующие системные привилегии:

Таблица Обозначение сущность системных при вилегий Oracle, связанных с работой с сино нимами Системная Разрешаемые привилегия привилегией действия CREATE ANY Разрешает пользователю создавать си SYNONYM ноним в любой схеме базы данных.

CREATE Разрешает пользователю создавать об PUBLIC щие синонимы базы данных.

SYNONYM CREATE Разрешает пользователю создавать си SYNONYM ноним в собственной схеме базы дан ных.

DROP ANY Разрешает пользователю уничтожать SYNONYM синоним базы данных.

DROP PUBLIC Разрешает пользователю уничтожать SYNONYM общие синонимы базы данных.

Реализация синонимов в Oracle корректно поддерживает механизм разграничения доступа. Пользователь, имеющий Средства доступа в Oracle право создания синонима, не может выполнить действие с объектом, скрытым за этим синонимом, если явно ему не пре доставлены соответствующие привилегии. Пользователь U1, создав общий синоним таблицы из схемы U2, делает попытку выполнять выборку из таблицы скрытой под общим синонимом Tabx. Система отвергает попытку, отмечая недостаток привилегий у пользователя Листинг со держит протокол для данного примера:

Connect Connected.

GRANT CREATE PUBLIC SYNONYM TO Grant succeeded.

SQL> CONNECT Connected.

SQL> SELECT * FROM SELECT * FROM * ERROR in line 1:

insufficient privileges SYNONYM Tabx FOR Synonym created.

SELECT * FROM Tabx;

SELECT * FROM * ERROR in line ORA-01031: insufficient privileges Протокол примера использования сино нима для выборки из таблицы Системные определяющие права по выполнению глобальных действий в Для управления глобальными операциями в системе в Oracle предусмотрены следующие системные привилегии:

Таблица 19. Обозначение и сущность системных при вилегий Oracle, связанных с управлением глобальными операциями Системная Разрешаемые системной привилегия привилегией действия GRANT ANY Предоставляет пользователю все системные PRIVILEGE привилегии. Использование такой команды (как и ее наличие) представляется неоправ данным в системе с серьезными требова ниями по безопасности данных.

CREATE Разрешает пользователю создавать сессию.

SESSION Минимальная привилегия для выполнения какой-либо работы с базой данных.

AUDIT ANY Разрешает пользователю проведение аудита любого объекта в любой схеме.

AUDIT Разрешает пользователю выполнение ко SYSTEM манды AUDIT для проведения аудита сис темных событий.

Системные права по выполнению действий с остальными данных Для управления действиями с остальными объектами ба зы данных в системе в Oracle предусмотрены следующие сис темные привилегии:

Средства доступа в Oracle Таблица 20. Обозначение и сущность системных при вилегий Oracle, связанных- с управлением действиями с остальными объектами базы дан ных Системная Разрешаемые системной привилегия привилегией действия CREATE Разрешает пользователю создавать кла ANY CLUSTER стеры в любой схеме базы данных.

CREATE Разрешает пользователю создавать кла CLUSTER стеры в своей схеме базы данных.

ALTER Разрешает пользователю изменять кла ANY CLUSTER стеры в схеме базы данных.

DROP Разрешает пользователю уничтожать CLUSTER кластеры в любой схеме базы данных.

CREATE INDEX Разрешает пользователю создавать ин дексы в собственной схеме базы данных.

CREATE Разрешает пользователю создавать ин ANY INDEX дексы в любой схеме базы данных.

ALTER Разрешает пользователю изменять лю ANY INDEX бой индекс в любой схеме базы DROP Разрешает пользователю уничтожать ANY INDEX индексы в любой схеме базы данных.

CREATE Разрешает пользователю создавать биб LIBRARY лиотеки внешних процедур в собствен ной схеме базы данных.

CREATE Разрешает пользователю создавать биб ANY LIBRARY лиотеки внешних процедур в любой схеме базы данных.

DROP Разрешает пользователю уничтожать ANY библиотеки внешних процедур в любой схеме базы данных.

CREATE Разрешает пользователю создавать ANY снимки в любой схеме базы данных.

10. № 1628.

CREATE Разрешает пользователю создавать SNAPSHOT снимки в схеме.

ALTER Разрешает пользователю изменять сним ANY ки в любой схеме базы данных.

SNAPSHOT DROP Разрешает пользователю уничтожать ANY снимки в любой схеме базы данных.

SNAPSHOT CREATE Разрешает пользователю создавать объ ANY TYPE ектные типы в любой схеме.

CREATE TYPE Разрешает пользователю объ ектные типы в собственной схеме.

ALTER Разрешает пользователю изменять объ ANY TYPE ектные типы в любой схеме.

DROP ANY Разрешает пользователю уничтожать TYPE объектные типы в любой схеме.

EXECUTE Разрешает пользователю ссылаться на ANY TYPE любой объектный тип и его методы.

CREATE Разрешает пользователю создавать про PROFILE фили.

ALTER Разрешает пользователю изменять про PROFILE фили.

DROP PROFILE Разрешает уничтожать профили.

CREATE Разрешает пользователю создавать сег ROLLBACK менты SEGMENT Разрешает пользователю _ изменять сег ROLLBACK менты отката.

SEGMENT DROP Разрешает пользователю уничтожать ROLLBACK сегменты отката.

SEGMENT CREATE ANY Разрешает пользователю ката DIRECTORY логи в собственной Средства доступа в Oracle DROP ANY Разрешает пользователю создавать ката DIRECTORY логи в любой схеме.

CREATE Разрешает пользователю создавать DATABASE с удаленными базами данных.

LINK CREATE Разрешает пользователю создавать об PUBLIC щедоступные связи с удаленными база DATABASE ми данных.

LINK DROP PUBLIC Разрешает пользователю уничтожать DATABASE общедоступные связи с удаленными ба LINK зами данных.

ALTER Разрешает пользователю изменять стои RESOURCE мость использования ресурсов системы.

COST пользователю изменять со DATABASE стояние базы данных с помощью опера тора ALTER DATABASE.

ALTER Разрешает пользователю изменять со SESSION стояние сессии с оператора ALTER SESSION.

ALTER SYSTEM Разрешает пользователю изменять со стояние системы с помощью оператора ALTER SYSTEM.

ANALYZE ANY Разрешает пользователю производить сбор статистики для таблиц, кластеров и индексов в любой схеме.

FORCE ANY Разрешает пользователю производить TRANSACTION принудительную фиксацию или откат любой распределенной транзакции.

FORCE Разрешает пользователю производить TRANSACTION принудительную фиксацию или откат сомнительной распределенной транзак ции.

10* PUBLIC и WITH ADMIN OPTION Конструкция PUBLIC используется для предоставления конкретной системной привилегии всем пользователям сис темы. Заметим, что передача системных привилегий всем пользователям в системе с серьезными требованиями за щите информации обычно не используется.

Рассмотрим пример, в котором пользователь U1, создав последовательность предоставляет привилегию выпол нения операции выборки всем пользователям системы. Обра тите внимание, что привилегия автоматически предоставляет ся пользователю U3, который создается позже, чем определе на привилегия по доступу к последовательности Листинг содержит протокол для данного примера, иллюстрирующего особенности предоставления глобальных привилегий объектам Oracle:

CONNECT Connected.

SQL> CREATE SEQUENCE Seql;

Sequence created.

SQL> GRANT SELECT ON Seql PUBLIC;

Grant succeeded.

SQL> CONNECT Connected.

SQL> SELECT FROM NEXTVAL CONNECT Средства доступа в CREATE USER U3 IDENTIFIED BY User created.

CONNECT TO Grant succeeded.

CONNECT FROM DUAL;

Листинг 158. Протокол примера предоставления гло бальной привилегии по выборке последова Для передачи некоторой системной привилегии с правом наследования используется параметр WITH ADMIN OPTION.

Если системная привилегия передана с этим параметром, по лучивший ее пользователь имеет право передавать данную привилегию другим пользователям.

Рассмотрим пример. Пусть предостав лена системная привилегия SELECT ANY TABLE WITH ADMIN OPTION. Пользователь может передать соответ ствующую привилегию пользователю U2. Попытка пользова теля U2 выполнить выборку из таблицы в схеме пользо вателя U1 отвергается системой. После предоставления при вилегий SELECT ANY TABLE предыдущая операция выпол няется Отметим тот факт, что при попытке выпол нить выборку данных из таблицы доступ к которой пользователю U2 не предоставлен, система выдает сообщение об отсутствии таблицы с данным именем, а не о недостатке привилегий. Такой подход обеспечивает защиту от выявления имен таблиц, содержащих важную информацию, путем уга дывания за счет многократного апробирования вариантов.

Протокол взаимодействия с Oracle, иллюстрирующий пример, приведен в листинге CONNECT SQL> GRANT SELECT ANY TABLE TO 2 WITH ADMIN Grant succeeded.

SQL> CONNECT Connected.

SELECT * FROM Ul.Tabl;

SELECT * FROM * ERROR in line 1:

ORA-00942: table or view does not exist.

SQLX INSERT INTO VALUES (123);

1 row created.

GRANT SELECT ANY TABLE TO Grant succeeded.

SQL> CONNECT SELECT * FROM Листинг 159. Протокол примера при вилегий с параметром WITH ADMIN OPTION в Oracle Предоставление привилегий доступа к объекту Привилегии доступа к объекту могут быть предоставлены сервером Oracle двум объектам системы: пользователям (USER) и ролям (ROLE). Роль представляет собой поимено ванный набор привилегий. Назначение и языковые средства определения ролей будут рассмотрены ниже.

Для предоставления привилегий пользователю в Oracle, в соответствии с требованиями стандарта, используется коман да GRANT. Пользователь, выдавший команду GRANT, либо должен быть владельцем объекта (то есть пользователем, в схеме которого создан данный объект), либо наследовать со ответствующую привилегию, то есть привилегия была пере дана ему с параметром WITH GRANT либо обла дать привилегией GRANT ANY PRIVILEGE.

Операторы определения привилегий доступа к объектам управляют разграничением доступа к объектам Oracle: табли цам, представлениям, последовательностям, процедурам, функциям и пакетам, снимкам и синонимам. Оператор опре деления привилегий доступа к объектам Oracle использует следующий синтаксис:

ALL [ ] [ ON ТО \ [WITH GRANT OPTION] Список значений, которые может принимать параметр состоит из ключевых слов, значение которых пояснено в приведенной таблице.

Таблица 21. Обозначение сущность доступа к объекту Привилегия Разрешаемые привилегией действия SELECT Пользователь с этой привилегией может выполнять выборку данных из соответствующего объекта.

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

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

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

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

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

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

доступа в Oracle Следующий пример иллюстрирует возможность предос тавления набора привилегий одной командой. Владелец таб лицы, пользователь U2, предоставляет пользователю U1 при вилегии по выборке, вставке и модификации для таблицы Пусть таблица создана предложением:

TABLE ТаЫ Выполнение операций, привилегии на выполнение кото рых проходит успешно, а попытка пользова теля выполнить удаление строк отвергается системой.

Листинг содержит протокол для данного примера.

SQL> CONNECT Connected.

GRANT SELECT, INSERT, UPDATE ON TO Grant succeeded.

SQL> CONNECT SQL> INSERT INTO VALUES (123);

1 row created.

s SQL> SELECT * FROM SQL> UPDATE SET Atl 345;

1 row updated.

SQL> SELECT * FROM 4, SQL> DELETE FROM DELETE FROM ERROR at line 1:

insufficient privileges Листинг 160. Протокол примера предоставления не скольких привилегий доступа к объекту Oracle одной командой Рассмотрим пример, иллюстрирующий возможность из бирательного, по столбцам, предоставления набора привиле гий для команд вставки и модификации данных в таблице Владелец таблицы, пользователь U2, предоставляет поль зователю привилегии по вставке и модификации столбца таблицы ТаЫ. Выполнение перечисленных операций проходит успешно, а попытка пользователя U1 выполнить модификацию столбца таблицы ТаЫ отвергается систе мой. Обратите внимание, что перечень столбцов относится к каждой операции, то есть отсутствие перечня после операции INSERT указывает на возможность вставки всех столбцов таблицы ТаЫ. Протокол выполнения примера представлен в листинге SQL> CONNECT SQL> TABLE NUMBER, At Table created.

SQL> GRANT SELECT ON Tabl TO Ul;

Grant succeeded.

SQL> GRANT UPDATE (Atl) ON Tabl TO Ul;

Grant succeeded.

SQL> CONNECT Средства доступа в Oracle INSERT INTO VALUES 1 row SQL> UPDATE U2.Tabl SET 1 row updated.

SQL> SELECT * FROM AT 345 SQL> UPDATE U2.Tabl SET At2 = UPDATE U2.Tabl SET At2 * ERROR at line insufficient privileges Листинг 161. Протокол примера избирательного, по столбцам, предоставления привилегий для операций вставки и модификации объекта Oracle Ключевое слово REFERENCES указывает на предостав ление привилегий на использование столбцов из списка (или всех столбцов при пустом списке) в качестве родительских ключей по отношению к любым внешним ключам в таблицах, которые конкретный пользователь имеет право создавать.

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

Раздел Применимость значения параметра к объектам Oracle представлена в приведенной ниже таблице.

Таблица Таблица применимости привилегий к объектам базы данных Oracle Объект Oracle Применимые к объекту привилегии SELECT, INSERT, UPDATE, Таблица DELETE, ALTER, INDEX, REFERENCES SELECT, INSERT, UPDATE, DELETE Представление SELECT, ALTER Последовательность Процедуры, функ- EXECUTE ции, пакеты SELECT, INSERT, UPDATE, DELETE Снимки READ Директории EXECUTE Библиотеки Управление привилегиями с помощью ролей Большое число пользователей, статус которых требует различных привилегий для доступа к ресурсам базы данных, создает значительный объем рутинной работы администрато ру. Oracle предлагает языковое средство для автоматизации работы администратора по доступа. Данное средство поддерживается как объект базы данных, называе мый ролью (ROLE). Роль Ч это поименованный набор при вилегий, который может быть предоставлен пользователю или другой роли. Роль не является объектом какой-либо схе мы.

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

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

определяющие по с ролями Для работы с ролями в Oracle предусмотрены следующие системные привилегии.

Таблица Обозначение и системных при вилегий Oracle, определяющие права по рабо те с ролями Системная Разрешаемые системной привилегия привилегией действия CREATE Разрешает пользователю создавать роли в ROLE базе данных.

GRANT ANY Разрешает пользователю предоставлять ROLE произвольную роль произвольному пользо вателю в базе данных.

DROP ANY Разрешает пользователю уничтожать про ROLE извольную роль в базе данных.

ALTER ANY Разрешает пользователю изменять произ ROLE вольную роль в базе данных.

Изменим пример, приведенный в листинге 155 так, чтобы предоставление привилегий пользователю U2 было Раздел но успешно. Администратор дополнительно к привилегии создания пользователей предоставляет пользователю при вилегию GRANT ANY ROLE. Теперь пользователь U1 может предоставить пользователю U2 роль CONNECT, предусмат ривающую, в частности, привилегию на образование сессий.

CONNECT Connected.

GRANT GRANT ANY ROLE TO Grant succeeded.

SQL> CONNECT Connected.

SQL> CREATE USER U2 IDENTIFIED BY User created.

SQL> GRANT CONNECT TO Grant succeeded.

SQL> CONNECT Connected.

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

Предоставление пользователю привилегии GRANT ANY ROLE в системе с повышенными требованиями защищен ности вряд ли целесообразно.

Предопределенные роли в Oracle Несколько ролей автоматически определяются Oracle при создании базы данных. Сценарий определения ролей CONNECT, RESOURCE и DBA определен в файле sql.bsq. В доступа в Oracle данном сценарии определяются привилегии данных ролей, и роль DBA с параметром WITH ADMIN OPTION предоставля ется пользователям SYS и SYSTEM. Квалифицированный разработчик, создавая систему с повышенными требованиями по безопасности данных, может изменить сценарий создания базы данных, определив иные привилегии и иные роли для сценария создания базы данных.

Роли и созданы для упрощения логической разгрузки и загрузки баз данных с использованием утилит Export и Import. Данные ро ли создаются во время исполнения файла сценария catexp.sql.

Системные привилегии, предоставляемые перечислен ным выше ролям, перечисленные в таблице.

Имена и системные привилегии предопределенных ролей Oracle Разрешенные роли системные CONNECT ALTER SESSION CREATE CLASTER CREATE DATABASE LINK CREATE SEQUENCE CREATE SESSION CREATE SYNONYM CREATE TABLE CREATE VIEW RESOURCE CREATE CLASTER CREATE PROCEDURE CREATE SEQUENCE CREATE TABLE CREATE TRIGGER DBA Все системные привилегии с WITH ADMIN OPTION EXP_FULL_DATABASE IMP FULL DATABASE EXP_FULL_DATABASE SELECT ANY TABLE BACKUP ANY TABLE системных таблиц sys.lncexp IMP FULL DATABASE BECOME USER ролей и им привилегий.

роли может быть выполнено пользователем, имеющим системную привилегию CREATE ROLE. Для того чтобы пользователю некоторую роль, необхо димо создать эту роль и разрешить ее в текущем сеансе. Об ратите внимание на аналогию с нужно создать и предоставить ему минимальные привилегии. Ко манда создания роли в Oracle использует следующий синтак сис:

CREATE ROLE \ EXTERNALLY Параметр NOT IDENTIFIED указывает на то, что при ис пользовании роли аутентификация при помощи пароля не производится. Параметр IDENTIFIED BY указы вает на то, что при использовании роли производится аутен тификация при помощи пароля, а значение параметра IDENTIFIED EXTERNALLY указывает на то, что при исполь зовании роли аутентификация производится средствами опе рационной системы. По умолчанию аутентификация при ус тановке разрешения на использование роли не производится.

Рассмотрим пример создания роли Sat, предос тавлена системная привилегия осуществления выборки из любой таблицы, и роли SUDat, которой предоставлены сис Средства в Oracle темные привилегии выполнения выборки, модификации и удаления строк из любой таблицы. роли SUDat преду смотрена защита паролем Протокол создания роли и предоставления ей системных привилегий приведен в лис тинге SQL> CONNECT Connected.

SQL> CREATE ROLE Role created.

SQL> ROLE SUDat IDENTIFIED BY Role created.

SQL> GRANT SELECT ANY TABLE TO Sat;

Grant succeeded.

GRANT SELECT ANY TABLE, UPDATE ANY TABLE, 2 DELETE ANY TABLE TO SUDat;

Grant succeeded.

SQL> GRANT TO Ul;

succeeded.

- Х ч Х GRANT SUDat TO Ul;

Grant succeeded.

Листинг 163. Протокол создания роли и предостав ления ей системных привилегий Управление допустимостью ролей Управление разрешением или запрещением ролей для те кущей сессии выполняется командой SET ROLE. До тех пор пока явно не будет разрешено использование роли для сессии, привилегии, определенные для пользователя ролью, не пре доставляются. команда SET ROLE подобно опера Раздел торным скобкам устанавливает корректный полномо чий пользователя для проведения логически единого с точки зрения разграничения доступа действия. Команда разрешения или запрещения использования ролей Oracle использует сле дующий синтаксис:

SET ROLE [IDENTIFIED BY [IDENTIFIED BY [EXCEPT роль роль ]...] }| Параметр ALL с необязательным параметром EXCEPT для разрешения всех ролей, кроме ролей, пере численных после параметра EXCEPT. В списке ролей, пере численных после параметра EXCEPT, могут присутствовать только роли, явно назначенные пользователю, то есть недо пустимо использование параметра для исключения из списка ролей, назначение которых выполняется через другие роли.

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

Использование параметра NONE предназначено для за прещения всех ролей.

Для протокол создания которых приведен в лис тинге 163, рассмотрим механизмы разрешения их использо вания. Пусть в системе определены Sat и SUDat. Перво начально все роли запрещены, и пользователь U1 не имеет права выполнить выборку из таблицы схемы U2. После разрешения ему роли Sat выборка проходит успешно, но опе рация по модификации данных отвергается. После предос тавления роли SUDat, защищенной паролем, операция моди фикации таблицы из схемы U2 также выполняется. Про токол разрешения ролей пользователю и предоставления ему системных привилегий приведен в листинге 164.

Средства в Oracle SQL> CONNECT Connected.

SQL> SET ROLE NONE;

Role set.

SQL> SELECT * FROM FROM * ERROR at line ORA-00942: table or view does not exist SET ROLE Role set.

SELECT * FROM SQL> UPDATE SET = UPDATE SET Atl = * ERROR line insufficient privileges SQL> SET ROLE SUDat IDENTIFIED BY Role set.

UPDATE SET Atl = 1 row updated.

164. Пример управления разрешением и за прещением использования роли В том случае, если среда выполнения программы не под держивает инструкцию SET ROLE, можно использовать стандартный пакет DBMS_SESSION. Входящая в него дура SET_ROLE позволяет обращаться к инструкции SET Х ROLE через процедурный интерфейс. Пример использования представлен в листинге BEGIN 3 END;

4 / PL/SQL procedure successfully completed.

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

В Oracle для отмены системных привилегий привилегий доступа к объекту используются различные синтаксические конструкции.

привилегий и ролей Для отмены системных привилегий и ролей в Oracle используется команда:

\ \ FROM Использование ключевого слова приводит к от мене системной привилегии или роли для всех пользователей.

разграничения в Oracle Обратите внимание, что при отмене системной привилегии или роли с параметром PUBLIC привилегии, предостав ленные пользователю явно или через роль, не отменяются.

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

Отмена доступа к Для отмены привилегий доступа к объекту в Oracle ис пользуется команда:

REVOKE \ ]'}[/: {привиле ON [CASCADE CONSTRAINTS] Параметр может прини мать значения: SELECT, INSERT, UPDATE, DELETE, REF ERENCES, ALTER, EXECUTE, INDEX. Применимость пара к конкретным объ ектам Oracle представлена в таблице 22. Если необязательный параметр схема не указан, то предполагается, что объект при надлежит схеме пользователя, выполняющего команду.

Использование ключевого слова PUBLIC приводит к от мене привилегии доступа к объекту для всех пользователей.

Обратите внимание, что при отмене системной привилегии или роли с параметром PUBLIC привилегии, предостав ленные пользователю явно или через роль, не отменяются.

Конструкция CASCADE CONSTRAINTS отменяет ссы лочные ограничения целостности, предоставленные помо щью ключевого слова REFERENCES.

Отмена привилегий для пользователя или роли наступает немедленно.

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

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

Использование для Широко используемым, простым и эффективным спосо бом разграничения доступа является использование представ лений (view). Представление Ч это динамически поддержи ваемая сервером выборка из одной или нескольких таблиц.

Оператор SELECT, определяющий выборку, ограничивает видимые пользователем данные. Кроме того, представление позволяет эффективно ограничить данные, которые поль зователь может модифицировать. Сервер гарантирует акту альность представления, то есть формирование представле ния (подстановка соответствующего запроса) производится каждый раз при обращении к нему. Используя представления, администратор безопасности ограничивает доступную поль зователю часть базы данных только теми данными, которые реально необходимы для выполнения его работы.

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

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

Если пользователь обладает любой комбинацией привилегий INSERT, UPDATE, DELETE для базовых таблиц, они также будут автоматически наследоваться представлением. В то же время пользователь, не имеющий привилегий на модифика цию строк базовых таблиц, не может получить соответст вующие привилегии в представлении. Так как внешние клю чи не используются в представлениях, наличие/отсутствие привилегии REFERENCES для базовых таблиц никогда не создает ограничений при создании представлений.

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

Рассмотрим пример. Пусть базовая таблица создана и за полнена с использованием следующих предложений:

CREATE TABLE INSERT INTO TAB INSERT INTO TAB INSERT INTO TAB INSERT INTO Пользователь создает представление в котором для таблицы вычисляется сумма в столбцах сгруп по значениям столбца At2. Пользователю U доставляется право выборки из представления, но не из базо вой таблицы. Протокол иллюстрирующего примера приведен в листинге 166.

SQL> CREATE OR REPLACE VIEW (VAT1) AS 2 SELECT 3 FROM GROUP BY View created.

GRANT SELECT ON TO Grant succeeded.

SQL> CONNECT Connected.

SELECT * FROM SQL> * FROM Ul.Tabl;

SELECT FROM Ul.Tabl * ERROR at line ORA-00942: table or view does not exist / Листинг 166. Протокол создания представления для доступа к агрегированным данным Хранимые процедуры как Хранимые процедуры и функции Oracle дают еще один мощный и гибкий способ ограничить множество действий, которые пользователь может производить с базой данных.

разграничения доступа в Хранимая процедура или функция Ч это множество объ единенных общим замыслом предложений языка PL/SQL, которые хранятся на сервере в откомпилированной форме и исполняются по запросу клиентского предложения. Процеду ры или функции создаются для выполнения некоторой кон кретной работы пользователем. При этом пользователю дос предоставить привилегию на исполнение процедуры, созданной для поддержки его деятельности. Важным фактом является что пользователю не требуется предоставления прав доступа к данным, обрабатываемым данной Наличие такого механизма позволяет исключить обработку данных пользователем, не предусмотренную разработчиком системы или администратором безопасности.

Рассмотрим конкретный пример. Пользователь U1 созда ет процедуру выборки данных из таблицы и предостав ляет право на ее исполнение пользователю Пользователь U2, выполняя процедуру, может получить результат выборки из но попытка явного выполнения выборки отверга ется системой. Ясно, что в процедуре при определении кур сора могло быть задано любое ограничение, характеризую щее данные, необходимые для работы приложения. В листин ге 167 приведен протокол исполнения предложенного приме CONNECT Connected.

SQL> CREATE OR REPLACE PROCEDURE getdata AS 2 CURSOR cursel IS 3 SELECT * FROM 4 currec 5 BEGIN 6 FOR currec IN cursel LOOP 1 Г 8 END LOOP;

9 END getdata;

10 / Procedure created.

-GRANT EXECUTE ON getdata TO Grant succeeded.

SQL>.

SQL> SELECT * FROM SELECT * FROM Ul.Tab ERROR at line insufficient SQL> BEGIN 4 / 1 3 PL/SQL procedure successfully completed.

167. Протокол примера разграничения дос тупа средствами хранимой процедуры триггеров для повышения защиты Триггер Ч это совокупность предложений языка PL/SQL, автоматически запускаемая при регистрации сервером опре деленных событий в системе. Триггеры выполняются систе мой автоматически до или после возникновения предопреде ленных событий, таких, как выполнения операций INSERT, UPDATE, DELETE в некоторой таблице. Способы использо вание триггеров для повышения защищенности системы по добны использованию хранимых процедур.

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

Рассмотрим пример применения триггеров для выполне ния функций разграничения доступа и фискальных действий.

Пусть пользователь SYSTEM является владельцем таблицы с одним столбцом Ail, в который предполагается запись данных уполномоченными пользователями. Список уполно моченных пользователей размещается в таблице AuthTab.

Процесс ввода данных в таблицу контролируется триг гером который автоматически выполняется до выполнения операции вставки строк в таблицу (конст рукция BEFORE INSERT). Наличие полномочий у пользова теля на выполнение операции вставки проверяется вызовом функции FuncAuth. Для регистрации действий уполномочен ных пользователей создана таблица TabAud. В данном при мере в таблице TabAud регистрируется вводимое в таблицу значение атрибута и дата вставки записи. Регистрация действий осуществляется после выполнения вставки строки в таблицу В листинге 168 представлены протоколы соз дания таблиц AuthTab и TabAud, функции FuncAuth, выпол няющей проверку полномочий и синонима для таблицы TabAud:

CONNECT Connected.

SQL> CREATE TABLE AuthTab Table created.

SQL> INSERT INTO AuthTab VALUES 1 created.

SQL> INSERT INTO AuthTab VALUES 1 row created.

SQL> CREATE OR REPLACE FUNCTION FuncAuth 2 RETURN NUMBER.3 AS 4 NUMBER;

BEGIN 6 SELECT INTO varl FROM AUTHTAB 7 WHERE IN 8 RETURN Function created.

SQL> CREATE PUBLIC FUNCAUTH 2 FOR Synonym created.

SQL> GRANT EXECUTE TO PUBLIC;

Grant succeeded.

SQL> CREATE TABLE TabAud (Atl NUMBER, Table created.

SQL> CREATE PUBLIC TabAud 2 FOR Synonym created.

SQL> GRANT INSERT ON TabAud TO Grant succeeded.

Листинг 168. Протокол создания таблиц, функции и синонима примера Протоколы создания триггеров представлены в листинге 169. Триггер автоматически запускается до вы полнения операции вставки строк в таблицу а триггер TRIG после.

CREATE OR REPLACE TRIGGER TRIG_BFR 2 BEFORE INSERT ON Средства доступа в Oracle 3 FOR EACH ROW 4 BEGIN 5 IF 6 THEN нная 8 END IF;

9 END;

10 / created.

SQL> CREATE OR REPLACE TRIGGER TRIG_AFT 2 AFTER INSERT OR UPDATE ON 3 FOR EACH ROW 4 BEGIN 5 INSERT INTO TabAud 6 END;

7 / Trigger created.

169. Протокол создания триггеров примера Протокол создания пользователей U1 и U2 приведен в листинге 170. Пользователь U1 уполномочен выполнять вставку строк в таблицу Tabl (см. строки таблицы AuthTab в листинге 168), а пользователь U2 Ч нет. С позиций системы пользователи наделяются одинаковыми привилегиями.

CREATE USER IDENTIFIED BY User created.

SQL> CONNECT TO Ul;

Grant succeeded.

SQL> GRANT INSERT ANY TABLE TO Grant succeeded.

CREATE USER U2 IDENTIFIED BY User created.

GRANT CONNECT TO Grant succeeded.

SQL> GRANT INSERT ANY TABLE TO Grant succeeded.

Листинг 170. Протокол создания пользователей при мера В листинге приведен протокол демонстрации работы модельной системы разграничения доступа, построенной е использованием Для пользователя операция вставки строк выполняется успешно. Для пользователя U2 Ч автоматически запускается триггер, который генерирует ис ключительную ситуацию по нарушению условий авторизации доступа.

SQL> CONNECT Connected SQL> INSERT INTO 1 row created.

SQL> CONNECT SQL> INSERT INTO INSERT INTO * ERROR at line Неавторизованная операция at line ORA-04088: error during execution of trigger SQL> CONNECT доступа в Oracle SQL> * FROM SQL> SELECT * FROM AT 111 10-04- 171. Пример, демонстрирующий использова ние триггеров для - разграничения доступа пользователей к данным системы Средства Полноценная система обеспечения безопасности должна обладать развитыми средствами аудита, то есть автоматиче ского ведения протоколов действий пользователей системы.

Таблицы для записей аудита обычно являются частью слова ря данных. В Oracle основной таблицей для записей аудита является таблица В данной таблице 28 столбцов, что позволяет вести достаточно детальный аудит событий в системе.

Для каждой контролируемой операции фиксируется ин формация о пользователе, выдавшем запрос на операцию, пе операции, об объектах базы данных, на которые воздейст вовала операция, дате и времени выполнения операции. На базе таблицы SYS.AUD$ построено несколько представле ний, информация из которых обычно и обрабатывается адми нистраторами системы и возможно пользователями. Наиболее часто используются представления:

USER_AUDIT_OBJECT, а также USER_AUDIT_SESSION,USER_AUDIT_STATEMENT.

Для того чтобы началась автоматическая фиксация собы тий в системе при помощи включения соответствующих за писей в таблицу аудита, необходимо активизировать службу аудита и определить перечень фиксируемых событий. Для активизации службы аудита необходимо включить в файл параметров базы данных параметр audit_trail = true (при ис пользовании стандартного файла инициализации данный па раметр присутствует, но закомментирован) и перезапустить сервер для того, чтобы измененное значение параметра вело к включению службы аудита.

Определение перечня фиксируемых событий может быть модифицировано в любое время пользователем, привилегию AUDIT SYSTEM (для аудита системных собы тий) или ANY (для аудита событий, связанных с до ступом к объекту системы). Заметим, что модификация пе речня фиксируемых событий может быть выполнена и в пе риод, когда служба аудита активизирована. Естественно, что записи о событиях перечня начнут появляться только по сле активизации службы.

Аудит Оператор определения перечня фиксируемых системных событий Oracle использует следующий синтаксис:

AUDIT \ }... ] [BY пользователь пользователь] [BY { SESSION I ACCESS }] [WHENEVER [NOT] SUCCESSFUL] Список значений, которые может принимать параметр приведен в представленных ниже таб лицах. Системные привилегии сгруппированы по объектам.

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

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

Конструкция BY SESSION указывает на то, что в таблицу аудита заносится единственная запись о фиксируемом дейст вии для каждого сеанса пользователя. Значение используется по умолчанию.

Конструкция BY ACCESS указывает на что для каж дого выполнения действия пользователем в таблицу аудита заносится запись о фиксируемом действии. Заметим, что в случае, если в предложении определена фиксация действий с системными привилегиями, или выполнение предложений подъязыка определения данных, то независимо от указанного значения параметра BY { SESSION | принудитель но выполняются действия, конструкцией BY ACCESS.

Конструкция WHENEVER SUCCESSFUL указывает то, что в таблицу аудита заносится запись о фиксируемом действии только в случае успешного выполнения операции.

Конструкция WHENEVER NOT SUCCESSFUL указывает на то, в таблицу аудита заносится запись о фиксируемом действии только в случае неуспешного выполнения операции.

Если конструкция WHENEVER... не указана, то ауди торская запись вносится независимо от успешности выполне ния операции. Значения, которые может принимать параметр приведены в таблицах 25 и 26.

1628.

Таблица 25. Обозначение и сущность основных сис темных событий Oracle, фиксирование которых определяется параметром команды AUDIT Имя группы ' Фиксируемые действия событий SESSION Фиксирует вхождения пользователей в систему.

CREATE USER DROP USER ALTER USER SYSTEM AUDIT AUDIT NOAUDIT SYSTEM GRANT GRANT (системные привилегии и привилегии доступа к объекту) (системные привилегии и доступа к объекту) NOT EXIST Фиксирует неуспешную попытку вы полнить любое SQL-предложение, если причина невозможности выпол нить операцию в том, что объект базы данных не существует.

PROCEDURE CREATE FUNCTION CREATE PACKAGE CREATE PACKAGE BODY.

CREATE PROCEDURE DROP FUNCTION DROP PACKAGE DROP PROCEDURE TABLE CREATE TABLE DROP TABLE TRUNCATE TABLE CREATE VIEW DROP VIEW PUBLIC SYNONYM CREATE PUBLIC SYNONYM DROP PUBLIC SYNONYM Средства в SYNONYM CREATE SYNONYM DROP SYNONYM ROLE CREATE ROLE ALTER ROLE DROP ROLE SET ROLE SEQUENCE CREATE SEQUENCE DROP TABLESPACE CREATE TABLESPACE DROP TABLESPACE ALTER TABLESPACE Рассмотрим пример использования автоматического ау дита процесса регистрации пользователей в системе. Пред ставленный в листинге 172 протокол демонстрирует включе ние и выключение службы автоматической регистрации со единений пользователей с сервером Oracle.

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

SQL> AUDIT Audit succeeded.

CONNECT CONNECT Connected.

SQL> CONNECT ERROR: invalid logon denied Warning: You are no longer connected to ORACLE.

CONNECT SYSTEM/MANAGER Connected.

11* Раздел SQL> succeeded.

Листинг Пример активизации и завершения про цесса автоматической регистрации подключе ния пользователей к серверу Oracle Результаты автоматической регистрации процессов под ключения пользователей к серверу Oracle просматриваются с использованием представления создан ного на базе системной таблицы SYS.AUD$. В листинге представлена выборка данных с результатами аудита систе мы, инициированного действиями, описанными в листинге 172.

SQL> SELECT 2 FROM USERNAME TIMESTAMP RETURNCODE 11-04-2002 U2 11-04-2002 UNKNOWN 11-04-2002 SYSTEM 11-04-2002 173. Результат выборки данных, собранных согласно листингу Дополнительные значения, которые может принимать параметр приведены в таблице 26.

Средства в Oracle Таблица 26. Обозначение дополнительных системных событий, фиксирование которых определяет событий Имя группы_ Фиксируемые действия событий GRANT TABLE Передача привилегий с использо предложения GRANT на объекты: таблица, представление, снимок. Отзыв привилегий с ис пользованием REVOKE на объек ты: таблица, представление, сни мок.

INSERT TABLE Операции вставки строк в таблицы и представления.

DELETE TABLE Операции удаления строк из таб лиц и представлений.

UPDATE Операции изменения строк в таб лицах и представлениях.

SELECT TABLE Операции выборки из таблиц, представлений и снимков.

ALTER TABLE Операции модификации определе ний таблиц ALTER TABLE.

Pages:     | 1 | 2 | 3 | 4 | 5 |    Книги, научные публикации