acl
  • 5 julio 2018
  • Enrique Flores
  • 10

ACL Definición y Creación

Oracle permite el acceso a servicios de red externos utilizando varias APIs escritas en  PL/SQL (UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP y UTL_INADDR), todas ellas implementadas mediante el protocolo TCP para ello necesitamos un ACL.

Por su definición en inglés Access Control List (ACL) sirve para darle permisos a los usuarios para conectarse y por default vienen cerrados estos canales de comunicación. Por ejemplo si necesitamos conectarnos a un servidor LDAP tenemos que crear un permiso para decirle a la base de datos que permita esto, por seguridad vamos a tener todo bloqueado y de esta forma controlamos las conexiones.

El paquete DBMS_NETWORK_ACL_ADMIN es el encargado de ejecutar dichos permisos y debe ser invocado con permisos de administrador o sysdba.

-- Ejecutar como sysdba
DECLARE
  l_acl       VARCHAR2(100) := 'nombredemiacl.xml';
  l_desc      VARCHAR2(100) := 'descripción del acl';
  l_principal VARCHAR2(30)  := 'USUARIO'; -- EN MAYÚSCULAS
  l_host      VARCHAR2(100) := 'ldap.ejemplo.com'; --nombre del host
BEGIN
  -- Crea el nuevo ACL
  -- Proveer privilegios de conexión 
  dbms_network_acl_admin.create_acl(l_acl, l_desc, l_principal, TRUE, 'connect');
 
  -- Permisos de resolución de DNS
  dbms_network_acl_admin.add_privilege(l_acl, l_principal, TRUE, 'resolve');
 
  -- Pasamos lo parámetros nombre del acl y host
  dbms_network_acl_admin.assign_acl(l_acl, l_host);
 
  COMMIT;
END;

Para verificar los ACLs creados

SELECT host, lower_port, upper_port, acl
FROM   dba_network_acls;

Los parámetros soportados son

DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
   acl             IN VARCHAR2, --nombre del acl
   description     IN VARCHAR2, -- descripción
   principal       IN VARCHAR2, -- usuario al que se le asignará
   is_grant        IN BOOLEAN, -- TRUE o FALSE otorgar o revocar el permiso
   privilege       IN VARCHAR2, -- el nombre del permiso
   start_date      IN TIMESTAMP WITH TIMEZONE DEFAULT NULL, --fecha inicio
   end_date        IN TIMESTAMP WITH TIMEZONE DEFAULT NULL ); --fecha termino del permiso

Si quieres hacer una prueba puedes ejecutar el siguiente bloque de código o ver el post donde creamos un ACL para habilitar la conexión

DECLARE
  l_url            VARCHAR2(50) := 'ldap.forumsys.com:389';
  l_http_request   UTL_HTTP.req;
  l_http_response  UTL_HTTP.resp;
BEGIN
  -- Hacemos una petición
  l_http_request  := UTL_HTTP.begin_request(l_url);
  l_http_response := UTL_HTTP.get_response(l_http_request);
  UTL_HTTP.end_response(l_http_response);
END;

Ref. LDAP Test

 

Espero te sirva esta información, si es así, no olvides darle clic a los anuncios que aparecen en el blog.

Si tienes una duda o comentarios por favor házmelo saber, me ayudaría muchísimo para poder crear más entradas.

acl oracle

10 comments on “ACL Definición y Creación

  1. yo tengo un problema, cree un ACL le agregue los permisos pero al momento que se ejecuta un job con el user y el host da un error de ORA-24247: network access denied by access control list (ACL), he validado en muchos foros y en MOS pero sigo sin hallar como resolver el problema, la base es una versión 19c y este es el ACL creado:
    begin
    dbms_network_acl_admin.create_acl (
    acl => ‘ejemplo.xml’,
    description => ‘ACLforUSERejemplo’,
    principal => ‘Ejemplo’,
    is_grant => TRUE,
    privilege => ‘connect’
    );
    dbms_network_acl_admin.add_privilege (
    acl => ‘ejemplo.xml’,
    principal => ‘ejemplo’,
    is_grant => TRUE,
    privilege => ‘connect’
    );
    dbms_network_acl_admin.assign_acl (
    acl => ‘ejemplo.xml’,
    host => ‘ejemplo’,
    lower_port => 21,
    upper_port => 21
    );
    commit;
    end;

    Agradeceria mucho si me apoyas ya que hasta un ACE cree pero nomas no queda el ACL o ya no se si es tema del lado del área de DEV aj ejecutar el job

  2. Buenas tardes, Quique.
    Antes que nada, agradecer tu predisposición siempre. Ya sea por este u otros medios, como YOUTUBE. A los de menos experiencia, como yo, nos es muy útil tus enseñanzas.
    En esta instancia me encuentro en un particular caso para el que no he podido hallar respuesta. He configurado tal como lo has indicado en tu video, pero los correos no se envían, ya que se presenta el error: “ORA-29259: end-of-input reached”. Es una app sobre Apex 19.2.
    Te agradecería alguna respuesta, si es que se te ha presentado el problema.
    Saludos desde Argentina.-

  3. I have local instance of oracle apex in my laptop and want to send email. the below entry from acl is not clear.
    kindly explain which value should i enter if i want to use gmail to send email from oracle apex applications.

    l_acl VARCHAR2(100) := ‘nombredemiacl.xml’;
    l_desc VARCHAR2(100) := ‘descripción del acl’;
    l_principal VARCHAR2(30) := ‘USUARIO’; — EN MAYÚSCULAS
    l_host VARCHAR2(100) := ‘ldap.ejemplo.com’; –nombre del host

    1. Hello getshyaam,

      You can use this https://sendgrid.com/, it’s easier than gmail
      this is the example
      l_acl VARCHAR2(100) := ‘whateveryouwant.xml’;
      l_desc VARCHAR2(100) := ‘YOUR DESCRIPTION’;
      l_principal VARCHAR2(30) := ‘UPPERCASEUSER’;
      l_host VARCHAR2(100) := ‘sendgrid.com’;

      Regards
      Enrique

  4. Buenas Quique
    Soy de Costa Rica
    Gracias por tu aporte en este tema de Apex, a muchos que nos estamos iniciamos nos es de mucha ayuda.

    Quiero implementar el uso de un webservice, en específico el del Banco Central de Costa Rica para consultar el tipo de cambio respecto al Dolar (http://indicadoreseconomicos.bccr.fi.cr/indicadoreseconomicos/WebServices/wsindicadoreseconomicos.asmx?op=ObtenerIndicadoresEconomicosXML)

    En la BD de Apex yo creé un workspace y un usuario administrador, en este workspace es donde estoy tratando de implementar el WS.
    Ya programé en un procedimiento almacenado en la BD lo que es invocar el ws, lo ejecuté pero me da error de que no existe un ACL en la BD.

    Usé tu ejemplo de crear el ACL pero desde el SQL Workshop, que es lo que tengo para manipular la BD, ni siquiera reconoce el paquete dbms_network_acl_admin.

    Cómo puedo hacer?
    Cómo me conecto a ese workspace como sys?
    Qué estaré haciendo mal?

    gracias..

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.