Pregunta

Soy un estudiante de Estudios de grado, y yo estoy frente a un pequeño problema en la concesión de derechos de propiedad a un usuario de A a un procedimiento almacenado siendo propiedad de usuario B en la base de datos Oracle 10g mode = xe.

Por favor, ayúdame por escrito comandos SQL para la concesión de derechos de propiedad sobre xyz procedimiento almacenado a otro usuario A.

¿Fue útil?

Solución

No estoy seguro de que entiendo lo que quiere decir con "derechos de propiedad".

Si el usuario B es propietaria de un procedimiento almacenado, el usuario B puede conceder un usuario permiso para ejecutar el procedimiento almacenado

GRANT EXECUTE ON b.procedure_name TO a

El Usuario A llamaría el procedimiento utilizando el nombre completo, es decir.

BEGIN
  b.procedure_name( <<list of parameters>> );
END;

Alternativamente, el usuario A puede crear un sinónimo con el fin de evitar tener que utilizar el nombre del procedimiento completo.

CREATE SYNONYM procedure_name FOR b.procedure_name;

BEGIN
  procedure_name( <<list of parameters>> );
END;

Otros consejos

No se puede hacer lo que creo que está pidiendo hacer.

Los únicos privilegios que puede conceder sobre los procedimientos son ejecutar y depurar.

Si desea permitir que el usuario B para crear un procedimiento en el usuario un esquema, a continuación, el usuario B debe tener el privilegio de crear cualquier PROCEDIMIENTO. ALTER CUALQUIER PROCEDIMIENTO y soltar cualquier procedimiento son los otros privilegios aplicables requieren para alterar o procedimientos usuario dejar caer una para el usuario B. Todos son amplio privilegios, ya que no restringe el usuario B a cualquier esquema particular. El usuario B debe ser de total confianza si se concede estos privilegios.

EDIT:

Como Justin mencionó, la manera de dar permisos de ejecución a A en un régimen de propiedad de B:

GRANT EXECUTE ON b.procedure_name TO a;

Paquetes y procedimientos almacenados en Oracle ejecutar de forma predeterminada utilizando los derechos del propietario del paquete / procedimiento, no el usuario con sesión iniciada.

Así que si usted llama a un paquete que crea un usuario, por ejemplo, es el propietario del paquete, no el usuario llamante que crean necesidades de privilegios del usuario. La persona que llama sólo tiene que tener permiso de ejecución en el paquete.

Si usted prefiere que el paquete se debe ejecutar utilizando los permisos del usuario que llama, a continuación, cuando se crea el paquete, tiene que especificar AUTHID CURRENT_USER

documentación de Oracle "Derechos Invoker vs definidor Derechos" tiene más información http://docs.oracle.com/cd/A97630_01/appdev.920/a96624/08_subs.htm#18575

Espero que esto ayude.

En su cuenta DBA, dar USERB el derecho de crear un procedimiento mediante concesión grant create any procedure to USERB

El procedimiento se verá

CREATE OR REPLACE PROCEDURE USERB.USERB_PROCEDURE
--Must add the line below
AUTHID CURRENT_USER AS
  BEGIN
  --DO SOMETHING HERE
  END
END

GRANT EXECUTE ON USERB.USERB_PROCEDURE TO USERA

Sé que esto es una pregunta muy antigua pero estoy esperando que pudiera saltar un poco.

SQL> grant create any procedure to testdb;

Este es un comando cuando queremos dar a crear privilegio de usuario "testdb".

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