在PLSQL中授予UTL_HTTP权限

Pol*_*pet 1 settings plsql reserved-words oracle-sqldeveloper

我想从我的函数中的某个网页获取HTML内容。我读过我可以用PLSQL中的UTL_HTML包来做到这一点。因此,我在项目中编写了以下代码:

v_webcontent := utl_http.request(v_weblink);
Run Code Online (Sandbox Code Playgroud)

在此先声明了v_webconent和v_weblink。在功能中运行此命令会导致PLSQL异常:PLS-00201: identifier 'UTL_HTTP' must be declared我想这个问题是因为该软件包不可用(来自此链接:相同的错误消息)。

我听从了建议。因此,我以SYSTEM角色的身份在sql developer中创建了一个新的数据库连接(SYS无法正常工作,它说我只能使用SYSDBA或SYSOPER登录,但两者都不会采用我在数据库中创建的标准密码)。然后,我在上面的链接中输入了代码。

GRANT EXECUTE ON SYS.UTL_HTTP TO [database];
Run Code Online (Sandbox Code Playgroud)

我创建的用户名为“数据库”。它首先给我一个没有[]方括号的错误。表格或视图不存在,因此我将其放在方括号中。现在它给出了错误:

    Error starting at line : 1 in command -
GRANT EXECUTE ON SYS.UTL_HTTP TO [database]
Error report -
SQL Error: ORA-00987: missing or invalid username(s)
00987. 00000 -  "missing or invalid username(s)"
*Cause:    
*Action:
Run Code Online (Sandbox Code Playgroud)

所以我不知道如何解决这个问题。在上面的链接中,OP说他还有另一个错误,因此我还检查了我是否没有同样的问题。我进入了:

SELECT * FROM dba_objects WHERE object_name='UTL_HTTP'
Run Code Online (Sandbox Code Playgroud)

它返回了4个条目。与所有者:SYS,SYS,PUBLIC和APEX_040000。

有人可以帮我吗?我需要以SYS身份登录并且使用什么密码?

man*_*ni0 5

由于11g,您还必须创建一个访问控制列表('ACL'),该列表指定哪些用户可以访问特定域,因此仅授予用户对utl_http的执行权限已不再足够!

像这样的事情应该在11g中起作用(在将UTL_HTTP的执行特权授予您的数据库用户之后,由接受的答案指定):

SQL> BEGIN
  2  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl=>'mikesacl.xml',
  3  description=>'access control list example',
  4  principal=>'HR',
  5  is_grant=>TRUE,
  6   privilege=>'connect');
  7  commit;
  8  end;
  9  /

PL/SQL procedure successfully completed.


    SQL> begin
      2  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
      3  acl=>'mikesacl.xml',host=>'*'); 
      4  commit;

      5  end;
      6  /

PL/SQL procedure successfully completed.
Run Code Online (Sandbox Code Playgroud)

这是一个非常有用的链接,它解释了以上两个函数的参数:

http://www.oracleflash.com/36/Oracle-11g-Access-Control-List-for-External-Network-Services.html

祝好运!