Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_session, привелегии / 7 сообщений из 7, страница 1 из 1
24.09.2004, 07:53
    #32709606
use-se
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_session, привелегии
Проблема в следующем. Не дает выполнить dbms_session.set_context, нет привелегий. Смотрим RTFM: авторThis package runs with the privileges of the calling user, rather than the package owner SYS. Ладно идем по ссылке на ошибку (строка 78), открываем сам пакет, а он /*wraped*/.
Подскажите пожалуйста какие привелегии необходимы....(поделитесь рыбой)
Если кто знает методу, как вообще вычислять наличие нужных привелегий в подобных ситуациях........ (поделитесь удочкой).
Там же в пакете много всего интересного........... set role, например.
Oracle version: 9.2.0.4
Спасибо.
...
Рейтинг: 0 / 0
24.09.2004, 08:01
    #32709613
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_session, привелегии
тот же авторThis procedure must be invoked directly or indirectly by the trusted package
...
Рейтинг: 0 / 0
24.09.2004, 08:14
    #32709620
use-se
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_session, привелегии
Спасибо. Не обратил внимания на фразу. Я вызов обернул в авнономную процедуру. Выходит по разному механизм Оракла работает с пакетными и автономными процедурами.
...
Рейтинг: 0 / 0
24.09.2004, 08:17
    #32709623
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_session, привелегии
Есть такое понятие - доверенный пакет
Только он один может изменять состояние контекста
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
tst> connect system/manager@tst
Connected.
tst> grant create any context to u1;

Grant succeeded.

tst> connect u1/u1@tst
Connected.
tst> create package pkg1 as
   2   procedure assign(name varchar2, value varchar2);
   3   end;
   4   /

Package created.

tst> create package body pkg1 as
   2   procedure assign(name varchar2, value varchar2) is
   3   begin
   4   dbms_session.set_context('CTX', name, value);
   5   end;
   6   end;
   7   /

Package body created.

tst> create package pkg2 as
   2   procedure assign(name varchar2, value varchar2);
   3   end;
   4   /

Package created.

tst> create package body pkg2 as
   2   procedure assign(name varchar2, value varchar2) is
   3   begin
   4   dbms_session.set_context('CTX', name, value);
   5   end;
   6   end;
   7   /

Package body created.

tst> create context ctx using pkg2;  -- Доверенный пакет pkg2 

Context created.

tst> exec pkg2.assign('2', '22');

PL/SQL procedure successfully completed.

tst> exec pkg1.assign('1', '11');
BEGIN pkg1.assign('1', '11'); END;

*
ERROR at line  1 :
ORA- 01031 : insufficient privileges
ORA- 06512 : at "SYS.DBMS_SESSION", line  78 
ORA- 06512 : at "U1.PKG1", line  4 
ORA- 06512 : at line  1 


tst> select namespace, attribute, substr(value,  1 ,  10 ) from session_context;

NAMESPACE                      ATTRIBUTE                      SUBSTR(VAL
 ------------------------------ ------------------------------ ---------- 
CTX                             2                                22 
...
Рейтинг: 0 / 0
24.09.2004, 08:46
    #32709647
use-se
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_session, привелегии
Спасибо за детальный пример. Нашел в своих мозгах еще одну проблему/ошибку. Я почему то полагал, что в спецификации пакета обязательно нужно указывать переменную пакета с таким же именем (ниже в коде покажу), из Вашего примера следует, что это не так. Можете объяснить физический смысл размещения переменных контекста в памяти сервера. Например я полагаю, что после инициализации пекета, инициализируется его контекст (в смысле его переменные, константы). Как только мы устанавливаем какую либо переменную через set_context, Оракл дополнительно в области памяти этого пакета размещает еще переменную и доступ к этой переменной по записи осуществляется из этого же пакета (доверенного). По чтению эта переменная становится доступной, глобально, через sys_context(). Я не в чем не заблуждаюсь?
Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or replace package o_context
is
	idrep number;
	procedure set_context(var_name varchar2, var_value varchar2);
end;

create or replace package body o_context
is
	procedure set_context(var_name varchar2, var_value varchar2)
	is
	begin
		dbms_session.set_context('ctx',var_name,var_value);
	end;
end;
...
Рейтинг: 0 / 0
24.09.2004, 09:08
    #32709665
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_session, привелегии
context и переменные пакета - две большие разницы, точнее они полностью независимы.

Например любой, имеющий доступ к пакету, может изменить значение глобальных переменных этого пакета (да и вообще сбросить состояние всех пакетов вызыванных в сессии - см. DBMS_SESSION.RESET_PACKAGE), в контексте - только тот, у кого есть доступ к доверенному пакету

Вообще, как я понимаю, CONTEXT был придуман из соображений безопасности (заполнять его в тригере on logon и использовать в предикатах запросов - предверие FGA)

Кроме того "переменные контекста" можно использовать и в SQL, в отличие от переменных пакета (только в PL/SQL), и вызов функции SYS_CONTEXT не считается вызовом функции, а обрабатывается SQL-машиной, что намного эффективней

И размещаются они не в памяти пакета (которую можно всегда освободить - см.выше), а, видимо, в SGA
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
30.04.2021, 09:10
    #40067465
Aviff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dbms_session, привелегии
Спасибо, пришлось использовать контекст, а я все не мог понять почему оно не дает его установить)
Вы мне Очень помогли!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dbms_session, привелегии / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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