¿Alguien puede explicar el comportamiento diferente de la misma función bajo el usuario diferente en Oracle?

StackOverflow https://stackoverflow.com/questions/7318704

  •  27-10-2019
  •  | 
  •  

Pregunta

Tengo un paquete llamado A y A tiene función Dosomething ();

El usuario X es el propietario de A. User Y tiene un sinónimo de testsyn que apunta a Xa;

Iniciado sesión como x y la función ejecutada dosomething () devuelve verdadero pero cuando se registra como usuario y y ejecutó la función como testSyn.Dosomething (), devuelve falso para el mismo valor.

¿Alguien podría explicar por qué sucede esto?

¿Fue útil?

Solución

Eche un vistazo a la definición del procedimiento. Si es algo como PROCEDURE a AUTHID CURRENT_USER Luego se ejecutará con el permisos de usuario actuales y resolución de nombres. Si el procedimiento utiliza vistas que tienen en cuenta los privilegios de los usuarios (como user_objects), eso podría explicar el resultado diferente.


Respuesta de comentarios: estás haciendo la distinción incorrecta. Imagine que escribe un procedimiento que devuelva el object_name de la primera fila de user_objects. Ese procedimiento es propiedad de schema_owner y schema_invoker tiene permiso para ejecutarlo. Si el procedimiento se define sin AUTHID CURRENT_USER, devolverá un nombre de objeto para un objeto en el schema_owner esquema. El mismo procedimiento con AUTHID CURRENT_USER devolverá un nombre de objeto del schema_invoker esquema en su lugar. Esto no tiene nada que ver con los privilegios de ejecución.

No sé si esta es la fuente de su problema, pero es un buen candidato y es fácil de verificar (solo mire la definición del procedimiento que se encuentra en la especificación del paquete).

Otros consejos

Puede ejecutar esa función, pero es posible que no tenga derechos de acceso a todos los objetos de las referencias de la función. Para empezar, intentaría averiguar a qué objetos de DB accede a su función e intentaré acceder a aquellos desde una herramienta como SQLPLUS para verificar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top