在PLSQL中授予UTL_HTTP权限

时间:2014-12-09 12:39:33

标签: plsql oracle-sqldeveloper reserved-words settings

我想从我的函数中的某个网页获取HTML内容。我读过我可以用PLSQL中的UTL_HTML包来做。所以我在项目中制作了以下代码:

v_webcontent := utl_http.request(v_weblink);

这里先前声明了v_webconent和v_weblink。在de函数中运行它会产生一个PLSQL异常:PLS-00201: identifier 'UTL_HTTP' must be declared我想这个问题是因为包不可用(来自这个链接:same error message)。

我遵循了建议。所以我在sql developer中创建了一个新的数据库连接作为SYSTEM角色(SYS不起作用,它说我只能使用SYSDBA或SYSOPER登录,但两者都不会使用我用数据库创建的标准密码)。然后我在上面的链接中输入了代码。

GRANT EXECUTE ON SYS.UTL_HTTP TO [database];

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

    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:

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

SELECT * FROM dba_objects WHERE object_name='UTL_HTTP'

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

有人能帮助我吗?我是否需要以SYS和密码登录?

2 个答案:

答案 0 :(得分: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.

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

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

祝你好运!

答案 1 :(得分:2)

  1. SYS AS SYSDBA
  2. 登录
  3. 执行grant execute on sys.utl_http to "Database"; 不要使用任何方括号!
  4. 这应该有效。

    建议:不要为数据库用户命名数据库'。


    重设SYS密码

    1. 以管理员身份运行cmd.exe
    2. cd到您的${ORACLE_HOME}/database
    3. 在那里找到PWDsomething.ora文件(其中something将是您的实例名称),将其名称复制到剪贴板中。
    4. 运行orapwd file=PWDsomething.ora password=SomePasswordOfMine force=y,其中PWDsomething.ora将替换为步骤3中的文件名,SomePasswordOfMine必须替换为您希望拥有的密码。
    5. 这可能有效。