11

我是一名本科生,在数据库 Oracle 10g 模式 =xe 中,我在向用户 A 授予用户 B 拥有的存储过程的所有权方面几乎没有问题。

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

4

5 回答 5

34

我不确定我理解您所说的“所有权”是什么意思。

如果用户 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;
于 2010-11-29T16:02:08.040 回答
8

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

您可以授予对过程的唯一权限是 EXECUTE 和 DEBUG。

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

编辑:

正如贾斯汀所说,为 B 拥有的程序赋予 A 执行权的方式:

GRANT EXECUTE ON b.procedure_name TO a;
于 2010-11-29T16:06:06.160 回答
1

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

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

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

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

希望这可以帮助。

于 2014-10-27T20:19:11.600 回答
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

我知道这是一个非常古老的问题,但我希望我能稍微解决一下。

于 2017-12-14T19:42:58.967 回答
0
SQL> grant create any procedure to testdb;

当我们想为“testdb”用户授予创建权限时,这是一个命令。

于 2015-12-07T20:49:28.717 回答