powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запуск последовательности от другого юзера
9 сообщений из 9, страница 1 из 1
Запуск последовательности от другого юзера
    #32174093
mms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mms
Гость
Всем привет.

Вот обнаружил такую штуку.
В схеме А есть последовательность

даем юзеру В права на работу с последовательностью А.S (через грант)

Соединяемся под В и запускаем SELECT A.S.nextval FROM dual

ВСЕ ОК

Помещаем это в процедуру хранящуюся в схеме B вываливает ошибку.

Помогает только если написать этот селект в процедуре через динамический SQL.

Это решается только так?

PS:Вариант через public synonym работает, но по некоторым соображениям не подходит.
...
Рейтинг: 0 / 0
Запуск последовательности от другого юзера
    #32174163
Fedorchenko Aleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то странное ты говоришь :(
Заходим под system и делаем
Код: plaintext
1.
2.
3.
4.
5.
6.
create sequence seq_test
start with  1 
increment by  1 
nocache
nocycle;

grant select on seq_test to scott;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL*Plus: Release  9 . 2 . 0 . 1 . 0  - Production on Mon Jun  2   13 : 52 : 01   2003 

Copyright (c)  1982 ,  2002 , Oracle Corporation.  All rights reserved.


Connected.

Sequence created.

Grant succeeded.


Теперь соединяемся как scott и делаем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
set serveroutput on;

declare 
  n_cur_seq numeric default - 1 ;
begin
  select system.seq_test.nextval 
  into n_cur_seq
  from dual;
  
  dbms_output.put_line(to_char(n_cur_seq));
end;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL*Plus: Release  9 . 2 . 0 . 1 . 0  - Production on Mon Jun  2   13 : 53 : 42   2003 

Copyright (c)  1982 ,  2002 , Oracle Corporation.  All rights reserved.


Connected.

 1 

PL/SQL procedure successfully completed.


Все работает!
Может все же с грантом было что-то не то :)
...
Рейтинг: 0 / 0
Запуск последовательности от другого юзера
    #32174165
Stored procedures with AUTHID DEFINER (which is the default) ignore role based privileges. You need to grant privilege directly.

Artist formerly known as SY
...
Рейтинг: 0 / 0
Запуск последовательности от другого юзера
    #32174203
Fedorchenko Aleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Artist formerly known as SY

Да, ты прав. Вот цитата из доки:
Код: plaintext
1.
2.
Oracle9i Database Concepts
Release  1  ( 9 . 0 . 1 )
Part Number A88856- 02 

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
PL/SQL Blocks and Roles 
The use of roles in a PL/SQL block depends on whether it is an anonymous block or a named block (stored procedure, function, or trigger), and whether it executes with definer rights or invoker rights. 

Named Blocks with Definer Rights 
All roles are disabled in any named PL/SQL block (stored procedure, function, or trigger) that executes with definer rights. Roles are not used for privilege checking and you cannot set roles within a definer-rights procedure. 

The SESSION_ROLES view shows all roles that are currently enabled. If a named PL/SQL block that executes with definer rights queries SESSION_ROLES, the query does not return any rows. 

Anonymous Blocks with Invoker Rights 
Named PL/SQL blocks that execute with invoker rights and anonymous PL/SQL blocks are executed based on privileges granted through enabled roles. Current roles are used for privilege checking within an invoker-rights PL/SQL block, and you can use dynamic SQL to set a role in the session.


Только mms ничего не говорил про грант через роль :)
Было сказано лишь следующее:
В схеме А есть последовательность

даем юзеру В права на работу с последовательностью А.S (через грант)
...
Рейтинг: 0 / 0
Запуск последовательности от другого юзера
    #32174240
mms ничего не говорил про грант через роль because he most likely stepped on эти грабли for the first time (most people do) without realizing it.

Artist formerly known as SY
...
Рейтинг: 0 / 0
Запуск последовательности от другого юзера
    #32174464
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mms ничего не говорил про грант через роль because he most likely stepped on эти грабли for the first time (most people do) without realizing it.
Классно звучит

2 SY Пора бы уже собрать словарь и автоматизировать процесс ответов ... :))
Без обид ...
...
Рейтинг: 0 / 0
Запуск последовательности от другого юзера
    #32174495
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to LG

Ну что вы:-) По моему прикольно звучит. Ссылки на цитаты через копи пейст делают и другие "иностранцы", которые например на латиннице пишут. У тех кто пишет на русском это не заметно, но копи пейст они тоже используют.
...
Рейтинг: 0 / 0
Запуск последовательности от другого юзера
    #32174886
mms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mms
Гость
И снова здравствуйте.

С грантами все впорядке (я их даю напрямую). И когда мы соединямся под други юзером B, то все селекты ваполняются:

SELECT A.S.nextval FROM dual

Ок

Но когда мы это помещаем в хранимую процедуру, то Оракл ее даже не компилирует, а компилит только когда помещаем в динамический sql.
Причем вываливается ошибка синтаксиса, а не object not found.
...
Рейтинг: 0 / 0
Запуск последовательности от другого юзера
    #32174969
Fedorchenko Aleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mms
Причем вываливается ошибка синтаксиса, а не object not found.
Ладно... Может и так.

Дай пожалуйста скрипты создания второго пользователя с грантами, сиквенса и хранимой процедуры - тогда хоть можно будет повторить твою проблему.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запуск последовательности от другого юзера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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