Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.07;
Скачать: CL | DM;

Вниз

Вопрос к знатокам динамического SQL   Найти похожие ветки 

 
ilandrei ©   (2003-03-18 15:14) [0]

Народ, помогите разобраться!
Есть у меня вот такая процедура

create or replace procedure SQLCursor(curss out TypeDef.c_type, vSQL Varchar2) is
begin
OPEN curss FOR vSQL;
end;

Задача этой процедуры - вернуть ссылку на курсор.
Так вот, если я в качестве параметра передаю запрос, в котором участвуют таблицы моей схемы, то все ОК, если же в запрос входит таблица чужой схемы, то, несмотря на наличие синонима и прав доступа, процедура генерит ошибку ORA-00942 (Table or view doesn"t exist)
Тот же самый запрос в статическом SQL выполняется нормально.
Может быть, кто-то знает, где тут собака порылась?


 
Val ©   (2003-03-18 15:22) [1]

а если напрямую указывать имя_схемы.имя_таблицы?


 
ilandrei ©   (2003-03-18 15:30) [2]

Не помогает!


 
Val ©   (2003-03-18 15:45) [3]

хм. может быть ругань идет на vSQL? именно vSQL воспринимается как таблица или view?может использовать следующую конструкцию?
execute immediate "OPEN curss FOR "||vSQL;


 
ilandrei ©   (2003-03-18 15:52) [4]

To Val:

Да нет, если бы ругань была из-за переменной, то она бы не зависела от ее содержимого.
Я попробовал так, как Вы предлагаете, и вот теперь-то ругань идет как раз независимо от параметров: invalid SQL statement



 
Val ©   (2003-03-18 17:07) [5]

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


 
ilandrei ©   (2003-03-18 18:45) [6]

Отвечаю себе сам :)
Для того, чтобы это работало, нужно, чтобы GRANT на SELECT был передан непосредственно, а не через роль. Полдня угробил, пока разобрался...


 
ilandrei ©   (2003-03-18 18:53) [7]

Вдогонку - если кому-то еще будет интересна эта тема.
Чтобы не грантовать отдельно каждую таблицу, сойдет команда grant all privileges to <имя пользователя>. Еще один вариант - можно поместить процедуру, открывающую этот проблемный курсор, в схему SYS. Так тоже работает - проверено!


 
Val ©   (2003-03-18 18:57) [8]

:) рад за вас, согласитесь, фраза несмотря на наличие синонима и прав доступа об этом не упоминает :)


 
Val ©   (2003-03-18 19:56) [9]

>ilandrei © (18.03.03 18:53)
сойдет команда grant all privileges...
но, не будет ли это разрушением схемы безопасности?


 
ilandrei ©   (2003-03-18 20:24) [10]

To Val:
> :) рад за вас, согласитесь, фраза несмотря на наличие синонима и прав доступа об этом не упоминает :)

Нет, не упоминает. Поскольку все необходимые права доступа были изначально переданы через роль - для статического SQL и PL/SQL достаточно, а вот для динамического, как выяснилось, нет!
А про схему безопасности - тут уж каждый для себя волен решать, что ему подходит, что нет - я лишь поспешил поделиться с публикой найденным решением собственной проблемы :)



Страницы: 1 вся ветка

Текущий архив: 2003.04.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-19616
imitator
2003-03-25 11:06
2003.04.07
BitMap Bright


1-19647
Opera
2003-03-25 19:16
2003.04.07
Определение


14-19870
SiJack
2003-03-21 16:11
2003.04.07
Люди нужен ли Java


14-19754
Lola
2003-03-22 10:46
2003.04.07
Фоторобот


1-19594
dronas555
2003-03-28 17:17
2003.04.07
Добавление информации в файл.