LINUX.ORG.RU

Grant access to stored procedure.

 ,


0

3

Позволю себе лоругл. Скажите, можно ли в Oracle SQL создать хранимую процедуру и выдать на неё доступ пользователю, которого ещё не существует, но который будет создан позже?

P.S.: Вообще говоря, сабж проистекает костылем из решения странной задачи. В JUnit тестах должны были запускаться несколько SQL скриптов. JDBC, к сожалению, (да и вообще никто, вплоть до apache DbUtils) не предоставляет штатных средств для запуска скрипта на исполнение. Выход - читать скрипт построчно и запускать через объект Statement, который благополучно валится при попытке запустить любой запрос с ";" (semi-colon) внутри. Был придуман костыль - при развертывании боевой базы создать несколько ХП для развертывания тестовой базы, далее в JUnit будет создаваться Connection для тестового пользователя, который бы уже посредством созданных процедур смог развернуть тестовую базу, после чего за собой почистить. Собственно, тут и возник сабжевый вопрос.

P.P.S.: Да, да, это не прерогатива JUnit и я знаю про Mocking. Нужно решение именно сабжа.

Заранее премного благодарен.

★★★★

А вот если дать доступ к этим тестовым ХП всем пользователям — это не решит проблему? Зачем обязательно одному грантить, это же всё равно тестовая шняга.

Apple-ch ★★
()

Какая душещипательная история!

Может тебе лучше рассказать, как найти в строке символ ";" и, если этот символ нашелся, сделать из одной строки две, или несколько?

anonymous
()
Ответ на: комментарий от Apple-ch

А вот если дать доступ к этим тестовым ХП всем пользователям — это не решит проблему? Зачем обязательно одному грантить, это же всё равно тестовая шняга.

Да он, вообще, какой-то зашифрованный весь! Непонятно чего хочет, непонятно под какими веществами генерирует идеи...

Может, у него, вообще, все возможные и невозможные пользователи лежат в одной какой-нибудь таблице, типа ('user','password','role','description')?

Или он, как взрослый богатый буратинка, каждому пользователю хочет выдать по схеме и «пусть никто не уёдет обиженным»?

anonymous
()

Можно дать привилегию на выполнение процедуры не пользователю, а роли. Соответственно потом создавать пользователя и давать ему эту роль.

Ja-Ja-Hey-Ho ★★★★★
()
Ответ на: комментарий от anonymous

Может тебе лучше рассказать, как найти в строке символ ";" и, если этот символ нашелся, сделать из одной строки две, или несколько?

Рассказывай. Вот тебе строка, если чо:

declare var1 number(10); begin select count(*) into var1 from all_objects where name not like '%;%'; if var1 > 0 then null; else null; end if; end;

:-)

no-dashi ★★★★★
()

Кстати да, пейтоновские биндинги cx-oracle тоже не поддерживают точку с запятой в запросах.

Что за фигня-то, с чем это связано?

melkor217 ★★★★★
()
Ответ на: комментарий от melkor217

Что за фигня-то, с чем это связано?

С безопасностью.

power
()

Короче говоря, мопед не мой, задача стоит конкретная и способ решения выбирать не могу. В прочем сабж решил иначе. Коллаборацией Statement'ов и CallableStatement'ов в методе построчного разбора скрипта. Всем спасибо. SOLVED.

Insomnium ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.