在oracle中访问另一个所有者的功能?

时间:2016-05-09 11:09:35

标签: oracle

我有一个名为fn_export的函数,它的所有者是bhist。我使用bhist.fn_export从ohist用户调用此函数。在这样打电话时,我面临着以下问题。

ORA-00942: table or view does not exist
ORA-06512: at "bhist.fn_export", line 442
ORA-06512: at line 20

我尝试验证该函数中的所有表,并且我能够从ohist访问所有这些表。我在bhist.fn_export上执行授权给ohist。我仍然有这个问题。你们中的任何人都可以帮忙解决这个问题吗?

谢谢, Venkat

1 个答案:

答案 0 :(得分:1)

您需要向EXECUTE用户授予此ohist权限。{ 语法是:

GRANT EXECUTE ON function_name TO username;

您可以作为bhist用户进行连接,并使用以下方式授予权限:

GRANT EXECUTE ON fn_export TO ohist;

您也可以作为SYS或SYSTEM连接,并使用此命令:

GRANT EXECUTE ON bhist.fn_export TO ohist;

请参阅下面的简单示例(一个用户名为TEST,另一个用户名为DEV):

SQL> connect test
Enter password:
Connected.
SQL> CREATE FUNCTION fn_export RETURN number AS
  2  BEGIN
  3    RETURN 20;
  4  END;
  5  /

Function created.

SQL> connect dev
Enter password:
Connected.
SQL> SELECT test.fn_export FROM dual;
SELECT test.fn_export FROM dual
       *
ERROR at line 1:
ORA-00904: "TEST"."FN_EXPORT": invalid identifier


SQL> connect test
Enter password:
Connected.
SQL> grant execute on fn_export to dev;

Grant succeeded.

SQL> connect dev
Enter password:
Connected.
SQL> SELECT test.fn_export FROM dual;

 FN_EXPORT
----------
        20

SQL>