ORACLE DB使用網路服務時出現ORA-24247: 存取控制清單 (ACL) 拒絕網路存取

 今天在使用utl_smtp的package發送e-mail時,出現了ORA-24247: 存取控制清單 (ACL) 拒絕網路存取

在Oracle 11g之後,加強了安全性,如果想要使用外部網路服務時,需要設定ACL。


查詢ACL:
SQL> SELECT host, lower_port, upper_port, acl FROM dba_network_acls;


查詢ACL帳號的權限:
SQL> SELECT * FROM dba_network_acl_privileges;


新增一個新的ACL,記得把SCOTT換成需要使用服務的DB帳號:DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
  acl => 'mail_services.xml',
  description => 'MAIL ACL',
  principal => 'SCOTT',
  is_grant => true,
  privilege => 'connect');


在ACL中新增一個權限,這個也可以獨立使用在已存在的ACL:DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
    acl => 'mail_services.xml',
    principal => 'SCOTT',
    is_grant => true,
    privilege => 'resolve');


將ACL與提供網路服務的IP連接,host的參數可以用「*」設定為不限:DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
    acl => 'mail_services.xml',
    host => '192.168.1.111');


完成後再重試一次,e-mail就可以發送了。