今天在使用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就可以發送了。