Buenas,
En realidad me han surgido varias dudas. Tengo un procedimiento dentro de un package:
Código SQL:
Ver originalCREATE OR REPLACE package body SLEG.PQ_Cartas_Mantenimiento
AS
PROCEDURE pr_Verif_Provi_Detalle_Generar
(
pUsername varchar2 := USER
)
AS
-- Variables aquí
BEGIN
-- Proceso aquí (Selects, Inserts, Updates y Deletes)
exception
WHEN others THEN
ROLLBACK;
raise;
END;
END;
Como pueden ver el paquete pertenece al esquema SLEG y las tablas involucradas en el proceso también pertenecen a dicho esquema.
El procedimiento será ejecutado por otro usuario USRSLEG, para ello, se le ha otorgado privilegio de ejecución de package.
Código SQL:
Ver originalGRANT EXECUTE ON SLEG.PQ_Cartas_Mantenimiento TO USRSLEG;
Aquí surge mi primera duda. No ha sido necesario otorgar privilegios de select, insert, update y delete al usuario USRSLEG sobre las tablas involucradas, bastó con el privilegio de ejecución de paquete, esto no es lo que yo me esperaba, ya que suponía que el motor de Oracle iba a exigir los demás privilegios, sin embargo, por seguridad he agregado los privilegios mencionados para que cuando se haga el pase a producción no surgan inconvenientes.
En producción se ha presentado el siguiente error cuando una aplicación ejecuta el procedure (utilizando el usuario USRSLEG)
Código SQL:
Ver originalORA-06550: line 1, COLUMN 12:
PLS-00904: insufficient privilege TO access object SLEG.PQ_CARTAS_MANTENIMIENTO
ORA-06550: line 1, COLUMN 7:
PL/SQL: Statement ignored
De momento no he logrado replicar en desarrollo el problema. Favor su apoyo, no encuentro la fuente del problema.
Muchas gracias, saludos cordiales.