Integridad y Seguridad en los sistemas de Bases de Datos Javier Escobar Luis Ramirez Omar Asprino Contenido 1. 2. Restricciones de Integridad 1. Claves Primarias 2. Restricciones de los Dominios 3. Integridad Referencial 4. Asertos 5. Disparadores (Triggers) Seguridad y Autorización 1. Tipos de Seguridad 2. Seguridad de la Base de Datos y el DBA 3. Violaciones de Seguridad 4. Autorizaciones y Vistas 5. Cifrado y Autentificación 6. Control de Acceso Discrecional 7. Control de Acceso Obligatorio 1. Integridad y Seguridad Las restricciones de integridad proporcionan un medio de asegurar que las modificaciones hechas en la base de datos no provoquen la pérdida de la consistencia de los datos. En el modelo Entidad – Interrelación existen dos restricciones: •Declaración de claves (Regla de la Entidad) •Forma de la relación (Regla de Integridad Referencial) 1.1. Claves Primarias •Es el mínimo subconjunto no vacío de atributos que permiten identificar en forma unívoca una tupla dentro de la relación. •Si existen varios conjuntos que cumplan esta condición se denominan llaves candidatas y debe ser seleccionada una de estas como llave primaria. •Los atributos que conforman denominan atributos primos. la clave primaria se •Esta definición determina que para un valor llave primaria solo existirá una tupla o registro en la tabla. Esta situación garantiza que no se tendrá información repetida o discordante para un valor de clave y puede ser usada como control, para evitar la inclusión de información inconsistente en las tablas. 1.2. Restricciones de los Dominios •A cada atributo se le debe asociar un dominio de valores posibles. •El asociar un dominio a cierto atributo constituye una restricción sobre los valores que puede tomar. •Además de los dominios "naturales", usados como tipos de datos, el administrador del sistema puede generar sus propios dominios definiendo el conjunto de valores permitidos. •Esta característica, usada en forma correcta, se convierte en mecanismo de control, restricción y validación desde el DBMS, de los datos a ingresar. 1.3. Integridad Referencial (I) •La condición de Integridad Referencial se refiere a que si un valor que aparece en una relación para un conjunto de atributos determinado entonces aparece también en otra relación para un cierto conjunto de atributos. •La integridad referencial es una propiedad deseable en las bases de datos mediante la cual se garantiza que una entidad siempre se relaciona con otras entidades que existen en la base de datos. •La integridad referencial es un sistema de reglas que utilizan la mayoría de las bases de datos relacionales para asegurarse que los registros de tablas relacionadas son válidos y que no se borren o cambien datos relacionados de forma accidental produciendo errores de integridad. 1.3. Integridad Referencial (II) •Cuando se define una columna como clave foránea, las filas de la tabla pueden contener en esa columna o bien el valor nulo (ningún valor), o bien un valor que existe en otra tabla, un error sería asignar a un habitante una población que no está en la tabla de poblaciones. •La integridad referencial consiste en que los datos que referencian otros (claves foráneas) deben ser correctos. •La integridad referencial se activa en cuanto creamos una clave foránea y a partir de ese momento se comprueba cada vez que se modifiquen datos que puedan alterarla. 1.3. Integridad Referencial (III) Factura(Número, Factura(Número, CI, CI, Monto) Monto) Persona(CI, Persona(CI, Nombre, Nombre, Dirección) Dirección) Una persona se identifica por su atributo CI (Cédula de Identidad). Tiene además otros atributos como el nombre y la dirección. La entidad Factura tiene un atributo CI (del cliente) que identifica a quién pertenece la factura. Por sentido común es evidente que todo valor de CI debe corresponder con algún valor existente del atributo CI de la entidad Persona. 1.3. Integridad Referencial (IV) Cuando se crea una nueva instancia de Factura, la integridad referencial exige que el atributo CI coincida con el atributo CI de alguna instancia de la entidad Persona. En caso contrario, no se permite la operación. Cuando se intenta eliminar una instancia de Persona, la integridad referencial exige que no exista ninguna factura asociada, es decir, se comprueba que no existe ninguna instancia de Factura cuyo atributo CI coincida con el atributo CI de la instancia a borrar. En caso contrario, no se permite la operación. 1.3. Integridad Referencial (V) ¿Cuándo se pueden producir errores en los datos? •Cuando insertamos una nueva fila en la tabla secundaria y el valor de la clave foránea no existe en la tabla principal. •Cuando modificamos el valor de la principal de un registro que tiene ‘hijos’. clave •Cuando modificamos el valor de la clave foránea, el nuevo valor debe existir en la tabla principal. •Cuando queremos borrar una fila de la tabla principal y ese registro tiene ‘hijos’. 1.3. Integridad Referencial (VI) •Actualizar registros en cascada: Esta opción le indica al SGBD que cuando se cambie un valor del campo clave de la tabla principal, automáticamente cambiará el valor de la clave foránea de los registros relacionados en la tabla secundaria. •Eliminar registros en cascada: Esta opción le indica al SGBD que cuando se elimina un registro de la tabla principal automáticamente se borran también los registros relacionados en la tabla secundaria. 1.4. Asertos (I) •Un Aserto es un predicado que expresa una condición que se desea que la base de datos satisfaga siempre. Las integridades antes vistas son formas especiales de asertos. •Cuando se crea un aserto el sistema comprueba su validez. •Si el aserto es válido, sólo se permiten las modificaciones posteriores de la base de datos que no hagan que se viole el aserto. 1.4. Asertos (II) La suma de todos los importes de los préstamos de cada sucursal debe ser menor que la suma de todos los saldos de las cuentas de esa sucursal. create assertion restricción-suma check (not exists (select * from sucursal where (select sum(importe) from préstamo where préstamo.nombre-sucursal = sucursal.nombre-sucursal) >= (select sum (importe) from cuenta where préstamo.nombre-sucursal = sucursal.nombre-sucursal))) 1.5. Disparadores (Triggers) (I) Un Disparador es una orden que el sistema ejecuta de manera automática como efecto secundario de la modificación de la base de datos. Incluidos en el estándar SQL 1999, son mecanismos útiles ejecutados por el SGBD para alertar a los usuarios o para realizar de manera automática ciertas tareas cuando se cumplen determinadas condiciones. 1.5. Disparadores (Triggers)(II) Una base de datos que tiene un conjunto de disparadores asociados se conoce como una Base de Datos Activa. Para diseñar un mecanismo disparador hay que cumplir dos requisitos: •Especificar las condiciones en las que se va a ejecutar el disparador. Esto es, el evento que causa la comprobación del disparador y una condición que se debe cumplir para ejecutar el disparador. •Especificar las acciones que se van a realizar cuando se ejecute el disparador. 1.5. Disparadores (Triggers) (III) La descripción de un disparador comprende de tres partes: •Evento: Es el cambio hecho sobre la base de datos que activa al disparador. •Condición: Es la solicitud o prueba que se ejecuta cuando se activa el disparador. •Acción: Es un procedimiento que es ejecutado cuando el disparador es activado y la condición es verdadera. 1.5. Disparadores (Triggers) (IV) •Sintaxis para la creación de triggers CREATE CREATE TRIGGER TRIGGER <trigger <trigger name> name> <BEFORE|AFTER> <BEFORE|AFTER> <INSERT|DELETE|UPDATE> <INSERT|DELETE|UPDATE> ON ON <relation <relation name> name> FOR FOR EACH EACH <ROW|STATEMENT> <ROW|STATEMENT> EXECUTE EXECUTE PROCEDURE PROCEDURE <procedure <procedure name> name> (<function (<function args>); args>); 1.5. Disparadores (Triggers) (V) CREATE CREATE TRIGGER TRIGGER iniciar_conteo iniciar_conteo BEFORE BEFORE INSERT INSERT ON ON Estudiantes Estudiantes DECLARE DECLARE cont cont INTEGER; INTEGER; BEGIN BEGIN cont cont := := 0; 0; END END CREATE CREATE TRIGGER TRIGGER contar contar AFTER AFTER INSERT INSERT ON ON Estudiantes Estudiantes WHEN WHEN (new.edad (new.edad << 18) 18) FOR FOR EACH EACH ROW ROW BEGIN BEGIN cont cont := := cont cont ++ 1; 1; END END 1.5. Disparadores (Triggers) (VI) •Los disparadores se crean con la finalidad de mantener la integridad del sistema. •La activación de un disparador puede activar otro disparador y crear así una cadena de activación de disparadores. Si un disparador reactiva un disparador anterior se les denomina disparadores recursivos. •Los disparadores pueden tener múltiples usos como la creación de historiales de uso de la base de datos y dotar de funciones adicionales al SGBD donde se ejecutan. 2.1. Tipos de Seguridad (I) La seguridad de las bases de datos es una área amplia que abarca varios temas, entre ellos se encuentran los siguientes: •Cuestiones éticas y legales relativas al derecho de tener acceso a cierta información •Cuestiones de política a nivel gubernamental, institucional o corporativo, relacionadas con el tipo de información que no debe estar disponible para el publico •Cuestiones relacionadas con el sistema, como los niveles del sistema en que deben manejarse diversas funciones de seguridad •Las necesidades en las organizaciones de identificar múltiples niveles de seguridad y clasificar los datos y los usuarios según estos niveles 2.1. Tipos de Seguridad (II) En la actualidad se acostumbra hablar de dos tipos de mecanismos de seguridad en las bases de datos: •Los mecanismos de seguridad discrecionales se usan para otorgar privilegios a los usuarios, incluida la capacidad de tener acceso a archivos, registros o campos de datos específicos en un determinado modo. •Los mecanismos de seguridad obligatorios sirven para imponer igualdad de múltiples niveles clasificando los datos y los usuarios en varias clases (o niveles) de seguridad e implementando después la política de seguridad apropiada de la organización. 2.1. Tipos de Seguridad (III) Un problema de seguridad común a todos los sistemas de computo es el de evitar que personas no autorizadas tengan acceso al sistema, ya sea para obtener información o para efectuar cambios mal intencionados en una porción de la base de datos. El mecanismo de seguridad de un SGBD debe incluir formas de restringir el acceso al sistema como un todo. Esta función se denomina control de acceso y se pone en practicas creando cuentas de usuarios y contraseñas para que es SGBD controle el proceso de entrada al sistema. 2.1. Tipos de Seguridad (IV) Otra técnica de seguridad es el cifrado de datos, que sirven para proteger datos confidenciales que se transmiten por satélite o por algún otro tipo de red de comunicaciones. El cifrado puede proveer protección adicional a secciones confidenciales de una base de datos. Los datos se codifican mediante algún algoritmo de codificación. Un usuario no autorizado que tenga acceso a los datos codificados tendrá problemas para descifrarlos, pero un usuario autorizado contara con algoritmos (o claves) de codificación o descifrado para descifrarlos. 2.2. Seguridad de la base de datos y el DBA El administrador de bases de datos (DBA) es la autoridad central que controla un sistema de este tipo. El DBA tiene una cuenta privilegiada en el SGBD, a veces denominada cuenta del sistema, que confiere capacidades extraordinarias no disponibles para cuentas y usuarios ordinarios de la base de datos. El DBA ejecuta los siguientes tipos de acciones: •Creación de cuentas •Concesión de privilegios •Revocación de privilegios •Asignación de niveles de seguridad El DBA es el responsable de la seguridad global del sistema de base de datos. 2.3. Violaciones de Seguridad (I) Entre las formas de acceso malintencionado encuentran: •La lectura no autorizada de los datos (robo información) •La modificación no autorizada de los datos •La destrucción no autorizada de los datos se de La seguridad de las bases de datos se refiere a la protección frente a accesos malintencionados. Para proteger la base de datos hay que adoptar medidas de seguridad en varios niveles: • • • • • Sistema de bases de datos Sistema operativo Red Físico Humano 2.3. Violaciones de Seguridad (II) Debe conservarse la seguridad en todos estos niveles si hay que asegurar la seguridad de la base de datos. La debilidad de los niveles bajos de seguridad (físico o humano) permite burlar las medidas de seguridad estrictas de niveles superiores (base de datos). La seguridad dentro del sistema operativo se aplica en varios niveles, que van desde las contraseñas para el acceso al sistema hasta el aislamiento de los procesos concurrentes que se ejecutan en el sistema. El sistema de archivos también proporciona algún nivel de protección. 2.4. Autorizaciones y Vistas (I) Los usuarios pueden tener varios tipos de autorización para diferentes partes de la base de datos. Entre ellas están las siguientes: • La autorización de lectura permite la lectura de los datos, pero no su modificación. • La autorización de inserción permite la inserción de datos nuevos, pero no la modificación de los existentes. • La autorización de actualización permite la modificación de los datos, pero no su borrado. • La autorización de borrado permite el borrado de los datos. 2.4. Autorizaciones y Vistas (II) Además de estas formas de autorización para el acceso a los datos, los usuarios pueden recibir autorización para modificar el esquema de la base de datos: • La autorización de índices permite la creación y borrado de índices. • La autorización de recursos permite la creación de relaciones nuevas. • La autorización de alteración permite el añadido o el borrado de atributos de las relaciones. • La autorización de eliminación permite el borrado de relaciones. 2.4. Autorizaciones y Vistas (III) Recordando el concepto de Vistas, decimos que: •Una vista es una relación virtual. •Una vista se puede construir realizando operaciones como las del álgebra relacional a partir de las relaciones base de la base de datos. Las relaciones base son aquellas que forman parte directa de la base de datos, las que se encuentran almacenadas físicamente. •Estas proporcionan un poderoso mecanismo de seguridad, ocultando partes de la base de datos a ciertos usuarios. El usuario no sabrá que existen aquellos atributos que se han omitido al definir una vista. 2.4. Autorizaciones y Vistas (IV) En Postgre SQL: CREATE TABLE estudiante PRIMARY KEY, edad int2); (nombre varchar(20), nombre ci edad María Juan Luis 17345678 12345657 23456923 17 20 19 ci int8 2.4. Autorizaciones y Vistas (V) CREATE VIEW mayoresedad WHERE edad>18; AS SELECT * FROM nombre ci edad Juan Luis 12345657 23456923 20 19 estudiante Esto permite que cuando se consulte utilizando la vista mayores de edad, sólo se impriman aquellas tuplas donde la edad es mayor a 18 en el caso de la relación Estudiantes… Estas proporcionan un poderoso mecanismo de seguridad, ocultando partes de la base de datos a ciertos usuarios. El usuario no sabrá que existen aquellos atributos que se han omitido al definir una vista. 2.4. Autorizaciones y Vistas (VI) •La creación de vistas no necesita la autorización de recursos. •El usuario que crea una vista no recibe necesariamente todos los privilegios sobre la misma. Ese usuario sólo recibe los privilegios que no proporcionan autorizaciones adicionales respecto de las que ya posee. •Si un usuario crea una vista sobre la que no se puede conceder ninguna autorización, se deniega la solicitud de creación de la vista. 2.5. Cifrado y Autentificación (I) •Una técnica de seguridad es el cifrado de datos que sirve para proteger datos confidenciales que se transmiten por satélite o algún tipo de red de comunicaciones. Asimismo el cifrado puede proveer protección adicional a secciones confidenciales de una base de datos. •Los datos se codifican mediante algún algoritmo de codificación. Un usuario no autorizado tendrá problemas para descifrar los datos codificados, pero un usuario autorizado contará con algoritmos para descifrarlos. 2.5. Cifrado y Autentificación (II) Ejemplo que nos permitirá saber cómo utilizar las nuevas funciones de cifrado y descifrado de DB2 en este caso hipotético para proporcionar una capa adicional de seguridad: SET ENCRYPTION PASSWORD = 'SECRETO' INSERT INTO cliente VALUES('JOSE', ENCRYPT('1111222233334444')) SET ENCRYPTION PASSWORD = 'SECRETO' SELECT nombre, DECRYPT_CHAR(num_tarj) FROM cliente 2.5. Cifrado y Autentificación (III) •En el código anterior, la sentencia Set Encryption Password proporciona a DB2 la clave que se utilizará para cifrar (y descifrar) los datos. •En la sentencia siguiente se muestra cómo se utiliza la función de cifrado de DB2 para codificar el número de la tarjeta de crédito antes de grabarlo en la tabla de DB2. La última sentencia muestra los pasos necesarios para ver el valor original del número de la tarjeta de crédito, ‘1111222233334444’. •En primer lugar, la clave de cifrado debe ser la misma que la que se utilizó para cifrar el número. Después, debe utilizarse una de las funciones de descifrado de DB2 para convertir el valor binario cifrado en el valor original de tipo carácter. 2.5. Cifrado y Autentificación (IV) •No hay palabras clave de SQL o DDS que indiquen a DB2 UDB que cifre o descifre automáticamente los datos. Hay que realizar cambios en la aplicación. •La razón es que el cifrado y descifrado automático no ofrece una capa adicional de seguridad. Si DB2 descifra automáticamente el número de la tarjeta de crédito para todos los usuarios que lean la tabla de clientes, entonces dicho número sería visible para los mismos usuarios que antes de cifrarlo. •Únicamente podrá sacar partido de la seguridad que ofrece el cifrado si cambia las aplicaciones y las interfaces para que descifren de forma selectiva los datos para un subconjunto de usuarios autorizados. 2.6. Control de Acceso Discrecional (I) Obviamente, una BD para una empresa contiene grandes cantidades de información y usualmente tiene varios grupos de usuarios, la mayoría de estos usuarios necesitan acceder sólo a una pequeña parte de los datos. Por ello, un DBMS tiene dos enfoques principales para esto: 1.- Control de acceso discrecional: Previene de accesos no autorizados a la base de datos y está basado en los derechos de acceso o privilegios y mecanismos para darle al usuario tales privilegios. 2.6. Control de Acceso Discrecional (II) Acceso discrecional es un modo de restringir el acceso a la información basado en privilegios. Dos niveles de asignación de privilegios: •Nivel de cuenta: En este nivel el administrador especifica los privilegios particulares que tiene cada usuario, independiente de las tablas de la BD (CREATE TABLE, CREATE VIEW, ALTER, MODIFY, SELECT). •Nivel de relación: En este nivel se controlan los privilegios para tener acceso cada relación o vista individual. Cada tabla de BD tiene asignada una cuenta propietario, que tiene todos los privilegios sobre esa tabla y se encarga de otorgarlos al resto de cuentas. 2.6. Control de Acceso Discrecional (III) En SQL: •Privilegio SELECT para R confiere a la cuenta el privilegio de consultar la BD para obtener datos de R. •Privilegio MODIFY para R confiere a la cuenta el privilegio de modificar las tuplas de la tabla R. •Privilegio REFERENCES para R confiere a la cuenta el privilegio de hacer referencia a la tabla R por media de una clave ajena. •En SQL las intrucciones para asignar privilegios se denomina GRANT y las que los elimina REVOKE. 2.7. Control de Acceso Obligatorio (I) Entre las obligaciones del DBA está otorgar privilegios a los usuarios y clasificar los usuarios y los datos de acuerdo con la política de la organización. Las órdenes privilegiadas del DBA incluyen los siguientes tipos de acciones: 1. Creación de cuentas 2. Concesión de privilegios. 3. Revocación de privilegios. 4. Asignación de niveles de seguridad. La acción 1 de la lista sirve para controlar el acceso al SGBD en general, la 2 y la 3 para controlar las autorizaciones discrecionales y la 4 controla la autorización obligatoria 2.7. Control de Acceso Obligatorio (II) •Los mecanismos de seguridad obligatorios sirven para imponer seguridad de múltiples niveles clasificando los datos y los usuarios en varias clases de seguridad e implementando después la política de seguridad apropiada de la organización. •Consiste en la clasificación de tanto los sujetos como los objetos en el sistema en ‘clases de acceso’ determinan sus características de confidencialidad. que 2.7. Control de Acceso Obligatorio (III) •Una ‘clase de acceso’ es un elemento de un conjunto de ‘clases’ parcialmente ordenadas. Las clases de acceso se definen como un conjunto formado por dos componentes, un ‘nivel de seguridad’ y un ‘conjunto de categorías’. •Cada ‘nivel de seguridad’ es un elemento de un conjunto jerárquicamente ordenado como ‘alto secreto’ (TS), ‘secreto’ (S), ‘confidencial’ (C) y ‘sin clasificar’ (U), donde TS > S > C > U. •El conjunto de categorías es un subconjunto de un conjunto desordenado, donde los elementos pueden reflejar áreas funcionales o diferentes competencias como por ejemplo ‘finanzas’, ‘administración’, ‘ventas’ y ‘compras’ para sistemas comerciales. 2.7. Control de Acceso Obligatorio (IV) Sujetos de autorización •USUARIOS •GRUPOS DE USUARIOS •ROLES •PROCESOS Privilegios de autorización •LEER, ESCRIBIR, EJECUTAR •SELECCIONAR, INSERTAR, ACTUALIZAR, REFERENCIAR, INDEXAR 2.7. Control de Acceso Obligatorio (V) Las políticas de control de acceso se pueden clasificar en dos grupos: • Cerradas: Solamente los accesos autorizados explícitamente son permitidos 2.7. Control de Acceso Obligatorio (VI) Abiertas: Los accesos que no son explícitamente prohibidos son permitidos. Referencias Consultadas •http://www.virtual.unal.edu.co/cursos/sedes/manizales/406002 9/lecciones/cap7-1.html •http://www.aulaclic.es/sql/b_8_1_1.htm •http://es.wikipedia.org/wiki/Integridad_referencial •http://es.tldp.org/Tutoriales/NOTAS-CURSO-BBDD/notascurso-BD/node44.html •Sistemas de Bases de Datos Conceptos Fundamentales. Segunda Edición. Elmasri; Navathe. Pearson Education. México 2000. Javier Escobar