向Oracle的另一用户授予存储过程的权利
-
29-09-2019 - |
题
我是本科学习的学生,在向用户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”用户提供创建特权时,这是一个命令。