Может кто-то объяснить другое поведение одной и той же функции под другим пользователем в оракуле? - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть пакет с именем A и A имеет функцию doSomething ();

пользователь x является владельцем A. пользователь y имеет синоним testSyn, который указывает на xA;

Зарегистрировалсякак x и выполненная функция doSomething () возвращает true, но когда вы вошли в систему как пользователь y и выполнили функцию, подобную testSyn.doSomething (), она возвращает false для того же значения.

Может кто-нибудь объяснить, почему это происходит

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Посмотрите на определение процедуры.Если это что-то вроде PROCEDURE a AUTHID CURRENT_USER, то оно будет выполняться с разрешениями текущего пользователя и разрешением имени .Если в процедуре используются представления, в которых учитываются пользовательские привилегии (например, user_objects), это может объяснить другой результат.


Ответ на комментарий: Вы ошибаетесь.Представьте, что вы пишете процедуру, которая возвращает object_name первой строки из user_objects.Эта процедура принадлежит schema_owner, и schema_invoker имеет разрешение на ее выполнение.Если процедура определена без AUTHID CURRENT_USER, она вернет имя объекта для объекта в схеме schema_owner.Та же процедура с AUTHID CURRENT_USER вернет имя объекта из схемы schema_invoker.Это не имеет ничего общего с привилегиями выполнения.

Я не знаю, что это источник вашей проблемы, но это хороший кандидат, и его легко проверить (просто посмотрите на определение процедуры, найденное в пакетеспецификация).

0 голосов
/ 06 сентября 2011

Вы можете выполнить эту функцию, но у вас могут не быть прав доступа ко всем объектам, на которые ссылается функция.Для начала я бы попытался выяснить, к каким объектам БД обращается ваша функция, и попытаться получить доступ к ним из такого инструмента, как sqlplus, для проверки

...