我是本科学习的学生,在向用户a授予用户a的用户B在数据库Oracle 10G模式= XE中拥有的存储过程中,我面临的问题几乎没有问题。

请帮助我编写SQL命令,以授予存储过程XYZ的所有权权利XYZ给另一个用户。

有帮助吗?

解决方案

我不确定我通过“所有权权利”理解您的意思。

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

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;

其他提示

你不能做我想要做的事情。

您可以授予程序的唯一特权是执行和调试。

如果要允许用户B在用户A模式中创建一个过程,则用户B必须具有创建任何过程特权。更改任何过程并删除任何过程是更改或丢弃用户的其他适用特权。如果获得这些特权,则应高度信任用户B。

编辑:

正如贾斯汀(Justin)提到的那样,授予A的执行权的方法是B:

GRANT EXECUTE ON b.procedure_name TO a;

默认情况下,Oracle中的软件包和存储过程使用包/过程所有者的权利,而不是当前登录的用户。

因此,如果您调用创建用户的软件包,则其软件包所有者,而不是需要创建用户特权的调用用户。呼叫者只需要在软件包上执行权限即可。

如果您希望使用调用用户的权限运行软件包,则在创建软件包时您需要指定authid current_user

Oracle文档“调用权利与定义者权利”具有更多信息 http://docs.oracle.com/cd/a97630_01/appdev.920/a96624/08_subs.htm#18575

希望这可以帮助。

在您的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

我知道这是一个非常古老的问题,但我希望我可以稍微切碎一点。

SQL> grant create any procedure to testdb;

当我们想为“ TestDB”用户提供创建特权时,这是一个命令。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top