Прикрепление идентификатора к сеансу Oracle - PullRequest
1 голос
/ 02 апреля 2009

Мое Java-приложение использует сеансы БД через Hibernate.

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

Другими словами, мой триггер делает что-то вроде этого:

if(user is an application)
   allow update
else
   raise oracle error
end if

Кто-нибудь знает лучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2009

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

http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_10004.htm#sthref9521

1 голос
/ 02 апреля 2009

Внутри вашего триггера напишите следующее:

select 
  terminal, 
  username, 
  osuser, 
  program 
into 
  svTerminal, svUserName, svOSUser, svProgram

from
  v$session 
where 
  audsid=SYS_CONTEXT('USERENV','SESSIONID');

if svProgram <> 'MyApplicationTitle' then
  raise oracle error
end if;

Вы также можете увидеть, какие другие переменные доступны, если выполнить этот запрос:

select * form v$session;

если триггер не компилируется, вы должны предоставить разрешение на выбор пользователю, у которого есть триггер для v $ session. Вы делаете это, выполняя следующее как system:

grant select on sys.v_$session to <username>;

Обновление: подчеркивание в v_ $ session не является ошибкой. Это реальное имя внутри sys, где можно дать грант. V $ session - это псевдоним, который вы можете использовать в запросах.

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