Форум: "Базы";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
ВнизВопрос к знатокам динамического 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c