在PLSQL中授予UTL_HTTP权限
我想从我的函数中的某个网页获取HTML内容。我读到我可以用PLSQL中的UTL_HTML包来实现它。因此,我在项目中编写了以下代码:在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中创建
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总是最好的方式。如果更改密码对您不起作用,这将是我的下一个建议:很高兴能帮上忙。谢谢你的帮助