powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / системныйтриггер
7 сообщений из 7, страница 1 из 1
системныйтриггер
    #32127726
luxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никто так случайно не писал системные триггеры на logon (нужен триггер , который включал бы трассировку на сессию конкретного пользователя когда этот пользователь соединяется с базой).
...
Рейтинг: 0 / 0
системныйтриггер
    #32127761
gminter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE OR REPLACE TRIGGER AfterConnect after logon on database
declare
 s_rec sys.v_$session%rowtype;
 ip_address varchar2( 64 );
 ip_con utl_tcp.connection;
 semafor varchar2( 64 );
 n number;
 s varchar( 512 );
 b boolean;
begin
  select * into s_rec from sys.v_$session t 
      where t.audsid = sys_context('USERENV', 'SESSIONID');     
  if not ((s_rec.username is null) or (s_rec.username = '[color=red]GMINTER[/color]')
  begin
    ip_address := sys_context('USERENV', 'IP_ADDRESS');     
    ip_con := utl_tcp.open_connection(ip_address,  8050 );
    n := utl_tcp.available(ip_con,  0 );
    semafor := utl_tcp.get_text(ip_con, n);
    utl_tcp.close_connection(ip_con);
  exception when others then
  semafor := 'NONE';
  end;
   if semafor <> 'PASSWORD' then
   raise_application_error (- 20000 , 'Вы запустили не ту программу :)');
   end if;  
  end if;   
end;


Смысл примера в чем - у слегка продвинутого пользователя иногда возникает желание полазить со своими правами по базе при помощи SQL-навигатора или чего-то там еще, поэтому после коннекта мы по TCP спрашиваем у клиента-программы ПАРОЛЬ, и если ответ нам не нравится, то вместо коннекта юзер получает Exception )
...
Рейтинг: 0 / 0
системныйтриггер
    #32127764
luxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это , колнечно тоже хорошо , но начальные условия несколько другие:
нужно именно чтобы включалась трассировка .
Пока реализовано след-м образом:
написана процедура, которая устанавливает трассировку:
--------------------------------------------------------------------------
CREATE OR REPLACE procedure logon_proc
authid current_user is
begin
sys.dbms_session.set_sql_trace (true);
end logon_proc;
выполняется - проверено.
есть триггер , который это процедуру выполняет:

CREATE OR REPLACE TRIGGER AfterConnect after logon on database
BEGIN
<>.logon_proc;
END;

трэйс файл формируется (!) , но со след-ми сообщениями:

*** SESSION ID:(273.2707) 2003-03-26 20:27:23.430
Skipped error 604 during the execution of ROMAN.LOGONTRIGGER
*** 2003-03-26 20:27:23.432
ksedmp: internal or fatal error
ORA-00604: error occurred at recursive SQL level 1
ORA-01031: insufficient privileges
ORA-06512: at line 8
Skipped error 604 during the execution of ROMAN.LOGONTRIGGER_LOG
*** 2003-03-26 20:27:23.447
ksedmp: internal or fatal error
ORA-00604: error occurred at recursive SQL level 1
ORA-01031: insufficient privileges
ORA-06512: at line 8
Skipped error 604 during the execution of ROMAN.LOGONIN
*** 2003-03-26 20:27:23.449
ksedmp: internal or fatal error
ORA-00604: error occurred at recursive SQL level 1
ORA-01031: insufficient privileges
ORA-06512: at "SYS.DBMS_SESSION", line 86
ORA-06512: at "ROMAN.LOGON_PROC", line 4
ORA-06512: at line 2
...
Рейтинг: 0 / 0
системныйтриггер
    #32127767
gminter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может, попробовать так?

CREATE OR REPLACE procedure logon_proc
authid DEFINER is
.....
...
Рейтинг: 0 / 0
системныйтриггер
    #32127775
luxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что то вроде работает ,
подробности завтра :)
...
Рейтинг: 0 / 0
системныйтриггер
    #32128202
EthernalWonderer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gminter: классно придумано! А нельзя ли взглянуть на ответную часть - которая на клиенте отвечает на Ваш TCP-запрос?
...
Рейтинг: 0 / 0
системныйтриггер
    #32129517
Sergis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Po mojemu luche i legche ispolzovatj roli s parolami:
CREATE ROLE MY_ROLE IDENTIFIED BY AA;
GRANT MY_ROLE TO MY_USER;
ALTER USER MY_USER DEFAULT ROLE ROLE1,ROLE2,ROLE3 <-novaja rol (MY_ROLE) ne ukazivajetsa.

V klientskoj chasti, pered tem kak choto delatj vkluchajem etu rol:
set role MY_ROLE identified by AA;
Tak kak juzverj neznajet nash parol, to nemozhet nichego delatj!

p.s. ideja ot gminter - interesnaja
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / системныйтриггер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]