Download Integridad y Seguridad en los sistemas de Bases de Datos

Document related concepts

Trigger (base de datos) wikipedia , lookup

SQL wikipedia , lookup

Normalización de bases de datos wikipedia , lookup

Microsoft SQL Server wikipedia , lookup

Procedimiento almacenado wikipedia , lookup

Transcript
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