Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Audit on procedure  [new]
Victor V
Member

Откуда: Kiev
Сообщений: 372
Всем доброго дня.
Подскажите, возможно ли, и если да, то как организовать аудит команд
create or replace procedure [fuction, package, package body] и
alter тех же самых compile.
Спасибо.
3 май 06, 17:42    [2626392]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
Виталий Воронцов
Member

Откуда: Киев
Сообщений: 51
Витя, в Оракл есть встроенный механизм аудита. В твоем случае необходимо воспользоваться командами по включению аудита:

audit PROCEDURE;
audit TRIGGER;

Результат аудита можно просмотреть в sys.aud$ таблице.
3 май 06, 17:54    [2626465]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
Victor V
Member

Откуда: Kiev
Сообщений: 372
Виталик, большое спасибо.
Я знаю, что в Оракле есть аудит и как им пользоваться.
У меня не получается включить его на конкретные выделенные
жирненьким операции.
3 май 06, 17:58    [2626491]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
HX
Member

Откуда: Moscow
Сообщений: 2454
Victor V
Виталик, большое спасибо.
Я знаю, что в Оракле есть аудит и как им пользоваться.
У меня не получается включить его на конкретные выделенные
жирненьким операции.

AUDIT CREATE PROCEDURE Does not Audit "Create OR Replace Procedure" Statements
3 май 06, 18:07    [2626528]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
Виталий Воронцов
Member

Откуда: Киев
Сообщений: 51
Проверь параметр инициализации AUDIT_TRAIL - должен быть установлен в DB.

Может ты из под пользователя sys выполняешь операцию create or replace? По умолчанию правила аудита не применяются к данному пользователю. Если да, то установи AUDIT_SYS_OPERATIONS = TRUE.

Я без проблем выполнил два раза под тестовым пользователем:
create or replace procedure test_proc is
begin
null;
end;


и аудит сработал.
3 май 06, 18:09    [2626544]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
Виталий Воронцов
Member

Откуда: Киев
Сообщений: 51
HX
Victor V
Виталик, большое спасибо.
Я знаю, что в Оракле есть аудит и как им пользоваться.
У меня не получается включить его на конкретные выделенные
жирненьким операции.

AUDIT CREATE PROCEDURE Does not Audit "Create OR Replace Procedure" Statements


Оракл пишут тоже люди
3 май 06, 18:13    [2626565]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
Victor V
Member

Откуда: Kiev
Сообщений: 372
Спасибо HX, я читал эту ноту.
Всё оказалось гораздо прикольнее.
Все тесты я делал в PL/SQL Developer.
Код очень простой:
create or replace procedure prt as 
t number;
begin
t:=2;
end;
/
Когда выполнил его в sqlplus - запись в dba_audit_trail появилась.
Протер глаза, выполнил в тоже самое ещё раз в PL/SQL Developer - нет новых записей.
Выполнил ещё раз в sqlplus - есть, выполнил в PL/SQL Developer -> Command Window - тоже есть.
Выполнил в PL/SQL Developer -> SQL Window - нет...
Бред...
Всем спасибо!
3 май 06, 18:16    [2626579]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
juks@gala.net
Member

Откуда: Киев
Сообщений: 4212
Виталий Воронцов
Оракл пишут тоже люди

Если бы... , индусы !
3 май 06, 18:16    [2626581]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
juks@gala.net
Member

Откуда: Киев
Сообщений: 4212
Victor V
Протер глаза, выполнил в тоже самое ещё раз в PL/SQL Developer - нет новых записей.
Выполнил ещё раз в sqlplus - есть, выполнил в PL/SQL Developer -> Command Window - тоже есть.
Выполнил в PL/SQL Developer -> SQL Window - нет...
Бред...

DOA ф топку ! Не зря говорят - глючная штука
3 май 06, 18:19    [2626593]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
HX
Member

Откуда: Moscow
Сообщений: 2454
juks@gala.net

DOA ф топку ! Не зря говорят - глючная штука

В топку-тов топку... Но только что это способ обойти audit?
3 май 06, 18:21    [2626597]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
Victor V
Member

Откуда: Kiev
Сообщений: 372
HX

В топку-то в топку... Но только что это способ обойти audit?

Надо будет по трассировке посмотреть, что он там выполняет...
Ну с одним вроде разобрались.... А как включить аудит на компиляцию?
3 май 06, 18:34    [2626669]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
raw
Member

Откуда:
Сообщений: 133
Мне кажется, удобно использовать для аудита DDL-изменений в базе триггер типа
CREATE OR REPLACE TRIGGER audit_ddl
before ddl on database
declare
l_osuser  VARCHAR2(100);
l_program VARCHAR2(100);
l_long    LONG;
l_len     NUMBER;
l_str     VARCHAR2(32000);
view_does_not_exist  EXCEPTION;
pragma exception_init (view_does_not_exist, -31603);
l_privs         ora_name_list_t;
l_priv_cnt      binary_integer;
l_grantee       ora_name_list_t;
l_grantee_cnt   binary_integer;
l_grant_type    VARCHAR2(2000);
l_object        VARCHAR2(2000);
l_place         binary_integer;
sql_text        ora_name_list_t;
stmt            VARCHAR2(2000);
l_cnt           pls_integer;
begin

           select upper(osuser), upper(program) into l_osuser, l_program from v$session
           where sid = (select sid from v$mystat where rownum = 1);


           insert into ddl_change (id, owner, name, type, osuser, program, ddl_time, action) values
           (ddl_seq.nextval, ora_dict_obj_owner, ora_dict_obj_name,
            ora_dict_obj_type, l_osuser, l_program, sysdate, ora_sysevent);


           l_cnt := ora_sql_txt(sql_text);
     for i in 1..l_cnt loop
     insert into ddl_statements(id, line, text) values (ddl_seq.currval, i, sql_text(i));
     end loop;

           if ora_dict_obj_type = 'TABLE' then
                       insert into ddl_detail (id, line, text)
                       select ddl_seq.currval, column_id,
                              column_name || ' '|| data_type || ' ' ||
                              decode(data_type,'NUMBER', data_precision || ' ' || data_scale,
                                                         decode(data_type, 'DATE', null, data_length)) ||
                              decode(nullable,'N', ' NOT NULL')
                       from dba_tab_columns
                       where table_name =  ora_dict_obj_name and
                             owner = ora_dict_obj_owner;

           elsif ora_dict_obj_type = 'VIEW' and ora_sysevent <> 'ALTER' then
                      begin
                      select text into l_long from dba_views where view_name = ora_dict_obj_name and owner = ora_dict_obj_owner;
                      l_len := length(l_long);
                      for i in 1..ceil(l_len/4000) loop
                         l_str := substr(l_long,(i-1) * 4000 + 1 ,4000);
                         insert into ddl_detail (id, line, text)  values (ddl_seq.currval, i, l_str);
                                         end loop;
                      exception when view_does_not_exist then null;
                                when no_data_found then null;
                      when others then       l_str := sqlerrm;
                      insert into ddl_detail (id, line, text)  values (ddl_seq.currval, 1, l_str);
                      end;

           elsif (ora_dict_obj_type in
                 ('PACKAGE', 'PACKAGE BODY', 'PROCEDURE', 'FUNCTION', 'TRIGGER'))
                 and (ora_sysevent in ('CREATE', 'DROP'))
              then
                      insert into ddl_detail (id, line, text)
                      select ddl_seq.currval, line, text from dba_source
                      where name =  ora_dict_obj_name and
                            owner = ora_dict_obj_owner and
                            type  = ora_dict_obj_type;

           elsif ora_sysevent in ('GRANT', 'REVOKE') then
                      l_grant_type := ora_dict_obj_type;
                      if l_grant_type <> 'ROLE PRIVILEGE' then
                         l_object := ora_dict_obj_name;
                      end if;
                      if ora_sysevent = 'GRANT' then
                           l_grantee_cnt := ora_grantee(l_grantee);
                      else
                           l_grantee_cnt := ora_revokee(l_grantee);
                      end if;
                      l_priv_cnt := ora_privilege_list(l_privs);
                    if l_priv_cnt is not null then
                      for i in 1 .. l_priv_cnt loop
                         insert into ddl_detail (id, line, text) values
                             (ddl_seq.currval, i, l_privs(i) || ' ' || l_object);
                      end loop;
                    else
                         insert into ddl_detail (id, line, text) values
                             (ddl_seq.currval, 1, 'ALL PRIVILEGES' || ' ' || l_object);
                    end if;
                    if l_grantee_cnt is not null then
                      for i in 1 .. l_grantee_cnt loop
                         insert into ddl_detail (id, line, text) values
                             (ddl_seq.currval, i, l_grantee(i));
                      end loop;
                    end if;
           end if;
--exception when others then dbms_output.put_line(l_place || ' ' || sqlerrm);
end;
3 май 06, 19:08    [2626827]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
Victor V
Member

Откуда: Kiev
Сообщений: 372
Таки всё-ещё нужен хелп по аудиту на compile
4 май 06, 12:30    [2629045]     Ответить | Цитировать Сообщить модератору
 Re: Audit on procedure  [new]
odev
Member

Откуда:
Сообщений: 13
Всем привет )

Victor V - посмотри внимательно процу ... тама все есть ...
raw - большое, просто огромадное спасибо, 2-а вечера мне просто спас...

всем удачи )))
20 май 06, 00:00    [2686806]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить