【问题标题】:Grant UTL_HTTP permission in PLSQL在 PLSQL 中授予 UTL_HTTP 权限
【发布时间】:2016-01-25 11:43:32
【问题描述】:

我想在我的函数中从某个网页获取 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 身份登录并使用什么密码?

【问题讨论】:

    标签: plsql oracle-sqldeveloper reserved-words settings


    【解决方案1】:

    从 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

    祝你好运!

    【讨论】:

      【解决方案2】:
      1. SYS AS SYSDBA 登录。
      2. 执行grant execute on sys.utl_http to "Database"; 不要使用任何方括号!

      应该可以的。

      建议:不要将您的数据库用户命名为“数据库”。


      重置您的 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 必须替换为您希望拥有的任何密码。

      这可能行得通。

      【讨论】:

      • 我用不同的名字创建了一个新用户。现在我尝试使用以下命令授予权限:'grant execute on sys.utl_http to myuser;'因为我使用的用户我没有使用引号。在这两种情况下,它都给我表或视图不存在。我仍然在 SYSTEM 上,因为我似乎找不到 SYSDBA 的密码,也没有设置过密码,你知道我怎样才能找回密码吗?
      • @Politiepet,答案已编辑,尝试一下。 (我从来不用重置我的 SYS 密码,所以不知道这是否可行。)
      • 我已经修好了。问题不在于我无法登录 SYS。这是正确的密码在 sql developer 中对 SYSDBA 不起作用。所以我所做的是在我的 sql server 计算机上:在“sqlplus/nolog”中打开 cmd-typed,而不是“connect sys as sysdba”,密码是股票密码。从这里我可以运行'在 sys.utl_http 上执行到“数据库”;'它是这样工作的。
      • 是的,sqlplus 始终是最好的方法。如果更改密码对您不起作用,这将是我给您的下一个建议。 :-) 很高兴能帮上忙。
      • 感谢您的帮助:D
      猜你喜欢
      • 1970-01-01
      • 2016-08-24
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      相关资源
      最近更新 更多