Manual del estudiante de Ingeniería en Sistemas de UTN/Bases de datos avanzadas/Administración de la seguridad

De Wikilibros, la colección de libros de texto de contenido libre.

La seguridad en la Base de Datos se refiere fundamentalmente a autorizar y desautorizar acciones de los usuarios sobre los objetos de la base de datos.

ORACLE emplea los dominios de seguridad para controlar el acceso a los datos y restringir el uso de los recursos de la base de datos.

Los controles de acceso regulan el acceso de los usuarios a los objetos de la base de datos a través de la asignación de privilegios.

Un privilegio es un permiso para acceder a un objeto de una manera determinada.

Un usuario es un nombre definido en la base de datos que se puede conectar y acceder a los objetos.

Un schema es un conjunto nominado de objetos asociados con un usuario particular (los términos usuario y schema se usan para referirse a lo mismo).

Cuando se crea un usuario se crea el schema correspondiente con el mismo nombre. Una vez que un usuario se conecta con la base de datos, por omisión tiene acceso a todos los objetos de su schema.

Cuando se crea un nuevo usuario o se cambia alguno existente, el administrador de seguridad debe tomar una serie de decisiones relacionadas con la seguridad del usuario y su dominio:

  • Si la autenticación del usuario va a ser realizada por la base de datos, el sistema operativo, o el servicio de autenticación de la red.
  • Asignar los valores default del usuario y sus tablespaces temporarias.
  • Una lista, si existe, de tablespaces temporarios accesibles por el usuario, y las cuotas (límites) que el usuario tiene para cada tablespace.
  • El perfil (profile) de recursos del sistema que el usuario tiene disponible.
  • Los privilegios y roles que el usuario posee para acceder a los objetos que de la base de datos.

El usuario PUBLIC[editar]

Cada base de datos tiene un usuario de grupo llamado PUBLIC. El usuario PUBLIC provee el acceso público a objetos específicos del schema y provee a todos los usuarios con privilegios del sistema específicos. Todo usuario pertenece automáticamente al grupo de usuarios PUBLIC.

Como miembros de PUBLIC, los usuarios pueden ver todas las tablas del diccionario de datos prefijadas como USER y ALL.

Además, un usuario puede garantizar un privilegio o un rol a PUBLIC.

El usuario PUBLIC tiene las siguientes restricciones:

  • No se puede asignar cuotas sobre los tablespaces a PUBLIC, no obstante se le puede asignar la cuota UNLIMITED TABLESPACE.
  • Se pueden crear vínculos con la base de datos y sinónimos como PUBLIC (usando CREATE PUBLIC DATABASE LINK/SYNONYM), pero ningún otro objeto puede ser propietario de PUBLIC.

Perfiles y límites de recursos del usuario[editar]

Se pueden poner límites sobre la cantidad de varios de los recursos del sistema disponibles a cada usuario como parte del dominio de seguridad del usuario.

La manera de administrarlos es a través del perfil del usuario, que es un conjunto nominado de límites sobre los recursos que se puede asignar a los usuarios. El administrador de la seguridad puede habilitar ó inhabilitar los perfiles.

Los recursos del sistema y sus límites[editar]

Los recursos del sistema que consume un usuario pueden ser controlados al nivel de sesión ó al nivel de llamada.

A nivel de sesión significa que cada vez que el usuario se conecta con la base de datos se crea una sesión. Cada sesión consume tiempo de CPU y memoria de la computadora donde se ejecuta ORACLE. Si un usuario excede en una sesión el límite asignado ORACLE termina la misma, hace rollback de la sentencia actual y envía un mensaje indicando que límite de sesión ha sido alcanzado. La única operación que se le permite al usuario son COMMIT, ROLLBACK o DISCONNECT; cualquier otra operación produce un error.

Usualmente una llamada a la base de datos requiere en promedio un tiempo pequeño de CPU. Lo que se quiere prevenir, limitando la cantidad de CPU que una llamada puede consumir, son aquellas consultas que involucra un gran cantidad de datos o una consulta que esta fuera de control.

El límite en la cantidad de lecturas lógicas está relacionado con las entradas/salidas (I/O) que es una de las operaciones más costosas de un sistema de base de datos.

Otros recursos que pueden ser limitados al nivel de sesión son:

  • El número de sesiones concurrentes por usuario. Cada usuario puede crear hasta un número predefinido de sesiones concurrentes.
  • Se puede limitar el tiempo ocioso o idle time (el tiempo entre llamadas a ORACLE para una sesión).
  • Se puede también limitar el tiempo transcurrido durante la conexión por sesión (elapses connected time). El límite es asignado como la cantidad de minutos transcurridos.
  • Se puede limitar también la cantidad de espacio privado en la SGA (uso privado de sentencias SQL) para una sesión. Este límite es sólo importante en sistemas que usan configuraciones de servidores multithreaded.

Perfiles[editar]

Un perfil es un conjunto nominado de recursos límites específicos del sistema que pueden ser asignados a un usuario de una base de datos ORACLE.

Para usar perfiles se deben tipificar los tipos de usuario de la base de datos. Antes de crear los perfiles y asignarle los recursos límites asociados al perfil, se deben determinar los valores apropiados. Para ello se puede recolectar la información acerca del uso de los recursos. ORACLE provee diversas herramientas y opciones para conseguir la información necesaria acerca del uso de los recursos por parte de los diferentes perfiles de usuarios.

Privilegios y Roles[editar]

Un privilegio es un derecho para ejecutar un tipo particular de sentencia SQL ó para acceder un objeto de otro usuario.

Un usuario puede recibir los privilegios de dos maneras:

  • Explícitamente.
  • Se asignan privilegios a un rol (un conjunto nominado de privilegios) y luego se asignan estos roles a uno o más usuarios.

El objetivo de los roles es permitir una mejor administración de los privilegios, por lo general, se deberían garantizar privilegios a los roles y no a los usuarios individuales.

Privilegios del sistema y de los objetos del esquema[editar]

Privilegios del sistema[editar]

Un privilegio del sistema es el derecho a realizar una acción particular, o realizar una acción sobre cualquier (“any”) objeto de un tipo particular.

Existen alrededor de 60 privilegios del sistema distintos.

Los modos disponibles para asignar (grant) o desasignar (revoke) privilegios del sistema a usuarios y roles son los siguientes:

  • Emplear el utilitario Server Manager.
  • Los comandos SQL GRANT y REVOKE.

Los usuarios con la opción de ADMIN OPTION o con GRANT ANY PRIVILEGE pueden asignar o quitar privilegios del sistema a otros usuarios.

Cualquier usuario con el privilegio del sistema GRANT ANY ROLE puede asignar o anular cualquier rol a los usuarios de la base de datos. Cualquier usuario con la opción ADMIN OPTION también puede asignar o anular roles a los usuarios.

Privilegios sobre los objetos del schema[editar]

Un privilegio sobre un objeto del schema es un derecho para efectuar una acción particular sobre una tabla, vista, secuencia, procedimiento, función o paquete.

Algunos otros objetos como clusters, índices, triggers y vínculos de base de datos (database links) no se asocian a privilegios sobre los objetos, sino que son controlados por medio de privilegios del sistema.

Un objeto del schema y su sinónimo son equivalentes en cuanto a los privilegios.

Un usuario posee automáticamente todos los privilegios sobre los objetos que se encuentran en su schema.

Privilegios de objetos sobre tablas[editar]

Los privilegios de objetos sobre tablas pueden asignarse al nivel de las operaciones de DML o DDL que se quieran hacer.

Para las operaciones de DML se pueden asignar los privilegios de DELETE, INSERT, SELECT y UPDATE. Los privilegios de INSERT y UPDATE se pueden restringir inclusive a nivel de columna de una tabla.

Cuando se inserta una fila con valores solo para las columnas asignadas las otras columnas reciben el valor NULL o los valores default definidos para esa columna.

Para las operaciones del DDL se pueden asignar los privilegios de ALTER, INDEX y REFERENCES.

El privilegio REFERENCES habilita a quien se le asigna este privilegio que pueda usar la tabla (sus columnas) como clave primaria de cualquier clave foránea que necesite definir sobre sus propias tablas.

Privilegios de objetos sobre vistas[editar]

Los privilegios de objetos sobre vistas permiten a los usuarios llevar a cabo varias operaciones DML que afectan a las tablas bases desde las cuales las vistas son derivadas.

Los privilegios de objetos sobre tablas se pueden aplicar de manera similar sobre las vistas.

Para crear una vista se debe haber garantizado los siguientes privilegios:

  • CREATE VIEW o CREATE ANY VIEW (privilegio de sistema) directamente o a través de un rol.
  • Explícitamente los privilegios de objeto SELECT, INSERT, UPDATE o DELETE sobre las tablas base que corresponden a las vistas, o los privilegios SELECT ANY TABLE, INSERT ANY TABLE, UPDATE ANY TABLE ó DELETE ANY TABLE (privilegios del sistema).
  • Para poder garantizar a otros usuarios el acceso a las vistas se deben tener el privilegio sobre los objetos base con GRANT OPTION o el privilegio del sistema ADMIN OPTION.

Para usar una vista se necesita tener privilegios sobre la vista únicamente. No se requiere tener privilegios sobre los objetos base que soportan a las vistas.

Las vistas agregan dos niveles adicionales de seguridad sobre las tablas base: a nivel de columna y a nivel de valores de la tabla: una vista puede proveer el acceso sólo a algunas columnas de la tabla, o a determinadas filas, filtradas por determinados valores en cada columna.

Privilegios de objeto sobre procedimientos[editar]

El único privilegio de objetos para procedimientos (incluyendo funciones y paquetes) es el de EXECUTE. Con esto se puede agregar otro nivel de seguridad a la base de datos, ya que un usuario solo requiere el privilegio de ejecutar un procedimiento, pero no necesita los privilegios de acceder a las bases que el procedimiento accede. De esta manera se fuerza que los usuarios se accedan a las tablas base sólo a través los procedimientos, cuyo funcionamiento está debidamente probado.

Un usuario con el privilegio de sistema EXECUTE ANY PROCEDURE puede ejecutar cualquier procedimiento que exista en el sistema.

Para crear un procedimiento el usuario debe tener alguno de los privilegios CREATE PROCEDURE o CREATE ANY PROCEDURE (privilegio del sistema). Para modificar un procedimiento el usuario debe ser el dueño del procedimiento o tener el privilegio del sistema ALTER ANY PROCEDURE.

El usuario que es dueño del procedimiento debe tener también el privilegio sobre los objetos del schema que son accedidos en el cuerpo del procedimiento. Estos privilegios deben ser adquiridos explícitamente y NO a través de roles.

Roles[editar]

En general se emplean para asignar los privilegios relacionados con los usuarios finales de las aplicaciones de un sistema o para asignar roles a otro roles.

Los roles de la base de datos tienen la siguiente funcionalidad:

  • Un rol puede tener privilegios del sistema y privilegios de objetos del schema.
  • Un rol se puede asignar a otro roles (excepto a sí mismo directa o indirectamente).
  • A cualquier usuario de la base de datos se le puede asignar cualquier rol.
  • Un rol asignado a un usuario se puede habilitar o inhabilitar en cualquier momento.
  • Un rol garantizado indirectamente puede ser explícitamente habilitado o inhabilitado al usuario. No obstante para habilitar un rol que contiene otro roles, los roles contenidos se habilitan implícitamente habilitando el rol que los contiene.

En una base de datos cada rol debe ser único y ningún nombre de usuario o rol puede ser el mismo.

El dominio de seguridad de un usuario consiste de los privilegios de todos los objetos creados en su propio schema, los privilegios asignados explícitamente al usuario, los privilegios y roles garantizados al usuario que actualmente están habilitados, y los privilegios y roles garantizados al grupo de usuarios PUBLIC.

Un usuario requiere uno ó más privilegios del sistema y de objetos del schema para ejecutar sentencias DDL.

No obstante, existen algunas restricciones relacionada con los roles y los privilegios de los usuarios que son:

  • Todo privilegio del sistema o de objeto que permite a un usuario realizar una operación DDL se pueden usar si se reciben a través de un rol, con excepción del privilegio REFERENCES que no puede usarse si se recibe por medio de un rol.
  • Todo privilegio de sistema o de objeto que permite a un usuario realizar una operación DML que es requerida para ejecutar una sentencia DDL no se puede usar para ejecutar la sentencia DDL cuando se recibe por medio de un rol.
  • ORACLE provee automáticamente los roles CONNECT, RESOURCE, DBA, EXP_FULL_DATABASE and IMP_FULL_DATABASE para todos los usuarios de la base de datos.