En Oracle aparece también el sistema de roles mediante el cual se permite solo a ciertos usuarios gestionar datos así como imponer restricciones de acceso o acciones concretas sobre objetos como bases de datos, tablas, filas e incluso recursos como tiempo de CPU.
Los roles agrupan privilegios u otros roles bajo un mismo nombre para facilitar su asignación a muchos usuarios. Oracle distingue dos tipos de privilegios en este sentido:
Privilegios de sistema para permitir realizar acciones administrativas de carácter general en la base de n datos.
Están registrados en la tabla DBA_SYS_PRIVS del diccionario de datos. Privilegios asociados con objetos del servidor.
Gestión de privilegios
Podemos dar y quitar privilegios a usuarios y roles con GRANT y REVOKE. GRANT { grant_system_privileges
| grant_object_privileges
} ;
{ system_privilege
| role
| ALL PRIVILEGES } grant_system_privileges::=
[, { system_privilege | role | ALL PRIVILEGES
}
]...
TO grantee_clause
[ WITH ADMIN OPTION ]
grant_object_privileges::= { object_privilege | ALL [ PRIVILEGES ] } [ (column [, column ]...) ] [, { object_privilege | ALL [ PRIVILEGES] } [ (column [, column ]...) ]
]...
on_object_clause
TO grantee_clause
[ WITH HIERARCHY OPTION ]
[ WITH GRANT OPTION ]
on_object_clause ::=
{ [ schema. ] object
| { DIRECTORY directory_name
| JAVA { SOURCE | RESOURCE } [ schema. ] object
system_privilege n : nombre del privilegio concedido.
role n : nombre del rol concedido.
IDENTIFIED BY n : cuando se concede un privilegio de sistema debe incluirse el usuario (si no existe) y password.
WITH ADMIN OPTION n : para permitir al usuario conceder el mismo privilegio a otros usuarios.
grantee_clause n : indica los usuarios o roles a los que se concede el privilegio.
grant_object_privileges n : cláusulas para privilegios de objetos. object_privilege n : nombre del privilegio de objeto.
ALL [PRIVILEGES] n : todos los privilegios sobre el objeto.
Column n : columna de la tabla o vista sobre la que se concede el privilegio. on_object_clause n : identifica el objeto sobre el que se conceden los privilegios.
WITH GRANT OPTION n : permite al usuario conceder y revocar el privilegio a otros.
WITH HIERARCHY OPTION n : Permite conceder el privilegio en todos los subobjetos, como subvistas.
Object n : nombre del objeto sobre el que se conceden los privilegios. Pueden ser tablas y vistas, secuencias, procedimientos, funciones o paquetes (funciones agrupadas), tipos de datos definidos por el usuario, alias de los objetos anteriores, directorios, librerías, operadores o índices, código fuente de Java y clases de Java.
Gestión de roles de usuarios
Normalmente los roles sirven para facilitar la gestión de aplicaciones de bases de datos utilizando los llamados roles de aplicación y de privilegios para grupos de usuarios con similares requerimientos.
Crear un rol Para ello usamos el comando
CREATE ROLE:
create_role::=
CREATE ROLE role
[ NOT IDENTIFIED
| IDENTIFIED { BY password
| USING [ schema. ] package
role n : nombre del rol a crear.
NOT n IDENTIFIED: no se requiere una contraseña para activar el rol. IDENTIFIED n : para indicar que un usuario debe ser autorizado por el método especificado antes de que se active el rol con el comando SET ROLE.
BY password n : indica el password necesario para poder activar el rol por parte del usuario. Por ejemplo, para crear un rol director con un password:
CREATE ROLE ebanca_director IDENTIFIED BY warehouse;
Así los usuarios a los que se conceda el rol deben especificar el password para activar el rol.
Activar un rol
Con el comando SET ROLE podemos activar o desactivar un rol (cuando iniciamos sesión todos salvo los activos por defecto están inactivos).
SET ROLE
( role_name [ IDENTIFIED BY password ]
| ALL [EXCEPT role1, role2, ... ]
| NONE );
role_name n : nombre del rol a activar.
IDENTIFIED BY password n : contraseña para activarlo si es que se creó con contraseña.
ALL n : indica que todos los roles deben activarse para dicho usuario y sesión salvo los iniciados por EXCEPT.
NONE n : desactiva todos los roles incluidos los activos por defecto.
Modificar un rol
El comando es muy similar así como el significado de las distintas cláusulas.
ALTER ROLE clerk IDENTIFIED EXTERNALLY;
ALTER ROLE role
{ NOT IDENTIFIED
| IDENTIFIED
{ BY password | USING [ schema. ] package } } ;
Eliminar roles
DROP ROLE role ;
CREAR LISTAS DE CONTROL DE ACCESO
Oracle permite crear listas de control de acceso para restringir los equipos a los que ciertos usuarios tienen acceso. Para tal fin dispone de un paquete (conjunto de funciones) llamado DBMS_NETWORK_ACL_ADMIN con las funciones necesarias.
Creando la lista de control
Con el procedimiento DBMS_NETWORK_ACL_ADMIN.CREATE_ACL pasándole los parámetros correspondientes según la sintaxis siguiente:
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
acl => ‘file_name.xml’,
description => ‘file description’,
principal => ‘user_or_role’,
is_grant => TRUE|FALSE, privilege => ‘connect|resolve’,
start_date => null|timestamp_with_time_zone,
end_date => null|timestamp_with_time_zone);
END;
acl n : nombre del fichero xml generado con los datos de la acl.
description n : breve descripción del objeto de esta acl.
principal n : la cuenta principal de usuario al que se concede o deniega el permiso.
is_grant n : para especificar si se concede o no el permiso.
privilege n : el permiso es connect para permitir al usuario conecta ra servicios en equipos externos (cuando el usuario hace uso de los paquetes UTL_TCP, UTL_HTTP, UTL_SMTP y UTL_MAIL) o resolve para permitir resolver direcciones IP (cuando se hace uso del paquete UTIL_INADDR).
start_date/end_date n : (opcional) fecha de comienzo/fin de la lista.
Asignar los hosts
Tras crear la lista se requiere incluir los hosts para los que se creó la lista, para lo cual usamos el procedimiento almacenado:
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL
BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
acl => ‘file_name.xml’,
host => ‘network_host’,
lower_port => null|port_number,
upper_port => null|port_number);
END;
/
acl n : nombre de la acl.
host n : nombre del equipo.
lower_port/upper_port n : (opcional) el rango de puertos permitido.
No hay comentarios:
Publicar un comentario