资讯专栏INFORMATION COLUMN

应用使用utl http访问web服务报错ORA- 24247解决

IT那活儿 / 2211人阅读
应用使用utl http访问web服务报错ORA- 24247解决
问题描述:

应用使用utl http访问网元的web服务查询信息报错如下:

查看报错原因:

$ oerr ora 24247
24247, 00000, "network access denied by access control list (ACL)"
// *Cause: No access control list (ACL) has been assigned to the target
// host or the privilege necessary to access the target host has not
// been granted to the user in the access control list.
// *Action: Ensure that an access control list (ACL) has been assigned to
// the target host and the privilege necessary to access the target
// host has been granted to the user.


程序包简介:

Oracle的UTL_TCP、UTL_HTTP 和 UTL_SMTP程序包,支持数据库领域外的服务器之间的通信。例如,utl_tcp 用于在两台主机间建立 TCP/IP通信,而不是通过数据库链接。类似地,utl_http 用于从 Web 服务器发出 http 请求,utl_smtp 用于在主机间进行 SMTP邮件呼叫。

开发人员偶尔会使用这些强大的工具 — 例如,使用 utl_smtp 从数据库内发送邮件,使用 utl_http 提取可在 PL/SQL程序内处理的 Web 页面等等。然而,这些工具带来了巨大的安全风险。使用utl_tcp,数据库用户可以到达该主机可到达的任何其他计算机,甚至不会遇到系统提示。这曾是 Voyager蠕虫的惯用伎俩,该病毒一年前刚骚扰过 Oracle 用户社区。

为了消除这一风险,很多专家建议撤消“从公网执行”这些程序包的权限。但如果开发人员出于合理原因希望执行这些程序包,该怎么办?


安全解决方案:

Oracle 数据库 11g有一个新的解决方案:您可以将执行权限程序包授予任何人,但要控制他们可以调用的资源。例如,utl_tcp 可限制为仅调用几个 IP地址,这种机制称为访问控制列表 (ACL)。如果主机在 ACL 中,用户可以在 utl_tcp 中使用;但是仅仅拥有对 utl_tcp的执行权限是不够的。因此,恶意进程不可能取代 utl_tcp 程序包和建立非法连接。

处理步骤:

1. 确认应用使用的数据库账号,需要访问的web地址和端口

2. 创建ACL

SQL> execute DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(ACL => utl_http.xml, DESCRIPTION => HTTP Access, PRINCIPAL => XXXXX, IS_GRANT => true, PRIVILEGE => connect, START_DATE => null, END_DATE => null);

PL/SQL procedure successfully completed.

3. 赋权resolve

SQL> execute DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL => utl_http.xml, PRINCIPAL => XXXXX, IS_GRANT => true, PRIVILEGE => resolve, START_DATE => null, END_DATE => null);

PL/SQL procedure successfully completed.

4. 关联host和端口

SQL> execute DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(ACL => utl_http.xml, HOST => 136.22.22.22, LOWER_PORT => 8080, UPPER_PORT => 8090);

PL/SQL procedure successfully completed.

5. 检查设置

SQL> SELECT acl,
         principal,
         privilege,
         is_grant,
         TO_CHAR(start_date, DD-MON-YYYY) AS start_date,
         TO_CHAR(end_date, DD-MON-YYYY) AS end_date
    FROM dba_network_acl_privileges;

ACL PRINCIPAL PRIVILEGE IS_GRANT START_DATE END_DATE
------------------------- --------------- ----------------------- ---------- -------------- --------------
/sys/acls/utl_http.xml XXXXX resolve true
/sys/acls/utl_http.xml XXXXX connect true

SELECT host, lower_port, upper_port, acl FROM dba_network_acls;

HOST LOWER_PORT UPPER_PORT ACL
-------------------- ---------- ---------- ----------------------------------------
136.22.22.22 8080 8090 /sys/acls/utl_http.xml

6. 添加其他的web地址

execute DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(ACL => utl_http.xml, HOST => 136.22.22.22, LOWER_PORT => 8080, UPPER_PORT => 8090);
execute DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(ACL => utl_http.xml, HOST => 136.22.22.23, LOWER_PORT => 3001, UPPER_PORT => null);
execute DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(ACL => utl_http.xml, HOST => 136.22.22.24, LOWER_PORT => 3005, UPPER_PORT => null);

SQL> SELECT host, lower_port, upper_port, acl FROM dba_network_acls;

HOST LOWER_PORT UPPER_PORT ACL
-------------------- ---------- ---------- ----------------------------------------
136.22.22.22 8080 8090 /sys/acls/utl_http.xml
136.22.22.23 8080 8090 /sys/acls/utl_http.xml
136.22.22.24 3001 3001 /sys/acls/utl_http.xml
136.22.22.25 3005 3005 /sys/acls/utl_http.xml

7. 应用测试

联系应用人员检查测试,3个地址访问正常,24地址访问失败,是目标端防火墙限制导致,联系相关人员处理解决。

问题解决。

END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129850.html

相关文章

  • DBASK问答集萃第四期

    摘要:问题九库控制文件扩展报错库的扩展报错,用的是裸设备,和还是原来大小,主库的没有报错,并且大小没有变,求解释。专家解答从报错可以看出,控制文件从个块扩展到个块时报错,而裸设备最大只支持个块,无法扩展,可以尝试将参数改小,避免控制文件报错。 链接描述引言 近期我们在DBASK小程序新关联了运维之美、高端存储知识、一森咖记、运维咖啡吧等数据领域的公众号,欢迎大家阅读分享。 问答集萃 接下来,...

    SKYZACK 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<