acl

ACL Definición y Creación

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

5 thoughts on “ACL Definición y Creación

  1. getshyaam Posted On 30 junio 2019 at 7:15 AM

    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

    • Quique Flores Posted On 30 junio 2019 at 6:17 PM

      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

  2. Web services en Oracle Apex 19 - Oracle Apex en Español Posted On 2 junio 2019 at 8:29 PM

    […] olvides lo importante que es crear el Access Control List para poder darle permisos a tu usuario de base de datos para conectarse y resolver peticiones a un […]

  3. Eric Ramirez Posted On 15 marzo 2019 at 4:44 PM

    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..

    • Quique Flores Posted On 2 junio 2019 at 1:32 AM

      Hola Eric,

      Si necesitas el usuario con privilegios de sys para poder crear un ACL y si la conexión es https necesitas agregar el certificado a un wallet.

      Saludos
      Enrique

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.