sql >> Base de Datos >  >> RDS >> Oracle

ORA-24247:acceso a la red denegado por la lista de control de acceso (ACL)

Tengo un trabajo programado regularmente en una base de datos Oracle RAC que me enviará una alerta por correo electrónico para una condición. Esto sucede cada 30 minutos. El trabajo ha fallado en uno de los nodos, pero no en los demás. El trabajo escupe estos errores:

ORA-12012: error on auto execute of job "OWNER"."JOB_NAME"
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at "SYS.UTL_TCP", line 17
ORA-06512: at "SYS.UTL_TCP", line 267
ORA-06512: at "SYS.UTL_SMTP", line 161
ORA-06512: at "SYS.UTL_SMTP", line 197
ORA-06512: at "SYS.UTL_MAIL", line 386
ORA-06512: at "SYS.UTL_MAIL", line 599
ORA-06512: at line 41

Lo extraño de este es que lo siguiente funciona en todas las instancias:

SQL> exec utl_mail.send(sender=>'[email protected]', -
> recipients=>'[email protected]', -
> subject=>'test from orcl1', -
> message=>'test from orcl1', -
> mime_type=>'text; charset=us-ascii');
PL/SQL procedure successfully completed.

Entonces, cuando envío el correo electrónico en la instancia, funciona bien. Pero el propietario del trabajo está recibiendo el error. Así que crea una ACL y asigna privilegios.

SQL> exec dbms_network_acl_admin.create_acl ( -
> acl=>'utl_mail_acl.xml', -
> description=>'ACL for using UTL_MAIL', -
> principal=>'OWNER', -
> is_grant=>TRUE, -
> privilege=>'connect', -
> start_date=>SYSTIMESTAMP, -
> end_date=>NULL);
PL/SQL procedure successfully completed.
SQL> exec dbms_network_acl_admin.assign_acl( -
> acl=>'utl_mail_acl.xml', -
> host=>'smtprelay.acme.com', -
> lower_port=>25, upper_port=>NULL);
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.

Ahora el procedimiento funciona como se indica.