Control de acceso a recursos de red – ACL management

Con la salida de Oracle 11g se ha incluido en la base de datos un sistema para controlar el acceso a recursos de red que, por defecto, bloquea cualquier intento de conexión al exterior. Esto nos obliga a crear una serie de listas, o ACLs, para controlar y permitir el acceso a los recursos de red que sean necesarios en nuestros desarrollos.

El paquete DBMS_NETWORK_ACL_ADMIN nos proporciona todos los procesos necesarios para crear y gestionar estas listas. En el siguiente ejemplo se muestran los pasos que debemos seguir para habilitar a dos usuarios el acceso a una URL concreta:

  • Nombre de la lista ACL: network_access_test.xml
  • Usuarios con permisos de conexión: TEST_USER y TEST_USER_2
  • URL de acceso: *.yahooapis.com
-- Create ACL
BEGIN
 DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
  acl          => 'network_access_test.xml', 
  description  => 'Network access test', 
  principal    => 'TEST_USER', -- Must be in upper case
  is_grant     => TRUE,
  privilege    => 'connect',
  start_date   => NULL,
  end_date     => NULL);
END;
/

 -- Creates the second role privilege
BEGIN
 DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE (
  acl          => 'network_access_test.xml',
  principal    => 'TEST_USER_2',
  is_grant     => TRUE, 
  privilege    => 'connect',
  position     => NULL,
  start_date   => NULL,
  end_date     => NULL);
END;
/

 -- Creates the first target host
BEGIN
 DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
  acl          => 'network_access_test.xml',
  host         => '*.yahooapis.com',
  lower_port   => NULL,
  upper_port   => NULL); 
END;
/

Para asegurarnos de que hemos activado el acceso correcto podemos consultar las siguientes vistas:

-- List ACLs
select *
from RESOURCE_VIEW
where any_path like '/sys/acls/%';

-- List ACL privileges
select *
from DBA_NETWORK_ACL_PRIVILEGES;

-- List URLs
select *
from DBA_NETWORK_ACLS;

Por último vamos a mostrar cómo eliminar usuarios, conexiones y la ACL completa que hemos creado:

-- Delete users / roles from ACL
BEGIN
 DBMS_NETWORK_ACL_ADMIN.DELETE_PRIVILEGE (
  acl          => 'network_access_test.xml',
  principal    => 'TEST_USER',
  is_grant     => TRUE, 
  privilege    => 'connect');
END;
/

-- Delete URLs
BEGIN
 DBMS_NETWORK_ACL_ADMIN.UNASSIGN_ACL (
  acl          => 'network_access_test.xml',
  host         => '*.yahooapis.com',
  lower_port   => NULL,
  upper_port   => NULL); 
END;
/

-- Drop ACL
BEGIN
 DBMS_NETWORK_ACL_ADMIN.DROP_ACL (
  acl          => 'network_access_test.xml'); 
END;
/

En este ejemplo se ha creado una ACL básica que permite acceso completo a una URL. Pero las ACL permiten controlar aspectos como los puertos a los que se tiene acceso, definición de subredes o establecer la ventana temporal en la que estará activo el acceso para cada usuario.

Para profundizar en estos aspectos se puede consultar el siguiente enlace:
http://download.oracle.com/docs/cd/B28359_01/network.111/b28531/authorization.htm#DBSEG40012

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s