Question

I have a package called A and A has function doSomething();

user x is the owner of A. user y has a synonym testSyn which points to x.A;

Logged in as x and executed function doSomething() is returning true but When logged in as user y and executed the function like testSyn.doSomething(), it returns false for the same value.

Could someone please explain why this happens?

Was it helpful?

Solution

Take a look at the procedure's definition. If it's something like PROCEDURE a AUTHID CURRENT_USER then it will execute with the current user's permissions and name resolution. If the procedure uses views that take user privileges into account (such as user_objects), that could explain the different result.


Comment response: You're making the wrong distinction. Imagine that you write a procedure that returns the object_name of the first row from user_objects. That procedure is owned by schema_owner and schema_invoker has permission to execute it. If the procedure is defined without AUTHID CURRENT_USER, it will return an object name for an object in the schema_owner schema. The same procedure with AUTHID CURRENT_USER will return an object name from the schema_invoker schema instead. This has nothing to do with execution privileges.

I don't know that this is the source of your problem, but it's a good candidate and it's easy to check (just look at the procedure definition found in the package specification).

OTHER TIPS

You're able to execute that function but you might not have access rights to all the objects the function references. For starters, I'd try to figure out which DB objects your function accesses and try to access those from a tool like sqlplus to verify

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top