Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

[SOLUCIONADO] ORA-06550 PLS-00904 ¿Error de privilegio?

Estas en el tema de ORA-06550 PLS-00904 ¿Error de privilegio? en el foro de Oracle en Foros del Web. Buenas, En realidad me han surgido varias dudas. Tengo un procedimiento dentro de un package: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE OR REPLACE package ...
  #1 (permalink)  
Antiguo 24/02/2015, 17:53
 
Fecha de Ingreso: octubre-2014
Ubicación: Lima
Mensajes: 74
Antigüedad: 10 años, 1 mes
Puntos: 1
ORA-06550 PLS-00904 ¿Error de privilegio?

Buenas,
En realidad me han surgido varias dudas. Tengo un procedimiento dentro de un package:

Código SQL:
Ver original
  1. CREATE OR REPLACE package body SLEG.PQ_Cartas_Mantenimiento
  2. AS
  3.     PROCEDURE pr_Verif_Provi_Detalle_Generar
  4.     (
  5.         pUsername varchar2 := USER
  6.     )
  7.     AS
  8.         -- Variables aquí
  9.     BEGIN
  10.         -- Proceso aquí (Selects, Inserts, Updates y Deletes)
  11.     exception
  12.         WHEN others THEN
  13.             ROLLBACK;
  14.             raise;
  15.     END;
  16. 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 original
  1. GRANT 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 original
  1. ORA-06550: line 1, COLUMN 12:
  2. PLS-00904: insufficient privilege TO access object SLEG.PQ_CARTAS_MANTENIMIENTO
  3. ORA-06550: line 1, COLUMN 7:
  4. 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.
  #2 (permalink)  
Antiguo 25/02/2015, 08:02
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: ORA-06550 PLS-00904 ¿Error de privilegio?

Según lo que dices en pruebas funcionó sin problemas y es en producción donde muestra el error?

Los privilegios los ejecutaste tu o fue tarea de un dba?

Para validar los permisos consulta la vista dba_tab_privs

Código SQL:
Ver original
  1. SELECT *FROM dba_tab_privs WHERE owner='SLEG';

Asegurate que salga el permiso de execute al esquema USRSLEG

Saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 25/02/2015, 08:53
 
Fecha de Ingreso: octubre-2014
Ubicación: Lima
Mensajes: 74
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: ORA-06550 PLS-00904 ¿Error de privilegio?

Hola huesos52,

El error se muestra en el ambiente de producción al ejecutar el procedure.
Los privilegios son ejecutados por un DBA pero yo le envío los grants correspondientes:

Código SQL:
Ver original
  1. -- grant execute package
  2. GRANT EXECUTE ON SLEG.PQ_Cartas_Util  TO USRSLEG;
  3. GRANT EXECUTE ON SLEG.PQ_Cartas_Consulta  TO USRSLEG;
  4. GRANT EXECUTE ON SLEG.PQ_Cartas_Mantenimiento  TO USRSLEG;
  5.  
  6. -- grant select on sequence
  7. GRANT SELECT, INSERT, UPDATE ON SLEG.LEGAT_CORRELATIVOS  TO USRSLEG;
  8. GRANT SELECT, INSERT, UPDATE ON SLEG.LEGAT_CONFIG_CORRELATIVOS  TO USRSLEG;
  9. GRANT SELECT, INSERT, UPDATE ON SLEG.LEGAT_PROVISION_CARTAS  TO USRSLEG;
  10. GRANT SELECT, INSERT, UPDATE ON SLEG.LEGAT_PROVISION_DETALLE  TO USRSLEG;
  11. GRANT SELECT, INSERT, UPDATE ON SLEG.LEGAT_CARTA_CORRELATIVOS  TO USRSLEG;
  12. GRANT SELECT ON SLEG.view_correlativos_01  TO USRSLEG;
  13. GRANT SELECT ON SLEG.view_provisiones_01  TO USRSLEG;
  14. GRANT SELECT ON SLEG.view_provisiones_detalle_01  TO USRSLEG;
  15. GRANT SELECT ON SLEG.view_num_cartas_prov_01  TO USRSLEG;
  16. GRANT SELECT ON SLEG.view_consulta_provisiones_01  TO USRSLEG;

Al parecer el dba si ha ejecutado los grants correctamente ya que me ha enviado la siguiente select donde se visualizan los permisos asignados:

Código SQL:
Ver original
  1. SELECT * FROM dba_tab_privs WHERE TABLE_NAME LIKE '%PQ_Cartas%';

Arrojando el siguiente resultado:

Aparentemente todo está bien; no entiendo porqué ocurre error en la aplicación.
Saludos.

Última edición por eduar2083; 25/02/2015 a las 09:13
  #4 (permalink)  
Antiguo 25/02/2015, 09:56
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: ORA-06550 PLS-00904 ¿Error de privilegio?

Es extraño.

No es por desconfiado, pero en estos casos el problema resulta ser algo muy obvio que simplemente se pasa.
De que forma puedes garantizar que el usuario que está ejecutando el paquete es el usuario USRSLEG?
es una aplicación en java u otro lenguaje?
Revisa que la conexión que se realice, bien sea los datasource o los pool de conexión que tengas configurados, efectivamente sea con los datos de conexión del usuario USRSLEG.

Trata en compañía del DBA de asignar el siguiente privilegio y mirar si soluciona el problema:
Código SQL:
Ver original
  1. GRANT EXECUTE any PROCEDURE TO USRSLEG;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 25/02/2015, 14:52
 
Fecha de Ingreso: octubre-2014
Ubicación: Lima
Mensajes: 74
Antigüedad: 10 años, 1 mes
Puntos: 1
Respuesta: ORA-06550 PLS-00904 ¿Error de privilegio?

Hola,
Efectivamente era eso, la aplicación no estaba ejecutando con el usuario USRSLEG. La verdad yo no tengo acceso a la cadena de conexión cuando hago el pase a Producción ya que dicha cadena viene por un Web Service. Pude detectarla solicitando una traza. Se trataba de una aplicación .Net con C# como lenguaje de gestión.
Muchas gracias,

Saludos.
  #6 (permalink)  
Antiguo 26/02/2015, 09:28
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: ORA-06550 PLS-00904 ¿Error de privilegio?

Excelente.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: access, bases-de-datos-general, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:26.