我是一名本科生,我在Oracle 10g模式= xe的数据库中遇到了一个小问题,即如何将所有权权限授予用户A,以便让其使用由用户B拥有的存储过程。
请帮助我编写SQL命令,将存储过程xyz的所有权权限授予另一个用户A。
我是一名本科生,我在Oracle 10g模式= xe的数据库中遇到了一个小问题,即如何将所有权权限授予用户A,以便让其使用由用户B拥有的存储过程。
请帮助我编写SQL命令,将存储过程xyz的所有权权限授予另一个用户A。
我不确定你所说的“所有权权限”是什么意思。
如果用户B拥有一个存储过程,那么用户B可以授权给用户A运行该存储过程的权限。
GRANT EXECUTE ON b.procedure_name TO a
User 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;
GRANT EXECUTE ON b.procedure_name TO a;
在您的DBA账户上,使用授权grant create any procedure to USERB
,给予USERB创建存储过程的权限。
存储过程如下:
CREATE OR REPLACE PROCEDURE USERB.USERB_PROCEDURE
--Must add the line below
AUTHID CURRENT_USER AS
BEGIN
--DO SOMETHING HERE
END
END
授予USERA对USERB.USERB_PROCEDURE的执行权限
我知道这是一个非常老的问题,但我希望我能做出一点贡献。
在Oracle中,包和存储过程默认使用包/过程所有者的权限来执行,而不是当前登录用户的权限。
因此,如果您调用一个创建用户的包,例如,需要有创建用户特权的是包所有者,而不是调用用户。调用者只需要对包具有执行权限即可。
如果您希望该包应在调用用户的权限下运行,则在创建包时需要指定AUTHID CURRENT_USER。
Oracle文档“Invoker Rights vs Definer Rights”提供了更多信息http://docs.oracle.com/cd/A97630_01/appdev.920/a96624/08_subs.htm#18575。
希望这可以帮助到您。
SQL> grant create any procedure to testdb;
这是一个命令,当我们想要给“testdb”用户创建特权时使用。