как отправить параметры для запуска в Oracle - PullRequest
4 голосов
/ 13 декабря 2011

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

Ответы [ 2 ]

5 голосов
/ 13 декабря 2011

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

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

1 голос
/ 15 декабря 2011

Вы можете использовать прокси-аутентификацию для идентификации пользователей даже с помощью ConnectionPool.

Пример:

me@XE> @man proxy

[ P R O X Y A U T H E N T I C A T I O N ]

drop user application_user
drop user end_user


-- let's create the application user which all users
-- need to connect through.
-- This user is meant as the middle-tier-user in a
-- multi-tier setup.
create user application_user identified by application_user

-- create an end-user
create user end_user identified by end_user
quota unlimited on users

grant create session, create table to end_user

-- this is the clause to grant access to end_user.
alter user end_user grant connect through application_user

-- now, we can connect WITHOUT PASSWORD!
@connect application_user[end_user]/application_user

-- this should display "END_USER"
select user from dual

-- this should display "APPLICATION_USER"
column proxy_user format a30
select sys_context('userenv', 'proxy_user') proxy_user from dual

http://blogs.oracle.com/jheadstart/entry/using_proxy_authentication

...