Arreglar errores ORA-24247 y ORA-29278

Pues eso amig@s,

Si han comenzado a trabajar con la version 11g R2 de Oracle debemos tener en cuenta que tanto en la R1 como en la R2 de la 11g existen permisos especiales para utilizar los paquetes UTL's en esta version de oracle, dichos permisos se hacen llamar ACL's, por lo que si teniamos algun paquete o procedimiento que enviaba correos como churros en una 10g, en la 11g al utilizar el mismo proceso pueden aparecer errores como los siguientes:

ORA-24247: network access denied by access control list (ACL)

Causa: No hemos definido ningun ACL para el usuario que esta ejecutando dicho procedimiento.

Solucion: Creamos una lista de ACL para el usuario que necesite ejecutar dicho procedimiento.

Creando una lista ACL:

A continuacion encontraremos un script que nos crea la lista ACL con el nombre test.xml aunque ustedes pueden ponerle el que se les ocurra, tambien en el mismo script se le da privilegios al usuario contra esa ACL y luego se le asigna a una direccion de salida, como por ejemplo un servidor de correo electronico SMTP.

Script:

BEGIN

DBMS_NETWORK_ACL_ADMIN.create_acl (
acl => 'test.xml', --Aquí definimos un fichero xml.
description => 'Información de los permisos',
principal => 'PIBE', --Aquí va el usuario del esquema.
is_grant => TRUE,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date => NULL);

DBMS_NETWORK_ACL_ADMIN.add_privilege (
acl => 'test.xml',
principal => 'PIBE', --Aquí va el usuario del esquema.
is_grant => TRUE,
privilege => 'resolve',
position => NULL,
start_date => NULL,
end_date => NULL);

DBMS_NETWORK_ACL_ADMIN.assign_acl (
acl => 'test.xml',
host => 'smtp.blogdelpibe.com', --Servidor de correo SMTP. lower_port => 25, --Aquí definimos el puerto inicial.
upper_port => NULL); --Si es null se selecciona el del lower.

COMMIT;

END;

Ejecutamos todo el script desde el BEGIN hasta el END; con un SQLPLUS o TOAD con el usuario SYS.

Comprobando permisos:

Para comprobar si hemos creado las ACL y sus permisos podemos hacerlo con la siguiente consulta, donde nos devuelve si el usuario en cuestion tiene permisos (GRANTED) y cual es su fichero de configuracion:

SELECT host,
lower_port,
upper_port,
acl,
DECODE(
DBMS_NETWORK_ACL_ADMIN.check_privilege_aclid(aclid, 'PIBE', 'connect'),
1, 'GRANTED', 0, 'DENIED', null) PRIVILEGE
FROM dba_network_acls
WHERE host IN (SELECT *
FROM TABLE(DBMS_NETWORK_ACL_UTILITY.domains('smtp.blogdelpibe.com')))
ORDER BY
DBMS_NETWORK_ACL_UTILITY.domain_level(host) desc, lower_port, upper_port;

Ahora si ya tenemos nuestra ACL creada y por algun motivo recibimos el error ORA-29278: SMTP transient error: 421 Service not available, esto es debido a que la base de datos o el servidor donde esta instalado el software de la base de datos no tiene acceso al servidor de correo electronico saliente SMTP con lo que devuelve dicho error.

Para comprobar la conectividad de nuestro servidor SMTP solo basta con hacer un telnet a la direccion y al puerto 25:

C:\>telnet smtp.blodelpibe.com 25

Nos tiene que conectar con nuestro server, en este caso la direccion smtp.blogdelpibe.com no existe pero si por ejemplo:

C:\>telnet smtp.gmail.com.com 25

y nos devuelve: 220 mx.google.com ESMTP fi11sm28104216wbb.9 por ejemplo.

El que el propio servidor donde esta el software de bbdd no pueda acceder via telnet al servidor de SMTP no es un problema de Oracle, sino de dicho servidor y lo tendremos que solucionar con nuestro proveedor de hosting.

Luego de que hayamos solucionado este error, ya podremos conectarnos por telnet al servidor SMTP comprobaremos que oracle ya es capaz de enviar correos electronicos por si solo.

Espero que les resulte util.
Share on Google Plus
    Blogger Comment

1 comentarios:

Robert dijo...
Este comentario ha sido eliminado por el autor.