Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PLSQL中授予UTL_HTTP权限_Plsql_Oracle Sqldeveloper_Reserved Words_Settings - Fatal编程技术网

在PLSQL中授予UTL_HTTP权限

在PLSQL中授予UTL_HTTP权限,plsql,oracle-sqldeveloper,reserved-words,settings,Plsql,Oracle Sqldeveloper,Reserved Words,Settings,我想从我的函数中的某个网页获取HTML内容。我读到我可以用PLSQL中的UTL_HTML包来实现它。因此,我在项目中编写了以下代码: v_webcontent := utl_http.request(v_weblink); 这里v_WebComponent和v_weblink在前面声明。在de函数中运行此函数会出现PLSQL异常:PLS-00201:标识符“UTL\U HTTP”必须是declaredI猜测此问题是因为此链接中的包不可用: 我听从了建议。因此,我在SQLDeveloper中创建

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

v_webcontent := utl_http.request(v_weblink);
这里v_WebComponent和v_weblink在前面声明。在de函数中运行此函数会出现PLSQL异常:PLS-00201:标识符“UTL\U HTTP”必须是declaredI猜测此问题是因为此链接中的包不可用:

我听从了建议。因此,我在SQLDeveloper中创建了一个新的数据库连接,因为系统角色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身份登录吗?使用什么密码

以SYSDBA的身份登录SYS。 在sys.utl_http上执行grant Execute到数据库;不要使用任何方括号! 这应该行得通

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

重置你的系统密码

以管理员身份运行cmd.exe。 cd到${ORACLE_HOME}/数据库。 在那里找到PWDsomething.ora文件,其中有您的实例名称,将其名称复制到剪贴板中。 运行orapwd file=PWDsomething.orapassword=SomePasswordOfMine force=y,其中PWDsomething.ora将替换为步骤3中的文件名,SomePasswordOfMine必须替换为您想要的任何密码。 那可能行得通

以SYSDBA的身份登录SYS。 在sys.utl_http上执行grant Execute到数据库;不要使用任何方括号! 这应该行得通

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

重置你的系统密码

以管理员身份运行cmd.exe。 cd到${ORACLE_HOME}/数据库。 在那里找到PWDsomething.ora文件,其中有您的实例名称,将其名称复制到剪贴板中。 运行orapwd file=PWDsomething.orapassword=SomePasswordOfMine force=y,其中PWDsomething.ora将替换为步骤3中的文件名,SomePasswordOfMine必须替换为您想要的任何密码。
这可能会奏效。

由于11g还必须创建一个访问控制列表“ACL”,指定哪些用户有权访问特定域,因此仅授予用户utl_http上的执行权限已不再足够

在将UTL_HTTP上的execute权限授予您的数据库用户(如接受的答案所指定)之后,类似的操作应该在11G中起作用:

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.
下面是一个非常有用的链接,它解释了上述两个函数的参数:


祝你好运

由于11g还必须创建一个访问控制列表“ACL”,指定哪些用户有权访问特定域,因此仅授予用户utl_http上的执行权限已不再足够

在将UTL_HTTP上的execute权限授予您的数据库用户(如接受的答案所指定)之后,类似的操作应该在11G中起作用:

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.
下面是一个非常有用的链接,它解释了上述两个函数的参数:


祝你好运

我使用不同的名称创建了一个新用户。现在,我尝试使用“grant execute on sys.utl_http to myuser;”来授予permission因为我使用的用户没有使用引号。在这两种情况下,表或视图都不存在。我仍然在系统上,因为我似乎找不到SYSDBA的密码,也没有设置过它,你们知道我怎样才能找回那个些密码吗?@Politiepet,答案编辑,试试看。我从来没有重置过我的系统密码,所以不知道这是否有效。我已经修复了它。问题不是我无法登录SYS。在sql developer中,正确的密码对SYSDBA不起作用。所以我所做的是在我的sql server计算机上:打开的cmd键入'sqlplus/nolog',而不是'connectsysassysdba',密码是股票密码。从这里我可以运行'grant execute on sys.utl_http to Database;'它是这样工作的。是的,sqlplus总是最好的方式。如果更改密码对您不起作用,这将是我的下一个建议:很高兴能提供帮助。感谢您的帮助:DI使用不同的名称创建了一个新用户。现在,我尝试使用“grant execute on sys.utl_http to myuser;”来授予permission因为我使用的用户没有使用引号。在这两种情况下,表或视图都不存在。我仍然在系统上,因为我似乎找不到SYSDBA的密码,也没有设置过它,你们知道我怎样才能找回那个些密码吗?@Politiepet,答案编辑,试试看。我从不需要重置我的系统密码,
所以我不知道这是否有效,我已经修好了。问题不是我无法登录SYS。在sql developer中,正确的密码对SYSDBA不起作用。所以我所做的是在我的sql server计算机上:打开的cmd键入'sqlplus/nolog',而不是'connectsysassysdba',密码是股票密码。从这里我可以运行'grant execute on sys.utl_http to Database;'它是这样工作的。是的,sqlplus总是最好的方式。如果更改密码对您不起作用,这将是我的下一个建议:很高兴能帮上忙。谢谢你的帮助