Mi pregunta es que no se deja compilar algunos paqutes de oracle y resulta que para poder craer un role o dar privilegios sobre algunas tablas no me deja. ¿Qué puedo hacer ante este impase?
1 Respuesta
Respuesta de cbalba
1
1
cbalba, Informático desde hace 16 Años, con experiencia específica en...
No he entendido bien tu pregunta, porque no se si tienes problemas con la compilación, o bien si los procedimientos o paquetes compilan bien pero no puedes ejecutarlos por problemas específicos. Por favor, sea más especifico con el tipo de error que tiene para que pueda ayudarle mejor. No se si va por ahí el problema, pero le comento que cuando creamos un paquete, o un procedimiento, el mismo utiliza los permisos del creador del paquete para acceder a las tablas. Es decir que si vd. le da permiso de ejecución a un usuario A, dicho usuario podrá ejecutar su procedimiento, pero el procedimiento, internamente a Oracle, se ejecuta utilizando los permisos de su creador, no los permisos del usuario A. Por otra parte, los permisos sobre las tablas que van a ser utilizadas por el usuario creador del procedimiento, no pueden ser concedidos a través de roles, sino que tienen que ser concedidos directamente a dicho usuario. Ejemplo: El usuario A es propietario de la tabla_1 y la tabla_2 El usuario B va a crear un procedimiento que accede a dichas tablas. Para ello el usuario A le concede permisos sobre la tabla_1 directamente asignados sobre el usuario B. También le concede permisos al usuario B sobre la tabla_2, pero a través del role_B al que pertenece el usuario B. Cuando el usuario B compila el procedimiento, le da un error en el acceso a la tabla_2, aunque si hace un select * from USUARIO_A. TABLA_2, le funciona. El problema le está dando porque el permiso está concedido a través del role. El problema se soluciona concediendo los permisos directamente al usuario_B
Perdón por no ser más claro. Mi pregunta va a que cuando intento dar permisos (select, delete, insert, etc) a un usuario A sobre alguna tabla no me deja, y me muestra un mensaje de error el cual se refiere a unos package body que están sin compilar, osea que están inválidos. Que otra solución me podría dar sobre dicho problema-. Gracias anton
Hola, bueno yo estoy trabajando con el dba de oracle y cuando le trato de dar el permiso de select a una tabla de otro usuario me sale el error ora-01031, pero también cuando lo hago desde un sql me bota el mismo error (insuficientes privilegios). Gracias por tu ayuda
Si no he entendido mal vd está ejecutando: "grant select on mitabla to usuario_a" y le da un error de compilación sobre un package. Es la primera vez que me encuentro con un problema de este tipo. Se me ocurre que en realidad la tabla MITABLA sea una vista y dicha vista contenga errores. ¿Podría vd. indicarme cuál es el comando exacto que ejecuta y cuál es el error exacto que le devuelve y, en su caso, qué relación tienen la tabla o vista con el paquete del que le devuelve el error?
Gracias cbalba, muy correcta tu respuesta.
Solamente el propietario de una tabla puede asignar permisos a otros usuarios. Si usuario_a es propietario de la tabla TABLA_1, el usuario_a puede hacer un grant select on tabla_1 to usuario_b. DBA no puede en ese momento intentar conceder permisos porque no es el propietario de la tabla. Ahora bien. El comando grant, dispone de una opción que permite a un usuario que no es propietario de una tabla dar permisos sobre la misma a un tercero. Ej: el USUARIO_A es propietario de la TABLA_1. le da permisos al USUARIO_B de la siguiente forma "GRANT SELECT ON TABLA_1 TO USUARIO_B WITH GRANT OPTION" Después de esto el USUARIO_A y el USUARIO_B pueden hacer SELECT sobre USUARIO_A.TABLA_1. Como el permiso se lo han concedido con la opción GRANT, el USUARIO_B puede conceder el permiso SELECT sobre un tercero de la siguiente forma: "GRANT SELECT ON USUARIO_A.TABLA_1 TO USUARIO_C" Y a partir de entonces el USUARIO_C también puede hacer SELECT de USUARIO_A. TABLA_1.