Регистрация доступа к хранимой процедуре в Oracle - PullRequest
0 голосов
/ 17 ноября 2011

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

ДляНапример, если я хочу вызвать процедуру с именем get_movie (id), которая будет возвращать строку из таблицы фильмов на основе идентификатора, мне нужно будет сделать что-то вроде этого get_movie (имя пользователя, домен, ip, id), чтобы процедура могла войтипользователь / домен / ip веб-пользователя, который инициировал вызов процедуры.

Кажется, что должен быть лучший способ, но мои знания об Oracle ограничены.

Ответы [ 3 ]

3 голосов
/ 17 ноября 2011

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

например:

CREATE OR REPLACE PROCEDURE set_context
(
    v_userid IN VARCHAR2,
    v_domain IN VARCHAR2,
    v_ip IN VARCHAR2,
    v_id IN VARCHAR2
)
AS
BEGIN 
    DBMS_SESSION.SET_CONTEXT('SESSIONCONTEXT', 'username', v_userid); 
    DBMS_SESSION.SET_CONTEXT('SESSIONCONTEXT', 'domain', v_domain); 
    DBMS_SESSION.SET_CONTEXT('SESSIONCONTEXT', 'ip', v_ip); 
    DBMS_SESSION.SET_CONTEXT('SESSIONCONTEXT', 'id', v_id); 
END;

и запросить значения:

SELECT SYS_CONTEXT('SESSIONCONTEXT', 'username') FROM dual; 

см .: http://download.oracle.com/docs/cd/E14072_01/server.112/e10592/functions182.htm и

Есть ли способ передать контекст приложения в соединение с БД на серверах БД, отличных от Sybase (аналогично set_appcontext в Sybase)?

0 голосов
/ 17 ноября 2011

Другой вариант - открыть пользователя-оракула для каждого «конечного пользователя» и предоставить им доступ к схеме, в которой находится бизнес-логика. Используйте общедоступные синонимы.

0 голосов
/ 17 ноября 2011

Вероятно, это невозможно сделать. (предупреждает о многих допущениях)

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

Именно поэтому эти значения должны быть переданы, потому что приложение имеет связь с этими пользователями и может знать их ip. Тем не менее, база данных не так, как она (надеюсь) отделена от пользователей, подключающихся напрямую.

...