Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запуск процедуры от разных пользователей / 25 сообщений из 25, страница 1 из 1
02.09.2020, 10:54
    #39994709
varlamovvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
Всем привет!
Есть ли возможность через PL/SQL запустить процедуру от имени разных пользователей?
USER нужеи именно тот, который коннектится: select USER from dual;
alter session set CURRENT_SCHEMA = my_new_schema; не годится
Видится вариант запуска экстернал джоба, где вызывается sqlplus.
Но может быть есть более простой вариант ( через DBMS_SCHEDULER, например ).
...
Рейтинг: 0 / 0
02.09.2020, 11:29
    #39994717
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
varlamovvp

alter session set CURRENT_SCHEMA = my_new_schema; не годится


Для грамотного совета нужно понять, почему этот вариант не годится, и зачем вообще менять текущую схему.
...
Рейтинг: 0 / 0
02.09.2020, 11:34
    #39994718
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
Почему не годится -- понятно: смена схема не означает смены привилегий

Запускать -- ну, как и придумал, через DBMS_SCHEDULER с правами CREATE ANY JOB или по-старинке через dbms_ijob (но тут права нужны тоже некислые)
...
Рейтинг: 0 / 0
02.09.2020, 11:45
    #39994726
varlamovvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
dmdmdm,

необходимо потестить код, где внутри вызывается USER
...
Рейтинг: 0 / 0
02.09.2020, 11:47
    #39994730
varlamovvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
Вячеслав Любомудров,

пробовал создать JOB в другой схеме. Почему-то при запуске Джоб запускался от имени создателя.
...
Рейтинг: 0 / 0
02.09.2020, 11:58
    #39994738
varlamovvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
вот пример теста. может что не так делаю
Код: plsql
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.
drop table tTestUser;
create table tTestUser ( user_name varchar2(100), context_user_name varchar2(100), dt DATE default sysdate ); 
create or replace procedure pTestUser
is
  pragma autonomous_transaction;
  u1 varchar2(100); u2 varchar2(100);
begin
  u1 := sys_context('userenv','session_user');
  select user into u2 from dual;
  insert into tTestUser ( user_name, context_user_name ) values ( u2, u1 );
  commit;
end;
GRANT execute on pTestUser to public;
grant all on tTestUser to public;


DECLARE
  l_user     VARCHAR2(30) := upper('LoadTest0');
BEGIN
  DBMS_SCHEDULER.create_job(
    job_name   => l_user || '.' || DBMS_SCHEDULER.generate_job_name,
    job_type   => 'STORED_PROCEDURE',
    job_action => 'VV.pTestUser',
    enabled    => TRUE,
    auto_drop  => TRUE
  );
END;
/
...
Рейтинг: 0 / 0
02.09.2020, 12:02
    #39994739
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
Может быть создать синоним в схеме пользователя?
...
Рейтинг: 0 / 0
02.09.2020, 12:19
    #39994744
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
Вячеслав Любомудров
или по-старинке через dbms_ijob (но тут права нужны тоже некислые)
Ещё где-то в 10.2 эта security hole была закрыта.
...
Рейтинг: 0 / 0
02.09.2020, 12:41
    #39994752
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
varlamovvp
dmdmdm,

необходимо потестить код, где внутри вызывается USER


1) выпросить пароль
2) если там простенький селект
на время тестирования заменить USER на константу/переменную/ф-цию
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare
 user varchar2(20) :='Stax'; 
 u varchar2(20);
begin
 u:=user;
 dbms_output.put_line(':= '||u);
 select user into u from dual;
 dbms_output.put_line('into '||u);
 select user into u from dual where user='Stax';
 dbms_output.put_line('where '||u);
end;  
SQL> /
:= Stax
into Stax
where Stax

PL/SQL procedure successfully completed.




.....
stax
...
Рейтинг: 0 / 0
02.09.2020, 12:44
    #39994753
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
Elic
Вячеслав Любомудров
или по-старинке через dbms_ijob (но тут права нужны тоже некислые)
Ещё где-то в 10.2 эта security hole была закрыта.
А это была дыра? Я думал, что так было задумано

По теме -- возможно, самое простое создать (и затем выполнить) процедуру в нужной схеме (с правами DEFINER) в которой вызывать создание задания :-)
...
Рейтинг: 0 / 0
02.09.2020, 12:46
    #39994755
varlamovvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
Stax,

спасибо! кода слишком много, поэтому заменить не получится. Но, идея появилась, ага: создать в схеме функцию USER ( навряд ли SYS.user написано хоть где-то :)
...
Рейтинг: 0 / 0
02.09.2020, 12:54
    #39994760
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
varlamovvp

ага: создать в схеме функцию USER


имхо, не пустит

зы
не забудте об user во вюшках

.....
stax
...
Рейтинг: 0 / 0
02.09.2020, 13:15
    #39994769
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
Вячеслав Любомудров
А это была дыра? Я думал, что так было задумано
10333182
...
Рейтинг: 0 / 0
02.09.2020, 13:32
    #39994777
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
varlamovvp

необходимо потестить код, где внутри вызывается USER


Т.е. ты доке не веришь. Ладно. Но похоже тебе недостаточно проверить вызов процедуры случайно выбранным пользователем - проверить всех поголовно .

SY.
...
Рейтинг: 0 / 0
02.09.2020, 14:14
    #39994789
varlamovvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
SY,

не то чтобы я доке не верю. Но не на 100% если честно

Ситуация такая: есть написанная не Ораклом, но на Оракле система, толстый клиент, где в зависимости от юзера, который коннектится, в таблицы залетают данные, и некоторые поля ( и где-то логика ) зависит от настроек пользователя в системе ( которые завязаны на Ораклового юзера, есть таблички специальные с настройками ). Мне надо проверить, как себя будет система вести при одновременной работе многих пользователей. Если я запущу несколько сессий от одного пользователя, то я , возможно, получу не совсем правильную картину нагрузки. Я хочу понять, смогу ли я смоделировать эту нагрузку через PL/SQL (мне так удобнее) или нет. Пользователей я насоздаю сам, поэтому пароли я буду знать все.
...
Рейтинг: 0 / 0
02.09.2020, 14:17
    #39994791
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
varlamovvpЯ хочу понять, смогу ли я смоделировать эту нагрузку через PL/SQL (мне так удобнее) или нет.

Сможешь. Просто запускай PL/SQL блок от разных пользователей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.09.2020, 17:08
    #39994921
varlamovvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
Dimitry Sibiryakov

varlamovvpЯ хочу понять, смогу ли я смоделировать эту нагрузку через PL/SQL (мне так удобнее) или нет.

Сможешь. Просто запускай PL/SQL блок от разных пользователей.

Вот я и ищу варианты как это сделать :)
...
Рейтинг: 0 / 0
02.09.2020, 17:13
    #39994924
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
varlamovvp

Вот я и ищу варианты как это сделать :)

sqlplus имя_пользователя/пароль

чисто из СУБД, наверное можно попытаться наплодить db link'ов сам на себя
(нужно проверять)

и еще 100500 вариантов
...
Рейтинг: 0 / 0
09.09.2020, 12:38
    #39996880
varlamovvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
Сделал так:

Создал пакет в основной схеме, в котором есть процедура создания джобов( если надо несколько потоков ), которые сразу же запускаются на выполнение один раз. У каждого пользователя в схеме создан 1 джоб (одинаковый с одним и тем же именем), который дергает эту процедуру. В итоге джобы запускаются от имени юзера, кто их создал ( а создал их джоб в схеме юзера ). Ну а дальше уже эти джобы выполняют ( в цикле или разово ) тестовую процедуру. Процесс стартует так: цикл пробегатеся по всем пользователям (фильтр по имени) и запускает их джобы. Меняя 1 процедуру в пакете основного юзера можно запускать разные скрипты параллельно от разных пользователей.
...
Рейтинг: 0 / 0
09.09.2020, 16:52
    #39996992
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
varlamovvp
Меняя 1 процедуру в пакете основного юзера можно запускать разные скрипты параллельно от разных пользователей.

Не упомянут существенный аспект, без которого "от имени" работать не будет.
...
Рейтинг: 0 / 0
09.09.2020, 16:57
    #39996994
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
andrey_anonymous
varlamovvp
Меняя 1 процедуру в пакете основного юзера можно запускать разные скрипты параллельно от разных пользователей.

Не упомянут существенный аспект, без которого "от имени" работать не будет.

authid current_user ?
...
Рейтинг: 0 / 0
09.09.2020, 17:11
    #39996995
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
andrey_anonymous
varlamovvp
Меняя 1 процедуру в пакете основного юзера можно запускать разные скрипты параллельно от разных пользователей.

Не упомянут существенный аспект, без которого "от имени" работать не будет.


ему надо шоб user возвращала нужное значение,
из под джоба вернет job owner

права наверное следующий нюанс

.....
stax
...
Рейтинг: 0 / 0
09.09.2020, 17:31
    #39997000
varlamovvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
Stax,

даже не job_owner, a job_creator.
Но я на всякий случай джобы в схемах юзеров тоже создаю.
...
Рейтинг: 0 / 0
10.09.2020, 08:55
    #39997155
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
varlamovvp
Stax,

даже не job_owner, a job_creator.
Но я на всякий случай джобы в схемах юзеров тоже создаю.


да-да LOG_USER
лень было проверять, а память сбойнула

зы
если чесно, я их (owner, creator.) для джобов слабо различаю

интересно, если в словаре поменять LOG_USER на нужный, работа джоба нарушиться?


.....
stax
...
Рейтинг: 0 / 0
10.09.2020, 09:20
    #39997162
dba123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запуск процедуры от разных пользователей
varlamovvp Ну а дальше уже эти джобы выполняют ( в цикле или разово ) тестовую процедуру
Еще интересно как он организовал возврат и обработку ошибок.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запуск процедуры от разных пользователей / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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