АУДИТИНГ БАЗЫ ДАННЫХ ORACLE


ГЛАВА 13

        ----------------------------------------------------------------

        АУДИТИНГ БАЗЫ ДАННЫХ



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

            *  указания по организации аудитинга

            *  установка опций аудитинга

            *  включение и выключение аудитинга

            *  управление аудиторским журналом

            *  аудитинг с помощью триггеров базы данных


[Trusted]

        Если  вы  используете  Trusted  ORACLE,  обратитесь  к документу
        Trusted ORACLE7 Server Administrator's Guide для  дополнительной
        информации об аудитинге и управлении аудиторским журналом в этом
        окружении.



































                                              Аудитинг базы данных  13-1


----------------

Указания по организации аудитинга

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

Выберите между аудитингом средствами базы данных
и аудитингом средствами операционной системы
------------------------------------------------

        Словарь  данных  каждой  базы  данных  содержит таблицу с именем
        SUS.AUD$, обычно  называемую АУДИТОРСКИМ  ЖУРНАЛОМ базы  данных.
        Ваша операционная система также может иметь аудиторский  журнал,
        хранящий  аудиторские  записи,  генерируемые средством аудитинга
        операционной  системы;  однако   это  средство  специфично   для
        операционной  системы  (см.  ваше  руководство  по инсталляции).
        Аудиторские  записи,  генерируемые  как  результат  отслеживания
        предложений,  привилегий  или  объектов,  можно  помещать  как в
        аудиторскую  таблицу  базы  данных,  так  и в аудиторский журнал
        операционной системы.

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

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

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

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

Поддерживайте управляемость аудиторской информацией
---------------------------------------------------

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

        При  выработке  стратегии  аудитинга  рассмотрите  следующие две
        общих рекомендации:

        1. Определите вашу цель аудитинга.

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

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

13-2  Руководство администратора


           подозреваете или уже  заметили?  Более сфокусированной  целью
           аудитинга  могло  бы  быть  отслеживание  несанкционированных
           удалений из любых  таблиц в базе  данных.  Такая цель  сужает
           тип  отслеживаемых  действий  и  тип  объектов,  на   которые
           действуют подозреваемые операции.

        2. Отслеживайте в разумных объемах.

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

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


Аудитинг подозрительной деятельности

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

            *  Отслеживайте сначала в общем, а потом конкретно.

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

            *  Защищайте аудиторский журнал.

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


Аудитинг нормальной деятельности

        Если ваша  цель -  собрать историческую  информацию о конкретных
        операциях в базе данных, рассмотрите следующие рекомендации:







                                              Аудитинг базы данных  13-3


            *  Отслеживайте только необходимые действия.

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

            *  Архивируйте аудиторские записи и очищайте журнал.

               Закончив сбор  требуемой информации,  перепишите в  архив
               интересующие  вас  аудиторские  записи,  и  удалите   эту
               информацию из аудиторского журнала.


----------------

Создание и удаление обзоров аудиторского журнала базы данных

        Аудиторский  журнал  базы  данных  (SYS.AUD$) - это единственная
        таблица  в  словаре  данных  каждой  базы  данных ORACLE.  Чтобы
        помочь вам получать  осмысленную аудиторскую информацию  из этой
        таблицы, предоставляются несколько предопределенных обзоров.

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


Создание обзоров аудиторского журнала
-------------------------------------

        Если  вы  решили  использовать  аудитинг,  создайте  аудиторские
        обзоры, подключившись  как SYS  и запустив  скрипт CATAUDIT.SQL.
        Этот скрипт создает следующие обзоры:

            * STMT_AUDIT_OPTION_MAP
            * AUDIT_ACTIONS
            * ALL_DEF_AUDIT_OPTS
            * DBA_STMT_AUDIT_OPTS
            * USER_J,J_AUDIT_OPTS, DBA_OBJ_AUDIT_OPTS
            * USER_AUDIT_TRAIL, DBA_AUDIT_TRAIL
            * USER_AUDIT_SESSION, DBA_AUDIT_SESSION
            * USER_AUDIT_STATEMENT, DBA_AUDIT_STATEMENT
            * USER_AUDIT_OBJECT, DBA_AUDIT_OBJECT
            * DBA_AUDIT_EXISTS
            * USER_AUDIT_SESSION, DBA_AUDIT_SESSION
            * USER_TAB_AUDIT_OPTS

        Обратитесь к приложению B для дополнительной информации об  этих
        обзорах.  См. также  "Вывод информации аудиторского  журнала" на
        странице   13-17   для   примеров   интерпретации    аудиторской
        информации.









13-4  Руководство администратора


Удаление обзоров аудиторского журнала
-------------------------------------

        Если  вы  решили  отключить  аудитинг  и  больше не нуждаетесь в
        аудиторских  обзорах,  удалите  их,  подключившись  как  SYS   и
        запустив скрипт CATNOAUD.SQL.  Точное имя и местоположение этого
        скрипта  зависит  от  операционной  системы; обратитесь к вашему
        руководству по инсталляции [IUG].


----------------

Установка опций аудитинга

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

            *  имя пользователя, выполнявшего отслеживаемое предложение

            *  код действия, указывающий выполненное предложение

            *  объекты, адресуемые в отслеживаемом предложении

            *  дату и время выполнения отслеживаемого предложения

        Аудиторский  журнал   не  сохраняет   информации  о   каких-либо
        значениях данных, которые  могли быть вовлечены  в отслеживаемое
        предложение;  например,   при  аудите   предложения  UPDATE   не
        сохраняются  старые  и  новые  значения  данных.   Однако, такой
        специализированный   тип   аудитинга   можно   осуществить   для
        предложений  DML,  работающих  с  таблицами, с помощью триггеров
        базы данных; обратитесь к странице 13-20 за примерами применения
        триггеров для этого типа аудита.

        ORACLE позволяет устанавливать опции аудитинга на трех уровнях:

        предложение     аудит  базируется   на  типе   предложений  SQL,
                        например, на любых предложениях SQL по  таблицам
                        (что  регистрирует  каждое  предложение  CREATE,
                        TRUNCATE и DROP TABLE)

        привилегия      отслеживает  использование  конкретной системной
                        привилегии, такой как CREATE TABLE

        объект          отслеживает  конкретные   типы  предложений   на
                        конкретных  объектах,  например,  ALTER TABLE по
                        таблице EMP

        Следующие секции  объясняют опции  аудитинга, которые  вы можете
        устанавливать.


Опции аудитинга предложений
---------------------------

        Допустимые   опции   аудитинга   предложений,   которые    могут
        участвовать  в  предложениях  AUDIT  и  NOAUDIT,  перечислены  в
        табл.13-1.    (Дополнительные   опции   аудитинга    предложений
        приведены в табл.13-2.)


                                              Аудитинг базы данных  13-5


Табл.13-1
Опции аудитинга предложений

        г=======================T======================================¬
        ¦ Опция                 ¦ Отслеживаемые предложения SQL        ¦
        ¦=======================+======================================¦
        ¦ ALTER SYSTEM          ¦ ALTER SYSTEM                         ¦
        ¦-----------------------+--------------------------------------¦
        ¦ CLUSTER               ¦ CREATE CLUSTER                       ¦
        ¦                       ¦ ALTER CLUSTER                        ¦
        ¦                       ¦ TRUNCATE CLUSTER                     ¦
        ¦                       ¦ DROP CLUSTER                         ¦
        ¦-----------------------+--------------------------------------¦
        ¦ DATABASE LINK         ¦ CREATE DATABASE LINK                 ¦
        ¦                       ¦ DROP DATABASE LINK                   ¦
        ¦-----------------------+--------------------------------------¦
        ¦ INDEX                 ¦ CREATE INDEX                         ¦
        ¦                       ¦ ALTER INDEX                          ¦
        ¦                       ¦ DROP INDEX                           ¦
        ¦-----------------------+--------------------------------------¦
        ¦ NOT EXISTS            ¦ Все предложения SQL, возвращающие    ¦
        ¦                       ¦ ошибку ORACLE из-за того, что        ¦
        ¦                       ¦ структура или объект не существует   ¦
        ¦-----------------------+--------------------------------------¦
        ¦ PROCEDURE             ¦ CREATE [OR REPLACE] FUNCTION         ¦
        ¦                       ¦ CREATE [OR REPLACE] PACKAGE          ¦
        ¦                       ¦ CREATE [OR REPLACE] PACKAGE BODY     ¦
        ¦                       ¦ CREATE [OR REPLACE] PROCEDURE        ¦
        ¦                       ¦ DEOP FUNCTION                        ¦
        ¦                       ¦ DEOP PACKAGE                         ¦
        ¦                       ¦ DROP PROCEDURE                       ¦
        ¦-----------------------+--------------------------------------¦
        ¦ PUBLIC DATABASE LINK  ¦ CREATE PUBLIC DATABASE LINK          ¦
        ¦                       ¦ DROP PUBLIC DATABASE LINK            ¦
        ¦-----------------------+--------------------------------------¦
        ¦ PUBLIC SYNONYM        ¦ CREATE PUBLIC SYNONYM                ¦
        ¦                       ¦ DROP PUBLIC SYNONYM                  ¦
        ¦-----------------------+--------------------------------------¦
        ¦ ROLE                  ¦ CREATE ROLE                          ¦
        ¦                       ¦ ALTER ROLE                           ¦
        ¦                       ¦ SET ROLE                             ¦
        ¦                       ¦ DROP ROLE                            ¦
        ¦-----------------------+--------------------------------------¦
        ¦ ROLLBACK SEGMENT      ¦ CREATE ROLLBACK SEGMENT              ¦
        ¦                       ¦ ALTER ROLLBACK SEGMENT               ¦
        ¦                       ¦ DROP ROLLBACK SEGMENT                ¦
        ¦-----------------------+--------------------------------------¦
        ¦ SEQUENCE              ¦ CREATE SEQUENCE                      ¦
        ¦                       ¦ DROP SEQUENCE                        ¦
        ¦-----------------------+--------------------------------------¦
        ¦ SESSION               ¦ Соединения и разъединения            ¦
        ¦-----------------------+--------------------------------------¦
        ¦ SYNONYM               ¦ CREATE SYNONYM                       ¦
        ¦                       ¦ DROP SYNONYM                         ¦
        ¦-----------------------+--------------------------------------¦
        ¦ SYSTEM AUDIT          ¦ AUDIT                                ¦
        ¦                       ¦ NOAUDIT                              ¦
        L=======================¦======================================-





13-6  Руководство администратора


        г=======================T======================================¬
        ¦ SYSTEM GRANT          ¦ GRANT системная привилегия/роль      ¦
        ¦                       ¦    TO пользователь/роль              ¦
        ¦                       ¦ REVOKE системная привилегия/роль     ¦
        ¦                       ¦    FROM пользователь/роль            ¦
        ¦-----------------------+--------------------------------------¦
        ¦ TABLE                 ¦ CREATE TABLE                         ¦
        ¦                       ¦ TRUNCATE TABLE                       ¦
        ¦                       ¦ DROP TABLE                           ¦
        ¦-----------------------+--------------------------------------¦
        ¦ TABLESPACE            ¦ CREATE TABLESPACE                    ¦
        ¦                       ¦ ALTER TABLESPACE                     ¦
        ¦                       ¦ DROP TABLESPACE                      ¦
        ¦-----------------------+--------------------------------------¦
        ¦ TRIGGER               ¦ CREATE TRIGGER                       ¦
        ¦                       ¦ ALTER TRIGGER EBABLE или DISABLE     ¦
        ¦                       ¦ ALTER TABLE с фразами ENABLE,        ¦
        ¦                       ¦ DISABLE или DROP                     ¦
        ¦-----------------------+--------------------------------------¦
        ¦ USER                  ¦ CREATE USER                          ¦
        ¦                       ¦ ALTER USER                           ¦
        ¦                       ¦ DROP USER                            ¦
        ¦-----------------------+--------------------------------------¦
        ¦ VIEW                  ¦ CREATE [OR REPLACE] VIEW             ¦
        ¦                       ¦ DROP VIEW                            ¦
        L=======================¦======================================-


Групповые обозначения для опций аудитинга

        Для   удобства   специфицирования   часто   встречающихся  групп
        связанных    опций    аудитинга    предоставляются   специальные
        обозначения.   Эти  обозначения  сами  не  являются опциями; они
        просто  позволяют  указать  одним  словом  целую  группу опций в
        предложении AUDIT или NOAUDIT.

        CONNECT         эквивалентно опции SESSION

        RESOURCE        экввивалентно   группе   опций   ALTER   SYSTEM,
                        CLUSTER,  DATABASE  LINK,  PROCEDURE,   ROLLBACK
                        SEGMENT, SEQUENCE, SYNONYM, TABLE, TABLESPACE  и
                        VIEW

        DBA             эквивалентно группе  опций SYSTEM  AUDIT, PUBLIC
                        DATABASE  LINK,  PUBLIC  SYNONYM,  ROLE,  SYSTEM
                        GRANT и USER

        ALL             эквивалентно   всем   опциям,   приведенным    в
                        табл.13-1, включая опцию NOT EXISTS

[!]     Замечание:  Не  путайте  обозначения  CONNECT,  RESOURCE и DBA с
        предопределенными ролями с такими же именами.


Аудитинг соединений и разъединений

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


                                              Аудитинг базы данных  13-7


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


Дополнительные опции аудитинга предложений

        Дополнительные  опции  аудитинга  предложений,  не вошедшие ни в
        одно  из  приведенных  выше  групповых  обозначений,  показаны в
        табл.13-2.

Табл.13-2
Дополнительные опции аудитинга предложений

        г===================T==========================================¬
        ¦ Опция аудитинга   ¦ Отслеживаемые предложения SQL            ¦
        ¦===================+==========================================¦
        ¦ ALTER SEQUENCE    ¦ ALTER SEQUENCE последовательность        ¦
        ¦-------------------+------------------------------------------¦
        ¦ ALTER TABLE       ¦ ALTER TABLE таблица                      ¦
        ¦-------------------+------------------------------------------¦
        ¦ COMMENT TABLE     ¦ COMMENT ON TABLE таблица, обзор,         ¦
        ¦                   ¦ снимок, столбец                          ¦
        ¦-------------------+------------------------------------------¦
        ¦ DELETE TABLE      ¦ DELETE FROM таблица, обзор               ¦
        ¦-------------------+------------------------------------------¦
        ¦ EXECUTE PROCEDURE ¦ Вызовы процедур и функций                ¦
        ¦-------------------+------------------------------------------¦
        ¦ GRANT PROCEDURE   ¦ GRANT привилегия ON процедура            ¦
        ¦                   ¦ REVOKE привиления ON процедура           ¦
        ¦-------------------+------------------------------------------¦
        ¦ GRANT TABLE       ¦ GRANT привилегия ON таблица,обзор,снимок ¦
        ¦                   ¦ REVOKE привиления ON таблица,обзор,снимок¦
        ¦-------------------+------------------------------------------¦
        ¦ INSERT TABLE      ¦ INSERT INTO таблица, обзор               ¦
        ¦-------------------+------------------------------------------¦
        ¦ LOCK TABLE        ¦ LOCK TABLE таблица, обзор                ¦
        ¦-------------------+------------------------------------------¦
        ¦ SELECT SEQUENCE   ¦ Обращения к последовательности           ¦
        ¦-------------------+------------------------------------------¦
        ¦ SELECT TABLE      ¦ SELECT ... FROM таблица,обзор,снимок     ¦
        ¦-------------------+------------------------------------------¦
        ¦ UPDATE TABLE      ¦ UPDATE таблица, обзор                    ¦
        L===================¦==========================================-

Опции аудитинга привилегий
--------------------------

        Имена   опций   аудитинга    привилегий   точно   совпадают    с
        соответствующими  системными   привилегиями.   Например,   опция
        аудита  использования  привилегии  DELETE  ANY  TABLE называется
        DELETE ANY TABLE.  Чтобы включить эту опцию, вы могли бы  выдать
        предложение, подобное следующему:

        AUDIT DELETE ANY TABLE
          BY ACCESS
          WHENEVER NOT SUCCESSFUL;

        Системные привилегии ORACLE приведены, начиная со страницы 12-2.

13-8  Руководство администратора


Опции аудитинга объектов
------------------------

        Табл.13-3 показывает допустимые опции аудитинга объектов и  типы
        объектов схемы, к которым применима каждая из этих опций.

Табл.13-3
Опции аудитинга объектов

        г=================T==========T==========T==========T===========¬
        ¦ Опция аудитинга ¦ Table    ¦ View     ¦ Sequence ¦ Procedure*¦
        ¦=================+==========+==========+==========+===========¦
        ¦ ALTER           ¦    +     ¦          ¦    +     ¦           ¦
        ¦-----------------+----------+----------+----------+-----------¦
        ¦ AUDIT           ¦    +     ¦    +     ¦    +     ¦    +      ¦
        ¦-----------------+----------+----------+----------+-----------¦
        ¦ COMMENT         ¦    +     ¦    +     ¦          ¦           ¦
        ¦-----------------+----------+----------+----------+-----------¦
        ¦ DELETE          ¦    +     ¦    +     ¦          ¦           ¦
        ¦-----------------+----------+----------+----------+-----------¦
        ¦ EXECUTE         ¦          ¦          ¦          ¦    +      ¦
        ¦-----------------+----------+----------+----------+-----------¦
        ¦ GRANT           ¦    +     ¦    +     ¦    +     ¦    +      ¦
        ¦-----------------+----------+----------+----------+-----------¦
        ¦ INDEX           ¦    +     ¦          ¦          ¦           ¦
        ¦-----------------+----------+----------+----------+-----------¦
        ¦ INSERT          ¦    +     ¦    +     ¦          ¦           ¦
        ¦-----------------+----------+----------+----------+-----------¦
        ¦ LOCK            ¦    +     ¦    +     ¦          ¦           ¦
        ¦-----------------+----------+----------+----------+-----------¦
        ¦ RENAME          ¦    +     ¦    +     ¦          ¦    +      ¦
        ¦-----------------+----------+----------+----------+-----------¦
        ¦ SELECT          ¦    +     ¦    +**   ¦    +     ¦           ¦
        ¦-----------------+----------+----------+----------+-----------¦
        ¦ UPDATE          ¦    +     ¦    +     ¦          ¦           ¦
        L=================¦==========¦==========¦==========¦===========-

        *  "Procedure" обозначает независимые хранимые процедуры и
           функции, а также пакеты.
        ** Опция SELECT может также использоваться для снимков.























                                              Аудитинг базы данных  13-9


        Табл.13-4 показывает  предложения SQL,  отслеживаемые каждой  из
        опций аудитинга объектов.

Табл.13-4
Предложения SQL, отслеживаемые опциями аудитинга объектов
        г=========T====================================================¬
        ¦ Опция   ¦ Отслеживаемые предложения SQL                      ¦
        ¦=========+====================================================¦
        ¦ ALTER   ¦ ALTER объект (таблица или последовательность)      ¦
        ¦---------+----------------------------------------------------¦
        ¦ AUDIT   ¦ AUDIT (Форма II) объект                            ¦
        ¦---------+----------------------------------------------------¦
        ¦ COMMENT ¦ COMMENT объект (таблица или обзор)                 ¦
        ¦---------+----------------------------------------------------¦
        ¦ DELETE  ¦ DELETE FROM объект (таблица или обзор)             ¦
        ¦---------+----------------------------------------------------¦
        ¦ EXECUTE ¦ EXECUTE объект (процедура*)                        ¦
        ¦---------+----------------------------------------------------¦
        ¦ GRANT   ¦ GRANT (Форма II) привиления ON объект              ¦
        ¦---------+----------------------------------------------------¦
        ¦ INDEX   ¦ CREATE INDEX ON объект (только таблица)            ¦
        ¦---------+----------------------------------------------------¦
        ¦ INSERT  ¦ INSERT INTO объект (таблица или обзор)             ¦
        ¦---------+----------------------------------------------------¦
        ¦ LOCK    ¦ LOCK объект (таблица или обзор)                    ¦
        ¦---------+----------------------------------------------------¦
        ¦ RENAME  ¦ RENAME объект (таблица, обзор или процедура*)      ¦
        ¦---------+----------------------------------------------------¦
        ¦ SELECT  ¦ SELECT ... FROM объект (таблица, обзор или снимок) ¦
        ¦         ¦ Любое предложение, использующее последовательность ¦
        ¦---------+----------------------------------------------------¦
        ¦ UPDATE  ¦ UPDATE объект (таблица или обзор)                  ¦
        L=========¦====================================================-
        *  "Procedure" обозначает независимые хранимые процедуры и
           функции, а также пакеты.

Групповые обозначения для опций аудитинга объектов
        Обозначение ALL может  использоваться для специфицирования  всех
        возможных  опций  аудитинга  объекта  для  объекта  схемы.   Это
        обозначение  само  не  является  опцией;  оно  просто  позволяет
        указать одним словом все опции аудитинга в предложении AUDIT или
        NOAUDIT.

Включение опций аудитинга
-------------------------
        Команда SQL  AUDIT включает  как опции  аудитинга предложений  и
        привилегий, так и опции  аудитинга объектов.  Когда эта  команда
        включает  опции  аудитинга  предложений  и привилегий, она может
        включать   фразу   BY   USER,   чтобы   специфицировать   список
        пользователей, ограничивающий  сферу отслеживания  предложений и
        привилегий.   Для  включения   опций  аудитинга  предложений   и
        привилегий вы  должны иметь  системную привилегию  AUDIT SYSTEM.
        Для включений  опций аудитинга  объектов вы  должны либо владеть
        отслеживаемым объектом, либо иметь привилегию AUDIT ANY.
        Устанавливая   опции   аудитинга,   вы   можете  специфицировать
        следующие условия для аудитинга:

            *  WHENEVER SUCCESSFUL / WHENEVER NOT SUCCESSFUL
            *  BY SESSION / BY ACCESS

        Предупреждение: Команда AUDIT лишь включает опции аудитинга; она
        не включает  аудитинг как  таковой.  Для  включения аудитинга  и

13-10  Руководство администратора


        управления генерацией аудиторских записей, основанных на текущих
        установленных опциях  аудитинга, необходимо  установить параметр
        AUDIT_TRAIL в файле параметров базы данных.  (См.  "Включение  и
        выключение аудитинга базы данных" на странице 13-14.)

        Следующие примеры иллюстрируют использование команды AUDIT.  Для
        полного описания  команды AUDIT  обратитесь к  документу ORACLE7
        Server SQL Language Reference Manual.


Включение аудитинга предложений и привилегий

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

        AUDIT SESSION;

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

        AUDIT SESSION
            BY scott, lori;

        Для  аудитинга   всех  успешных   и  безуспешных   использований
        системной  привилегии  DELETE   ANY  TABLE,  введите   следующее
        предложение:

        AUDIT DELETE ANY TABLE;

        Для  аудитинга  всех  безуспешных  предложений  SELECT, INSERT и
        DELETE по всем  таблицам, и безуспешных  использований системной
        привилегии  EXECUTE  ANY  PROCEDURE,  по всем пользователям базы
        данных, BY ACCESS, введите следующее предложение:

        AUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE,
         EXECUTE ANY PROCEDURE
            BY ACCESS
            WHENEVER NOT SUCCESSFUL;

    Привилегии, требуемые для включения опций
    аудитинга предложений и привилегий

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


Включение аудитинга объектов

        Для аудитинга всех успешных и безуспешных предложений DELETE  по
        таблице   EMP,   BY   SESSION   (умолчание),   введите следующее
        предложение:

        AUDIT DELETE ON emp;

        Для аудитинга всех успешных предложений SELECT, INSERT и  DELETE
        по таблице  DEPT, принадлежащей  пользователю JWARD,  BY ACCESS,
        введите следующее предложение:



                                             Аудитинг базы данных  13-11


        AUDIT SELECT, INSERT, DELETE
            ON jward.dept
            BY ACCESS
            WHENEVER SUCCESSFUL;

    Установка умалчиваемых опций аудитинга объектов

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

        AUDIT SELECT
            ON DEFAULT
            WHENEVER NOT SUCCESSFUL;

    Привилегии, требуемые для включения опций аудитинга объектов

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


Выключение опций аудитинга
--------------------------

        Команда  NOAUDIT  выключает  различные  опции  аудитинга ORACLE.
        Используйте  ее  для  сброса  как  опций аудитинга предложений и
        привилегий, так и опций  аудитинга объектов.  Когда эта  команда
        сбрасывает опции аудитинга  предложений и привилегий,  она может
        включать   фразу   BY   USER,   чтобы   специфицировать   список
        пользователей, ограничивающий  сферу действия команды.

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

        Пара  опций  BY  SESSION/BY  ACCESS  НЕ  ПОДДЕРЖИВАЕТСЯ командой
        NOAUDIT;  опции  аудитинга,  независимо  от  того,  как они были
        включены, выключаются соответствующим предложением NOAUDIT.

        Следующие  примеры  иллюстрируют  использование команды NOAUDIT.
        Для  полного  описания  команды  NOAUDIT  обратитесь к документу
        ORACLE7 Server SQL Language Reference Manual.

[!]     Предупреждение: Команда NOAUDIT лишь выключает опции  аудитинга;
        она не отключает аудитинг как таковой.  Для отключения аудитинга
        и прекращения  генерациии аудиторских  записей, даже  если у вас
        установлены  опции  аудитинга,  необходимо  установить  параметр
        AUDIT_TRAIL в файле параметров базы данных.  (См.  "Включение  и
        выключение аудитинга базы данных" на странице 13-14.)


Выключение аудитинга предложений и привилегий

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




13-12  Руководство администратора


        NOAUDIT SESSION;
        NOAUDIT SESSION BY scott, lori;
        NOAUDIT DELETE ANY TABLE;
        NOAUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE,
          EXECUTE ANY PROCEDURE;

        Более того, с помощью следующих предложений вы можете  отключить
        все опции аудитинга предложений (системы) и привилегий:

        NOAUDIT ALL;
        NOAUDIT ALL PRIVILEGE;

    Привилегии, требуемые для выключения опций
    аудитинга предложений и привилегий

        Для выключения  любой опции  аудитинга предложений  и привилегий
        требуется системная привилегия AUDIT SYSTEM.


Выключение аудитинга объектов

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

        AUDIT DELETE
            ON emp;
        NOAUDIT SELECT, INSERT, DELETE
            ON jward.dept;

        Чтобы отключить  все опции  аудитинга объектов  по таблице  EMP,
        введите следующее предложение:

        NOAUDIT ALL
            ON emp;

    Выключение умалчиваемых опций аудитинга объектов

        Чтобы  отключить  все  умалчиваемые  опции  аудитинга  объектов,
        введите следующее предложение:

        NOAUDIT ALL
            ON DEFAULT;

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

    Привилегии, требуемые для выключения опций аудитинга объектов

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






                                             Аудитинг базы данных  13-13


----------------

Включение и выключение аудитинга базы данных

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

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

        DB              включает аудитинг базы  данных и направляет  все
                        аудиторские  записи  в  аудиторский  журнал базы
                        данных

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

        NONE            выключает аудитинг (умолчание)

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

        Замечание:  Обратитесь   к  приложению   A  для   дополнительной
        информации о редактировании файла параметров.


----------------

Контролирование роста и размера аудиторского журнала

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

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

        Когда  аудитинг  включен  и  генерируются  аудиторские   записи,
        аудиторский журнал растет за счет двух факторов:

            *  числа включенных опций аудитинга

            *  частоты выполнения отслеживаемых предложений

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



13-14  Руководство администратора


            *  Включать  и  выключать   аудитинг  базы  данных.    Когда
               аудитинг  включен,  аудиторские  записи  генерируются   и
               поступают в журнал; когда аудитинг выключен,  аудиторские
               записи не генерируются.

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

            *  Жестко контролировать  возможности осуществлять  аудитинг
               объектов.  Это можно делать двумя различными способами:

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

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

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

        Максимальный размер  аудиторского журнала  базы данных  (таблицы
        SYS.AUD$) предопределяется  во время  создания базы  данных.  По
        умолчанию этой таблице может  быть распределено до 99  экстентов
        размерами по 10K.


Очистка аудиторских записей из аудиторского журнала
---------------------------------------------------

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

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

        DELETE FROM sys.aud$;

        Альтернативно,  чтобы  удалить   из  аудиторского  журнала   все
        аудиторские записи,  сгенерированные как  результат отслеживания
        таблицы EMP, введите следующее предложение:

        DELETE FROM sys.aud$
            WHERE obj$name = 'EMP';

        Если информация аудиторского  журнала должна архивироваться  для
        целей накопления истории, администратор защиты может скопировать
        соответствующие записи в нормальную таблицу базы данных (скажем,
        с  помощью  предложения  "INSERT  INTO  table  SELECT  ...  FROM
        sys.aud$ ..."),  или экспортировать  аудиторскую таблицу  в файл

                                             Аудитинг базы данных  13-15


        операционной системы.  Для информации о том, как  экспортировать
        таблицы, обратитесь к документу ORACLE7 Server Utilities  User's
        Guide.

        Удалять записи  из аудиторского  журнала базы  данных может лишь
        пользователь SYS, т.е.  пользователь, имеющий привилегию  DELETE
        ANY  TABLE  (или  пользователь,  которому SYS передал привилегию
        DELETE по таблице SYS.AUD$).

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


Уменьшение размера аудиторского журнала
---------------------------------------

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

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

        2. Соединитесь с базой данных как INTERNAL.

        3. Выполните  усечение  таблицы   SYS.AUD$  с  помощью   команды
           TRUNCATE.

        4. Перезагрузите аудиторские записи, сохраненные вами на шаге 1.

        В  новой  версии  SYS.AUD$  будет  распределено  ровно   столько
        экстентов, сколько необходимо для текущих аудиторских записей.

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


















13-16  Руководство администратора


----------------

Защита аудиторского журнала

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

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

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

        AUDIT INSERT, UPDATE, DELETE
            ON sys.aud$
            BY ACCESS;

        Аудиторские   записи,   сгенерированные   как   результат  опций
        аудитинга объектов,  установленных для  таблицы SYS.AUD$,  могут
        быть удалены из аудиторского журнала лишь лицом, которое  сможет
        подключиться как  INTERNAL, а  эта возможность  сама защищена от
        несанкционированного  использования.   Как  заключительная  мера
        защиты  аудиторского  журнала,  любая  операция,  выполняемая от
        имени  INTERNAL,  должна  отслеживаться  в  аудиторском журнале.
        Обратитесь  к  вашему   руководству  по  инсталляции   [IUG]  за
        дополнительной   информацией    о   возможности    использования
        аудиторского журнала операционной системы.


----------------

Вывод информации аудиторского журнала базы данных

        Следующие  секции  дают  примеры,  которые  демонстрируют,   как
        исследовать и интерпретировать информацию аудиторского журнала.

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

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

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

            *  Из  таблицы  EMP  в  схеме пользователя SCOTT произвольно
               пропадают строки.

        Предположим  также,  что  в  осуществлении  некоторых  из   этих
        вредоносных  действий  вы  подозреваете  пользователей  JWARD  и
        SWILLIAMS.

        Для последующих примеров примем, что администратором были выданы
        следующие предложения (в указанном порядке):




                                             Аудитинг базы данных  13-17


        AUDIT ALTER, INDEX, RENAME ON DEFAULT
              BY SESSION;
        CREATE TABLE scott.emp . . . ;
        CREATE VIEW scott.employee AS SELECT * FROM scott.emp;
        AUDIT SESSION BY jward, swilliams;
        AUDIT ALTER USER;
        AUDIT LOCK TABLE
            BY ACCESS
            WHENEVER SUCCESSFUL;
        AUDIT DELETE ON scott.emp
            BY ACCESS
            WHENEVER SUCCESSFUL;

        Пользователь JWARD впоследствии выдает следующие предложения:

        ALTER USER tsmith QUOTA 0 ON users;
        DROP USER djones;

        Пользователь SWILLIAMS позднее выдает следующие предложения:

        LOCK TABLE scott.emp IN EXCLUSIVE MODE;
        DELETE FROM scott.emp WHERE mgr = 7698;
        ALTER TABLE scott.emp ALLOCATE EXTENT (SIZE 100K);
        CREATE INDEX scott.ename_index ON scott.emp (ename);
        CREATE PROCEDURE scott.fire_employee (empid NUMBER) AS
        BEGIN
            DELETE FROM scott.emp WHERE empno = empid;
        END;
        /
        EXECUTE scott.fire_employee(7902);

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


Пример 1:
Вывод активных опций аудитинга предложений

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

        SELECT * FROM sys.dba_stmt_audit_opts;

        USER_NAME            AUDIT_OPTION         SUCCESS    FAILURE
        -------------------- -------------------- ---------- ----------
        JWARD                SESSION              BY SESSION BY SESSION
        SWILLIAMS            SESSION              BY SESSION BY SESSION
                             LOCK TABLE           BY ACCESS  NOT SET

        Заметьте,  что  этот  обзор  показывает  все установленные опции
        аудитинга предложений,  независимо от  условий их  успешности, и
        независимо от их режима (BY SESSION или BY ACCESS).










13-18  Руководство администратора


Пример 2:
Вывод активных опций аудитинга привилегий

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

        SELECT * FROM sys.dba_priv_audit_opts;

        USER_NAME            AUDIT_OPTION         SUCCESS    FAILURE
        -------------------- -------------------- ---------- ----------
                             ALTER USER           BY SESSION BY SESSION


Пример 3:
Вывод активных опций аудитинга объектов по конкретным объектам

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

        SELECT * FROM sys.dba_obj_audit_opts
            WHERE owner = 'SCOTT' AND object_name LIKE 'EMP%';

OWNER OBJECT_N OBJECT_TY ALT AUD COM DEL GRA IND INS LOC REN SEL UPD EXE
----- -------- --------- --- --- --- --- --- --- --- --- --- --- --- ---
SCOTT EMP      TABLE     S/S -/- -/- A/- -/- S/S -/- -/- S/S -/- -/- -/-
SCOTT EMPLOYEE VIEW      -/- -/- -/- -/- -/- -/- -/- -/- S/S -/- -/- -/-

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

            *  Символ "-" указывает, что опция аудитинга не установлена.

            *  Символ "S" указывает,  что опция аудитинга  установлена в
               режиме BY SESSION.

            *  Символ "A" указывает,  что опция аудитинга  установлена в
               режиме BY ACCESS.

            *  Каждая  опция  аудитинга  имеет  два  возможных  условия:
               WHENEVER   SUCCESSFUL   или   WHENEVER   NOT  SUCCESSFUL,
               разделяемые  символом  "/".   Например,  опция  аудитинга
               DELETE для SCOTT.EMP установлена  в режиме BY ACCESS  для
               условия WHENEVER SUCCESSFUL, и не установлена для условия
               WHENEVER NOT SUCCESSFUL,


Пример 4:
Вывод умалчиваемых опций аудитинга объектов

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

        SELECT * FROM all_def_audit_opts;

        ALT AUD COM DEL GRA IND INS LOC REN SEL UPD
        --- --- --- --- --- --- --- --- --- --- ---
        S/S -/- -/- -/- -/- S/S -/- -/- S/S -/- -/-

        Заметьте,  что  этот  обзор  возвращает  информацию, аналогичную
        обзорам USER_OBJ_AUDIT_OPTS и DBA_OBJ_AUDIT_OPTS (см. предыдущий
        пример).

                                             Аудитинг базы данных  13-19


Пример 5:
Вывод аудиторских записей

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

        SELECT username, obj_name, action_name, ses_actions
            FROM sys.dba_audit_object;


Пример 6:
Вывод аудиторских записей для опции AUDIT SESSION

        Следующий запрос выдает аудиторскую информацию,  соответствующую
        опции аудитинга предложений AUDIT SESSION:

        SELECT username, logoff_time, logoff_lread, logoff_pread,
            logoff_lwrite, logoff_dlock
            FROM sys.dba_audit_session;

        USERNAME   LOGOFF_TI LOGOFF_LRE LOGOFF_PRE LOGOFF_LWR LOGOFF_DLO
        ---------- --------- ---------- ---------- ---------- ----------
        JWARD      02-AUG-91         53          2         24 0
        SWILLIAMS  02-AUG-91       3337        256        630 0

----------------

Аудитинг с помощью триггеров базы данных

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

        Замечание: В некоторых  отношениях, команда ORACLE  AUDIT должна
        рассматриваться  как  средство  аудитинга  для защиты, тогда как
        триггеры могут предоставить средства финансового аудитинга.

        Решая, создавать ли  триггер для отслеживания  деятельности базы
        данных,  рассмотрите  преимущества,  которые  имеют  стандартные
        средства аудитинга базы данных ORACLE по сравнению с  аудитингом
        через триггеры:
            *  Опции стандартного аудитинга покрывают предложения DDL  и
               DML для любых типов объектов схем и структур.   Напротив,
               триггеры  могут   отслеживать  только   предложения  DML,
               выдаваемые для таблиц.
            *  Вся  аудиторская  информация  базы  данных   записывается
               централизованно  и   автоматически,  используя   средства
               аудитинга ORACLE.
            *  Аудитинг,  включаемый  стандартными  средствами   ORACLE,
               легче  объявлять  и  сопровождать,  и он меньше подвержен
               ошибкам,  чем   функции  аудитинга,   определяемые  через
               триггеры.
            *  Любые изменения существующих опций стандартного аудитинга
               также можно отслеживать, что еще более усиливает контроль
               за действиями в базе данных.
            *  Используя  средства  аудитинга  базы  данных,  вы  можете
               генерировать  аудиторские  записи  либо  каждый  раз  при
               выдаче отслеживаемого предложения (BY ACCESS), либо  один

13-20  Руководство администратора


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

            *  Аудитинг  базы   данных  может   отслеживать  безуспешные
               попытки доступа  к данным.   Напротив, любая  аудиторская
               информация,  генерируемая  триггером,  стирается в случае
               отката предложения триггера.

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

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

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

        Следующий  триггер  отслеживает   модификации  таблицы  EMP   по
        строкам.  Он требует, чтобы в глобальной переменной пакета перед
        обновлением  был  предоставлен  "код  причины".   Этот   триггер
        демонстрирует:

            *  как триггеры могут обеспечить аудитинг по значениям

            *  как можно применять общие пакетированные переменные

        Комментарии в коде объясняют логику триггера.

        CREATE TRIGGER audit_employee
        AFTER INSERT OR DELETE OR UPDATE ON emp
        FOR EACH ROW
        BEGIN
        /*  AUDITPACKAGE - это пакет, в котором объявлена общая
            переменная REASON. Эта переменная должна быть установлена
            приложением с помощью команды, например, такой как
            EXECUTE AUDITPACKAGE.SET_REASON(reason_string). Заметьте,
            что пакетированная переменная сохраняет свое значение на
            протяжении всей сессии, и что каждая сессия имеет свою
            собственную копию всех пакетированных переменных. */
        IF auditpackage.reason IS NULL THEN
          raise_application_error(-20201,
        'Задайте причину через AUDITPACKAGE.SET_REASON(reason_string)');
        END IF;







                                             Аудитинг базы данных  13-21


        /*  Если выполнено приведенное выше условие, т.е. переменная
            REASON пуста, то выдаются указанное сообщение и код
            ошибки, выполнение триггера прекращается, и результаты
            предложения, возбудившего триггер, откатываются.
            В противном случае, триггер вставляет новую строку в
            предопределенную аудиторскую таблицу AUDIT_EMPLOYEE,
            записывая старое и новое значения в таблице EMP и код
            причины, определенный значением переменной REASON из пакета
            AUDITPACKAGE. Заметьте, что "старые" значения пусты, если
            триггер вызван предложением INSERT, и "новые" значения
            пусты, если триггер вызван предложением DELETE. */
        INSERT INTO audit_employee VALUES
          (:old.ssn, :old.name, :old.job_classification, :old.sal,
          :new.ssn, :new.name, :new.job_classification, :new.sal,
          auditpackage.reason, user, sysdate);
        END;

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

        CREATE TRIGGER audit_employee_reset
        AFTER INSERT OR DELETE OR UPDATE ON emp
        BEGIN
          auditpackage.set_reason(NULL);
        END;

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