将存储过程的权限授予另一个Oracle用户

时间:2010-11-29 15:43:34

标签: oracle stored-procedures grant owner rights-management

我是本科学习的学生,在向用户A授予对数据库Oracle 10g mode = xe中用户B拥有的存储过程的所有权时,我几乎没有遇到任何问题。

请帮我编写sql命令,以便将存储过程xyz的所有权授予另一个用户A.

5 个答案:

答案 0 :(得分:26)

我不确定我理解“所有权”的含义。

如果用户B拥有存储过程,则用户B可以授予用户A运行存储过程的权限

GRANT EXECUTE ON b.procedure_name TO a

然后,用户A将使用完全限定名称调用该过程,即

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

或者,用户A可以创建同义词,以避免使用完全限定的过程名称。

CREATE SYNONYM procedure_name FOR b.procedure_name;

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

答案 1 :(得分:6)

你不能做我认为你要做的事。

您可以在程序上授予的唯一权限是EXECUTE和DEBUG。

如果要允许用户B在用户A架构中创建过程,则用户B必须具有CREATE ANY PROCEDURE权限。更改任何过程和DROP ANY PROCEDURE是更改或删除用户B的用户A过程所需的其他适用权限。所有权限都是广泛的权限,因为它不会将用户B限制为任何特定模式。如果授予这些权限,用户B应该高度信任。

编辑:

正如Justin所提到的,为B拥有的程序赋予A执行权的方式:

GRANT EXECUTE ON b.procedure_name TO a;

答案 2 :(得分:1)

Oracle中的包和存储过程默认使用包/过程OWNER的权限执行,而不是当前登录的用户。

因此,如果您调用创建用户的程序包,例如程序包所有者,而不是需要create user privilege的调用用户。调用者只需要对包具有执行权限。

如果您希望使用调用用户的权限运行包,那么在创建包时需要指定AUTHID CURRENT_USER

Oracle文档“Invoker Rights vs Definer Rights”包含更多信息http://docs.oracle.com/cd/A97630_01/appdev.920/a96624/08_subs.htm#18575

希望这有帮助。

答案 3 :(得分:1)

在您的DBA帐户中,授予USERB使用授权grant create any procedure to USERB

创建程序的权利

程序将是

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

我知道这是一个非常古老的问题,但我希望我可以把它搞砸一下。

答案 4 :(得分:0)

SQL> grant create any procedure to testdb;

当我们想给“testdb”用户提供创建权限时,这是一个命令。