lunes, 14 de abril de 2014

SEGURIDAD E INTEGRIDA DE UNA BASE DE DATO

SEGURIDAD E INTEGRIDAD La información que se almacena en la base de datos debe protegerse contra el acceso no autorizado, la destrucción o alteración con fines indebidos y la introducción accidental de inconsistencia. VIOLACIONES DE LA SEGURIDAD E INTEGRIDAD El mal uso que se haga de la base de datos puede ser intencionado *con fines indebidos (o accidental. La perdida accidental de la consistencia de los datos puede deberse a. Caídas durante el procesamiento de las transacciones. Anomalías por acceso concurrente a la base de datos. Anomalías que resultan de la distribución de los datos entre varios computadores. Un error lógico que viola la suposición de que las transacciones respetan las protecciones de consistencia de la base de datos. Es mas fácil prevenir la perdida accidental de la consistencia de los datos que prevenir el acceso mal intencionado a la base de datos. Algunas de las formas de acceso indebido son las siguientes. lectura de datos sin autorización modificación de datos sin autorización destrucción no autorizada de los datos Para proteger la base de datos es necesario adoptar medidas de seguridad en varios niveles. Físico. La localidad o localidades que contienen a los sistemas de computadores deben protegerse físicamente contra la penetración armada o clandestina de intrusos. Humano. Debe tenerse mucho cuidado al concederse autorización o los usuarios para reducir la probabilidad de que un usuario autorizado permita el acceso a un intruso a cambio de sobornos u otros favores. Sistemas operativos. A un que el sistema de base de datos este bien protegido ,si no se protege de forma adecuada el sistema operativo este puede servir para obtener acceso sin autorización a la base de datos .la seguridad a nivel software dentro del sistema operativo es tan importante como la seguridad física. Sistema de base de datos. algunos usuarios estén autorizados para tener acceso a una porción limitada de la base de datos. Es posible que también algunos usuarios se les permitan hacer consultas, pero se les prohíbe modificar la base de datos. En muchas aplicaciones vale la pena dedicar un esfuerzo considerable a la conservación de la seguridad e integridad de la base de datos. La seguridad dentro del sistema operativo se implementa en varios niveles que van desde palabras claves para tener acceso al sistema hasta el aislamiento de procesos concurrentes que se ejecutan en el sistema. El sistema de archivos proporciona también cierto grado de protección. El presente análisis de la seguridad lo haremos en términos del modelo relacional, a un que los conceptos de este capitulo se pueden aplicar por igual a todos los modelos de datos.

AUTORIZACIONES Y VISITAS

AUTORIZACIONES Y VISTAS El concepto de vistas que es una forma de proporcionar al usuario un modelo personalizado de la base de datos. El uso del sistema es más sencillo por que el usuario puede restringir su atención a los datos que le interesan. La seguridad se logra si se cuenta con un mecanismo que limite a los usuarios a su vista o vistas personales. Las bases de datos relacionales cuentan con dos niveles de seguridad. · Relación. Puede permitirse o impedirse que el usuario tenga acceso directo a una relación. · Vistas. Puede permitirse o impedirse que el usuario tenga acceso a la información que aparece en una vista. A un que es posible impedir que un usuario tenga acceso directo a una relación, puede permitírsele acceso a una parte de esa relación por medio de una vista. De tal manera es posible utilizar una combinación de seguridad a nivel relacional y al nivel de vista para limitar el acceso de usuarios exclusivamente a los datos que necesita. Un ejemplo bancario considerar un empleado que necesita saber los nombres de los clientes de cada una de las sucursales .el empleado no cuenta con autorización para consultar información referente a prestamos o cuentas especificas que pudiera tener el cliente ,por tanto es preciso impedir que el empleado tenga acceso a las relaciones prestamos y depósitos .para que el empleado pueda obtener la información que necesita se le concede acceso a la vista todos-clientes que consta solo de los nombres de los clientes y las sucursales a las que ellos pertenecen . Utilizando SQL definimos esta vista. Create view todos-clientes as (select nombre-sucursal,nombre-cliente from deposito) Union (select nombre-sucursal,nombre-cliente from prestamo) Suponemos que el empleado hace la consulta SQL. Select* from todos-clientes Un usuario puede tener varias formas de autorización sobre partes de la base de datos. Autorización de lectura, que permite leer, pero no modificar, la base de datos. Autorización de inserción, que permite insertar datos nuevos ,pero no modificar los ya existentes Autorización de actualización, que permite modificar la información pero no permite la eliminación de datos Autorización de borrado. que permite la eliminación de datos. Un usuario puede tener asignados todos, ninguno o una combinación de los tipos de autorización anteriores. Además es posible autorizar al usuario para que modifique el esquema de la base de datos. Autorización de índice .que permite la creación y eliminación de índices. Autorización de recursos. que permite la creación de relaciones nuevas. Autorización de alteración. que permite agregar o eliminar atributos de una relación. Autorización de eliminación. Que permite eliminar relaciones La creación de una vista no requiere de autorización de recursos .el usuario que crea una vista no recibe necesariamente todos los privilegios sobre esa vista .tal usuario solo recibe aquellos privilegios que no provean una autorización adicional mas de la que el usuario ya tenia. La forma fundamental de autoridad es la que se le da al administrador de la base de datos .el administrador de la base de datos puede entre otras cosas autorizar nuevos usuarios reestructurar la base de datos etc. esta forma de autorización es análoga a la que se provee a un superusuario o al operador para el sistema operativo. Al usuario al que se le ha concedido alguna forma de autoridad se le puede permitir pasar esta autoridad a otros usuarios. Sin embargo hay que tener cuidado acerca de cómo se puede pasar la autorización entre usuarios para asegurar que tal autorización pueda ser anulada en el futuro. Para dar un ejemplo, analizaremos la concesión de autorizaciones de actualización de la relación depósito de la base de datos bancaria. Suponemos que en un principio el administrador de la base de datos concede autorizaciones de actualización de depósito a los usuarios U1,U2,U3. estos usuarios ,a su vez ,pueden transferir la autorización a otros .la transferencia de autorización de un usuarios a otro se representa mediante un grafo de autorización .

ESPECIFICACION DE LA SEGURIDAD EN SQL

ESPECIFICACIÓN DE LA SEGURIDAD EN SQL El lenguaje de definición de datos SQL incluye mandatos para conceder y revocar privilegios. IBM , SAA , SQL Incluyen una lista modificada de privilegios . Alter. ( Modificar ) Delete.( borrar ) Index. ( induce ) Insert. ( Insertar ) Select. ( Elegir ) update( actualizar ) grant ( conceder ) revoke ( revocar ) El privilegio select esta en correspondencia con el privilegio read. El SQL estándar incluye los privilegios delete ,insert,select y update. Incluye también el privilegio references (referencias),que restringe la habilidad del usuario a crear relaciones .la anulación de los privilegios de un usuario puede causar que otros usuarios pierdan ese privilegio.

CIFRADO

CIFRADO Existe un gran número de técnicas para cifrar la información. Es probable que las técnicas más sencillas no protejan de manera adecuada los datos, ya que puede ser facial para un usuario no autorizado romper el código. Las buenas técnicas de cifrado tienen las siguientes propiedades: para los usuarios autorizados es relativamente sencillo cifrar y descifrar datos. el esquema de cifrado no depende de mantener en secreto el algoritmo, si no de un parámetro del algoritmo llamado clave de cifrado. para un intruso es muy difícil determinar cual es la clave de cifrado. El estándar de cifrado de datos (data encryption standard) se basa tanto en la sustitución de caracteres como en la alteración de su orden de acuerdo con una clave de cifrado. Para que este sistema funcione, es necesario proporcionar las claves de cifrado a los usuarios autorizados a través de un mecanismo seguro.

CONCLUSIONES

CONCLUSIONES Es mas fácil evitar la perdida accidental de consistencia de la información que permitir el acceso malintencionado a la base de datos .no es posible proteger de manera absoluta a la base de datos contra abusos ilícitos, pero puede hacerse que el coste sea tal alto que frustré casi todos los intentos de lograr acceso sin autorización a la base de datos. Un usuario puede disponer de un modelo personalizado de la base de datos aprovechando el concepto de vistas. Una vista puede ocultar los datos que el usuario no necesita conocer. La seguridad puede lograrse si se cuenta con un mecanismo que restrinja al usuario a su vista o vistas personales. Puede utilizarse una combinación de seguridad a nivel de relaciones y de vistas para limitar el acceso del usuario exclusivamente a los datos que necesita. Un usuario puede contar con varios tipos de autorización sobre partes de la base de datos .la autorización es un modo de proteger el sistema de base de datos contra el acceso no autorizado, o mal intencionado .puede ser que un usuario al que se haya concedido algún tipo de autorización la conceda a su vez a otros usuarios .no obstante es preciso cuidar mucho la forma en que pueda transmitirse la autorización entre usuarios para garantizar que se pueda revocar la misma en cualquier fecha posterior. Es posible que todas las precauciones que tome el sistema de base de datos para autorizar el acceso no sea n suficientes para proteger los datos importantes .en tales casos se puede cifrar la información .para leer información cifrada es necesario que el lector conozca la forma de descifrar los datos. Cuando se permite el acceso ala información para estudios estadísticos es difícil garantizar la privacidad de los individuos .una forma sencilla de impedir posibles violaciones de la seguridad es hacer que el sistema rechace todas las consultas que involucren a menos de un numero previamente determinado de individuos .otra técnica para mantener la seguridad es la contaminación de los datos. Esta se basa en la falsificación al azar de los datos que se proporcionan en respuesta a una consulta .una técnica similar se basa en la modificación aleatoria de la consulta. En estas dos técnicas debe lograrse un equilibrio entre la exactitud y la seguridad .no existe un método de protección de datos estadísticos que garantice que ningún usuario malintencionado podrá obtener información individual .no obstante, una técnica apropiada puede hacer que el coste en términos de tiempo y dinero sea tan alto que detenga la mayor parte de los posibles abusos.

INTEGRIDAD DE DATOS

UNIDAD DIDACTICA I: INTEGRIDAD DE DATOS Elaborado por: Prof. Gloria Pérez Los SGBD relacional deben encargarse de mantener la integridad de los datos almacenados en una base de datos con respecto a las reglas predefinidas o restricciones. La integridad también puede verificarse inmediatamente antes del momento de introducir los datos a la base de datos (por ejemplo, en un formulario empleando validación de datos).. El término integridad de datos se refiere a la corrección y completitud de los datos en una base de datos. Cuando los contenidos de una base de datos se modifican con sentencias INSERT, DELETE o UPDATE, la integridad de los datos almacenados puede perderse de muchas maneras diferentes, ocurriendo errores de integridad como son: Pueden añadirse datos no válidos a la base de datos, tales como un pedido que especifica un producto no existente. Pueden modificarse datos existentes tomando un valor incorrecto, como por ejemplo si se reasigna un vendedor a una oficina no existente. El ingreso de un tipo de dato incorrecto dentro de un campo. Por ejemplo, ingresar un texto cuando se espera un número entero. Puede ser la existencia de un valor numérico (id cliente) en la compra de un producto por parte de un cliente que no existe en su correspondiente tabla con ese número. También puede suceder que se elimine una fila padre con dos o más filas hijos que quedarían "huérfanas". Por todo lo anteriormente mencionado es necesario establecer restricciones o reglas de integridad en las base de datos. RESTRICCIONES Las restricciones o reglas de integridad que tiene el modelo relacional se denominan restricciones de integridad. Estas restricciones deben ser especificadas, en forma explícita, en el esquema relacional. Se espera que estas restricciones se cumplan para cada caso (u ocurrencia) del esquema de la base de datos, de forma de garantizar la integridad de la data. Por ejemplo la base de datos alumnos, profesores y cursos para una escuela o facultad, donde se tiene algunas reglas de integridad que serían: * Un alumno no puede estar inscrito en más de cinco materias. * Un profesor no puede dar más de dos materias. * Un curso no puede tener menos de 5 alumnos ni más de 25. * Las calificaciones no pueden tomar valores fuera del rango 1 al 20. Tipos de Restricciones de Integridad en Bases de Datos Relacionales Integridad de entidad Integridad de dominio Integridad referencial Integrida definida por el usuario

INTEGRIDA DE DOMINIO

Integridad de dominio: Cuando se crea una tabla cada columna tiene un tipo de datos y el DBMS asegura que solamente los datos del tipo especificado sean ingresados en la tabla. La integridad de dominio viene dada por la validez de las entradas para una columna determinada. Se refiere al tipo de definición del dominio. Controla la sintaxis y la semántica de cualquier dato. Puede ocurrir que sobre un dominio se definen atributos que, semánticamente, sean diferentes pero que sean, a su vez, equivalentes dado que poseen el mismo dominio Restringimos los valores que puede tomar un atributo respecto a su dominio, por ejemplo EDAD >= 18. Por ejemplo: Considere la relación: VIAJE(nº_viaje, nº_zona, fecha_lleg) Podrían definirse los siguientes dominios: Número: entero de cinco dígitos. Fecha: fecha definida con un formato ´date´ (dd/mm/aa) Entonces, los ítems que conforman los atributos de la relación Viaje, se definen de la siguiente manera: nº_viaje se define sobre Número nº_zona se define sobre Número (el mismo dominio) fecha_lleg se define sobre Fecha (el mismo dominio) De esta forma, al establecer un conjunto definido de dominios, estos pueden ser utilizados por diferentes atributos de la misma relación o de relaciones diferentes.

INTEGRIDA DE ENTIDA

Integridad de entidad: Establece que la clave primaria de una tabla debe tener un valor único para cada fila de la tabla, sino la base de datos perderá su integridad. Se especifica en la sentencia CREATE TABLE. El DBMS comprueba automáticamente la unicidad del valor de la clave primaria con cada sentencia INSERT Y UPDATE. Un intento de insertar o actualizar una fila con un valor de la clave primaria ya existente fallará. La clave primaria de una entidad no puede tener valores nulos y siempre deberá ser única, por ejemplo la CI.

REGLA DE INTEGRIDA REFERENCIAL

Regla de Integridad referencial: Según Tedd Codd, esta regla involucra a dos relaciones (tablas) e impone la restricción que un grupo de atributos en una relación es clave primaria en otra tabla. La definición de esta característica en la construcción de la Base de Datos, impide ingresar valores en algunos atributos de tuplas que no tengan su correspondencia en la tabla relacionada. Como ejemplos podemos mostrar algunos casos: Impedir incluir novedades de nomina a una persona que no exista como trabajador en el archivo maestro de empleados. Impedir facturar a un cliente que no esté previamente creado en el archivo de clientes. Impedir borrar de la lista de clientes un registro cuyo código esté incluido en la relación de cuentas por cobrar Otra de las definiciones de Integridad referencial consiste en que es una propiedad de las bases de datos que garantiza que un registro se relacione con otros registros válidos asegurando la integridad entre las claves ajenas y primarias (relaciones padre/hijo).. La integridad referencial garantiza que los valores de clave sean coherentes en las distintas tablas. Para conseguir esa coherencia, es preciso que no haya referencias a valores inexistentes y que, si cambia el valor de una clave, todas las referencias a ella se cambien en consecuencia en toda la base de datos. Por lo que se concluye que las claves ajenas de una tabla hija se tienen que corresponder con la clave primaria de la tabla padre con la que se relaciona Cuando se exige la integridad referencial, SQL impide a los usuarios: Agregar o cambiar filas en una tabla relacionada si no hay ninguna fila asociada en la tabla principal. Cambiar valores en una tabla principal que crea filas huérfanas en una tabla relacionada. Eliminar filas de una tabla principal cuando hay filas relacionadas coincidentes. Por ejemplo, en las tablas SalesOrderDetail y Product de la base de datos Tienda, la integridad referencial se basa en la relación entre la clave externa (ProductID) de la tabla SalesOrderDetail y la clave principal (ProductID) de la tabla Product. Esta relación garantiza que un pedido de ventas no pueda nunca hacer referencia a un producto que no existe en la tabla Product.

INTEGRIDAD DEFINIDA POR EL USUARIO

Integridad definida por el usuario La integridad definida por el usuario permite definir reglas de empresa específicas que no pertenecen a ninguna otra categoría de integridad. Todas las categorías de integridad admiten la integridad definida por el usuario. Esto incluye todas las restricciones de nivel de columna y nivel de tabla en CREATE TABLE, procedimientos almacenados y desencadenadores.

domingo, 13 de abril de 2014

EJERCICIOS DE BASE DE DATOS

GUIA DE EJERCICIOS SOBRE DISPARADORES EN POSTGRESQL 9.1 Ejercicio 1 La tabla item no tiene memoria de los cambios que han sufrido sus tuplas, si alguien viene y cambia el precio de venta de un artículo, no hay forma de obtener el precio anterior. Si alguien borra un artículo, tampoco sabremos que artículo ha sido borrado ni por quien. a) Crear un trigger que almacene los cambios de precio_venta en la tabla item. Solución a) 1. createdb -p 5432 -h 127.0.0.1 -U laboratorio prueba 2. psql -p 5432 -h 127.0.0.1 -U laboratorio prueba 3. create table item (item_id serial int4 not null, nombre varchar(150) not null, tipo varchar(100) not null, cantidad int4 not null, precio_compra float8 not null, precio_venta float8 not null, primary key (item_id)); 4. create table item_actualizado (item_id int4 not null, nombre varchar(150) not null, precio_compra float8 not null, precio_venta float8 not null, autor varchar (100) not null, fecha_cambio date not null, nomb_comando char(20), foreign key (item_id) references item(item_id)); 5. create language 'plpgsql'; 6. CREATE FUNCTION item_actualizado() RETURNS TRIGGER AS $$ BEGIN IF (TG_OP='UPDATE') THEN IF (OLD.precio_venta != NEW.precio_venta) THEN INSERT INTO item_actualizado VALUES (OLD.item_id, OLD.nombre, OLD.precio_venta, NEW.precio_venta, current_user, current_date, TG_OP); END IF; END IF; RETURN NULL; END; $$ language 'plpgsql'; 7. CREATE TRIGGER actualizar_item AFTER UPDATE ON item FOR EACH ROW EXECUTE PROCEDURE item_actualizado(); 8. insert into item (nombre, tipo, cantidad, precio_compra, precio_venta) values ('monitor', 'vga','5','100', '150'); 9. insert into item (nombre, tipo, cantidad, precio_compra, precio_venta) values ('mouse', 'optico','3','30', '35'); 10. select * from item; UPDATE item SET precio_venta='40' WHERE item_id='2'; select * from item_actualizado; UPDATE item SET precio_venta='45' WHERE item_id='2'; select * from item_actualizado; b) Crear un trigger que almacene los cambios de stock en la tabla item. Ejercicio 2: A la tabla Item_actualizado añadir un atributo hora_cambio que almacene la hora de lamodificación. Ejercicio 3: Tenemos la tabla Empleado, con los campos id, nombres, apellidos y fecha. Vamos a crear un disparador para que cada vez que se inserte un registro en la tabla, se coloque automáticamente la fecha actual en el campo Fecha. Tabla: Empleado CI:varchar(10) Nombres: varchar(25) Apellidos: varchar(25) Fecha: date Ejercicio 4. Elaborar un trigger que registre a todos los empleados dados de baja por la empresa XY, con el objetivo de poder auditar los cambios realizados en el departamento de personal. Ejercicio 5: Tenemos la tabla Obreros, con los campos ci varchar(10) Primary key, Nombres Apell, varchar(40), dir varchar(60) not null y salario float8. Vamos a crear un trigger que verifique el valor del campo salario de los obreros, el cual debe ser siempre igual al salario mínimo (1,200 Bs.F). Con este trigger nos aseguramos de que cada vez que se actualice un registro, el valor de salario siempre sea igual a 1200,00 Bs.F. Ejercicio 6: En la dirección de informática del ISP, se requiere crear un trigger que verifique de que cada vez que se actualice el salario de un empleado, el valor del mismo sea siempre positivo, si fuera negativo que coloque automáticamente 0 como valor. La base de datos se llama: ISP Tenemos la tabla Personal e insertar los siguientes datos: CI: varchar(10) NombApell: varchar(40) not null Direccion: varchar(60) Sueldo: float8 CI: 5236456 NombApell: Mirta Martínez Dirección: Valencia Sueldo: 2045