BASE DE DATOS II

Isaac Ortega Muñoz

Base de Datos II

 

 

RESUMEN UNIDAD III

 

La información de la base de datos  almacenada debe estar protegida contra acceso  no autorizado, 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 accidental. La pérdida accidental de la consistencia  de d los datos puede ser 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 varias computadoras.

 

Es mas fácil prevenir la perdida accidental de la consistencia de los datos que prevenir el acceso mal intencionado a la base de de datos.

 

  • Lectura de dato sin autorización
  • Modificación de dato sin autorización
  • Descripción no autorizada

http://schoolwork.blogdiario.com/img/01.gif

 

Prevenir la base de datos  en varios niveles

 

  • FISICO: La localidad o localidades que contienen a los sistemas de computadoras deben protegerse estar fácilmente contra la  penetración  o clandestina de intrusos
  • HUMANO: debe  tenerse mucho cuidado al conceder autorización a los usuarios para poder reducir la probabilidad de que un usuario autorizado permite el acceso a un intruso a cambio de soborno o otros  favores.
  • SISTEMA OPERATIVO: aunque el sistema de la base de datos este protegida, si no se produce la forma adecuada el sistema operativo este pueda servir para obtener sin autorización a la base de datos.
  • SISTEMA DE BASE DE DATOS: puede darse el caso de que algunos usuarios están autorizados solo para tener  accesos a una porción  limitada de la base de datos. Es posible también que a algunos usuarios se les permita hacer consultas, pero se les prohíbe modificar la base de datos.

 

La seguridad en los niveles anteriores debe mantenerse para asegurar la seguridad    de la base de datos. Un punto débil en un nivel bajo de seguridad (físico humano) permite que se burlen medidas de seguridad a alto nivel.

 

AUTORIZACION Y VISTAS

 

Una vista es una forma de proporcionar al usuario un modelo personalizado de la base de datos. Una vista puede ocultar datos que el usuario no tiene necesidad de ver, esta posibilidad sirve tanto para simplificar la utilización del sistema como para fomentar la seguridad .la seguridad se logra si se cuenta con un mecanismo que limite a los usuarios a su vista o vistas personales.  Lo normal es que las bases de datos relacionales  cuenten con dos niveles de seguridad.

 

  • RELACION. Puede permitirse o impedirse que el usuario tenga acceso directo a un relación.
  • VISTA: puede permitirse o impedirse que el usuario tenga acceso a la información que aparece en una vista..

 

Aunque es posible impedir que un usuario tenga acceso directo a una relación, puede permitirse acceso a una parte de la relación por medio de una vista.

 

Un usuario puede tener varias  formas de autorización sobre partes de la base de datos. Entre en ella se encuentran las siguientes:

 

  • AUTORIZACION DE LECTURA: permite leer, pero no modificar la base de datos.
  • AUTORIZACION DE INSERCION: puede insertar datos nuevos, pero no modificarlos los ya existentes.
  • AUTORIZACION DE ACTUALIZACION: permite modificar la información, pero no permite  la eliminación de datos.
  • AUTORIZACION DE BORRADO: permite la eliminación de datos.

 

Es posible autorizar al usuario para que modifique el Esquema de la base de datos.

 

  • AUTORIZACION DE INDICE: permite al creación y eliminación de índices.
  • AUTORIZACION DE RECURSOS: permite la creación de relaciones nuevas.
  • AUTORIZACION DE ALTERACION: permite agregar o eliminar atributos de una relación.
  • ATORIZACION D ELIMINACION: permite eliminar relaciones.

 

Las autorizaciones de eliminación y borrado en cuanto a la que la autorización de borrado solo permite la eliminación de tuplas. Si un usuario elimina todas las tuplas de una relación, estas quedaran vacía  pero seguirá existiendo. Si se eliminan dejara de  existir

 

ESPECIFICAION DE LA SEGURIDAD EN SQL

 

El lenguaje de definición de datos SQL incluye mandatos para conceder y revocar privilegios. El conjunto exacto de privilegios depende de la versión de SQL – el lenguaje original  incluía un conjunto de privilegios sobre relaciones y vistas similares a los de una lista de privilegios:

 

  • Alter ( modificar)
  • Delete (borrar)
  • Index (indice)
  • Insert (insertar)
  • Select (elegir)
  • Update (actualizar)

 

El privilegio select esta en correspondencia con el privilegio read. El SQL estándar incluye privilegios delete, insert, selct, update, incluyendo también el privilegio referentes (referencias) que restringe la habilidad del usuario crear relaciones. Si las relaciones que va a ser creada incluye una clave exterior que referencia los atributos de otra relación. La sentencia que se usa para otorgar privilegios es grant.

 

http://schoolwork.blogdiario.com/img/02.gif 

 

http://schoolwork.blogdiario.com/img/03.gif  

 

 

La lista de privilegios  permite conceder varios privilegios en un solo mandato. La siguiente sentencia grant concede a los usuarios U1 , U2 y U3 la autorización select sobre la relación de sucursal:

 

          Grant select on sucursal to U1,U2,U3

 

La siguiente sentencia grant da a los usuarios U1,U2,U3 autorización de actualización sobre el atributo saldo de la relación deposito.

 

          Grant update (saldo) on deposito to U1,U2,U3

 

El privilegio references  del SQL estándar del ANSI se concede sobre los atributos específicos de una forma similar a los anteriores para el privilegio update. La siguiente sentencia grant permite al usuario U1 crear relaciones que referenciar la clave exterior nombre—sucursal sobre la relación sucursal.

 

          Grant references (nombre-sucursal) on suscrusal to U1

 

La sentencia revoke (revocar) se utiliza para anular la autorización. Toma en forma casi identica a de grant.

 

          Revoke <lista  de privilegios>

          On <nombre de relacion o vista> from <lista de usuarios>

Para revocar el privilegio anterior se escribe:

Revoke select on sucursal from U1,U2,U3

Revoke update (saldo) on deposito  from U1,U2,U3

Revoke references (nombre-sucursal) on sucursal from U1

 

http://schoolwork.blogdiario.com/img/04.gif 

 

 

Tanto para el caso de los controles de flujo, de acceso o de inferencia no se puede evitar que un operador deje en su "mesa de trabajo' una lista de passwords de usuarios o que un indiscreto vaya a consultar las informaciones que pueden estar en algún dispositivo de respaldo.

 

Para evitar este tipo de indiscreción se puede cifrar la información de tal manera que solo pueda ser descifrada por personas -individuos o programas- que conozcan el código secreto.

 

Este método de cifrar mensajes se conoce como criptografía y es muy seguro para el almacenamiento y transporte de la información.

 

Principales elementos de un sistema criptográfico

 

• En primer lugar, se tiene lo que se llama el código que es un método secreto de escritura, en donde el mensaje que se desea almacenar o transportar en una red es codificado y se llama criptograma.

• El proceso de transformar un mensaje en uno codificado se denomina encriptamiento.

 

• Por otra parte, el proceso inverso de transformar un criptograma en un mensaje se

denomina desencriptamiento.

 

 

http://schoolwork.blogdiario.com/img/05.gif 

 

De una manera más formal, se puede decir que un sistema criptográfico consta de cinco componentes:

 

• Un mensaje M que debe almacenarse o transportarse.

• Un criptograma C

• Un conjunto de claves I

• . Un conjunto de reglas de encriptamiento

ei: :M → C con i ∈ I

• . Un conjunto de reglas de desencriptamiento

dj : C → M con j ∈ I

Como ejemplo de un algoritmo de encriptamiento, se puede mencionar el algoritmo de cifrados

de transposición. Este tipo de algoritmo reordena los caracteres que componen el mensaje

según un esquema establecido.

Así, por ejemplo, el algoritmo de transposición columnar, toma un mensaje y lo escribe en una

matriz m x n y el criptograma es el que se genera leyendo el mensaje en forma columnar.

Ejemplo. Considerar el mensaje: ser o no ser; he ahí la cuestión y se desea utilizar una matriz

de n x 5. En este caso, dicha oración queda ubicada de la siguiente forma

 

http://schoolwork.blogdiario.com/img/06.gif 

 

Así el criptograma sería el siguiente:

 

s ee uó enr len ro,aas ht oshíci.

 

Por supuesto que dicho algoritmo es muy sencillo y es relativamente fácil de descifrar.

 

Sin embargo, existen otros tipos de algoritmos más complejos y que permiten alta confiabilidad. Este es el caso de los métodos de encriptamiento llamados de clave pública, inventados en 1976 por W. Diffie y M. Hellmann de la Universidad de Stanford. En este caso el código de encriptamiento no puede invertirse fácilmente para hallar el código de desencriptamiento.

El sistema de encriptamiento público más conocido es el llamado RSA, inventado en 1978 por R. Rivest, A. Shamir y L. Adleman del Massachusetts Institute of Technology. El método se basa en las dos suposiciones siguientes:

 

• Es relativamente fácil determinar dos números primos grandes p y q y multiplicarlos para

obtener un número n = p.q que sirve de base para un código de encriptamiento.

• El proceso inverso, es decir, determinar los números primos p y q a partir del número n es

difícil realizarlo en un tiempo aceptable cuando n es un número muy grande. .

Ejemplo: María desea enviar un mensaje a Carlos, quien escoge dos números primos p y q cuya

división por 3 tenga a 2 como resto. Así, calcula n = p.q y se lo envía a María. Por su parte,

 

María transforma el mensaje en una sucesión de dígitos -lo cual resulta muy, fácil- y la divide en segmentos de longitud n. Sea uno de esos segmentos representado por el número x. María procede a calcular el resto y al dividir. X3 por n y el segmento codificado es el número y. Cuando Carlos recibe el mensaje utiliza un número ultrasecreto e = (2(p-1)(q-l) +1)/3 el cual es entero por las escogencia; de los números primos p y q. El fragmento original por su parte, es decir el número x, es igual al resto de dividir y por n. En este caso a una persona le será imposible descifrar en un tiempo oportuno el criptograma, aunque conozca el número n.

 

Así, aunque se conozca el número n, se requiere factorizar p-q con el fin de descifrar el mensaje. Sin embargo, si los números primos escogidos son muy grandes -de varios cientos de dígitos-, se requeriría mucho tiempo de máquina -inclusive en los computadores más rápidospara lograr tal factorización.

Actualmente, se considera que la técnica para seguridad de la información más barata y segura es la criptografía.

 

BASES DE DATOS ESTADISTICOS

 

Suponemos que el banco del ejemplo  concede a una persona ajena acceso a una base de datos bajo la condición de que solo puede llevar a cabo estudios estadísticos (promedios, medianos, etc.)  con los datos sin divulgar información referente a individuos. En esta sección se examinara el problema de garantizar la privacidad de los individuos al mismo tiempo que se permite el uso de datos  para cálculos estadísticos.

 

Un punto débil  de las bases de datos  estadísticos lo constituyen los casos anormales. Por ejemplo es posible que exista una ciudad en la que  viva solamente un cliente del banco. Supongamos que se pide el total de los saldos de las cuentas bancarias  de todos los clientes del banco que viven en Smalltown. Si en ese lugar  únicamente vive un cliente del banco, el sistema habrá divulgado información   acerca de un individuo. Por supuesto solo se habrá violado la seguridad de  de la información  si el usuario sabe que en Smallotown solo vive un cliente. Esta información puede obtenerse con facilidad si se hace una pregunta estadística; encontrar el número de cliente que vive en Smalltown. Una forma sencilla de impedir posibles violaciones de seguridad, como la que se acaba de describir, es programar al sistema para que se rechace cualquier consulta que comprenda al menos un cierto número de individuos. Suponemos que dicho numero  previamente determinado es n. un usuario malintencionado que  tenga cuenta en el banco puede averiguar el saldo de un individuo haciendo dos consultas. Suponemos que desea saber cuanto dinero tiene Rollo en su cuenta.

 

Escoge n clientes y determina:

 

·       X, el total de saldos de su propia cuenta

·       Y, el total de saldo de la cuenta de Rollo

 

El saldo total de Rollo es:

Y—X + el saldo

 

Otra técnica para mantener la seguridad es la contaminación de los datos. Se basa en la falsificación al azar de los datos que se proporcionan en respuesta a una consulta. La falsificación debe hacerse de tal manera que no destruya el significado estadístico de la repuesta. Otra técnica similar se basa en la modificación aleatoria de la consulta misma. En estas  dos técnicas debe lograse un equilibrio entre la exactitud y la seguridad. No existe un método de protección de datos estadísticos que garanticé 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 tal alto que detenga la mayor parte de los posibles abusos.

 

=====================================================

Triggers

Postgres tiene algunas interfaces cliente como Perl, Tcl, Python y C, así como dos Lenguajes Procedurales (PL). También es posible llamar a funciones C como acciones trigger. Notar que los eventos trigger a nivel STATEMENT no están soportados en la versión actual. Actualmente es posible especificar BEFORE o AFTER en los INSERT, DELETE o UPDATE de un registro como un evento trigger.

Creación de Triggers

Si un evento trigger ocurre, el administrador de triggers (llamado Ejecutor) inicializa la estructura global TriggerData *CurrentTriggerData (descrita más abajo) y llama a la función trigger para procesar el evento.

La función trigger debe ser creada antes que el trigger, y debe hacerse como una función sin argumentos, y códigos de retorno opacos.

La sintaxis para la creación de triggers es la siguiente:

 

CREATE TRIGGER   
ON  FOR EACH 
EXECUTE PROCEDURE (); 

 

El nombre del trigger se usará si se desea eliminar el trigger. Se usa como argumento del comando DROP TRIGGER.

La palabra siguiente determina si la función debe ser llamada antes (BEFORE) o después (AFTER) del evento.

El siguiente elemento del comando determina en que evento/s será llamada la función. Es posible especificar múltiples eventos utilizado el operador OR.

El nombre de la relación (relation name) determinará la tabla afectada por el evento.

La instrucción FOR EACH determina si el trigger se ejecutará para cada fila afectada o bien antes (o después) de que la secuencia se haya completado.

El nombre del procedimiento (procedure name) es la función C llamada.

Los argumentos son pasados a la función en la estructura CurrentTriggerData. El propósito de pasar los argumentos a la función es permitir a triggers diferentes con requisitos similares llamar a la misma función.

Además, la función puede ser utilizada para disparar distintas relaciones (estas funciones son llamadas "general trigger funcions").

Como ejemplo de utilización de lo descrito, se puede hacer una función general que toma como argumentos dos nombres de campo e inserta el nombre del usuario y la fecha (timestamp) actuales en ellos. Esto permite, por ejemplo, utilizar los triggers en los eventos INSERT para realizar un seguimiento automático de la creación de registros en una tabla de transacciones. Se podría utilizar también para registrar actualizaciones si es utilizado en un evento UPDATE.

Las funciones trigger retornan un área de tuplas (HeapTuple) al ejecutor. Esto es ignorado para trigger lanzados tras (AFTER) una operación INSERT, DELETE o UPDATE, pero permite lo siguiente a los triggers BEFORE: - retornar NULL e ignorar la operación para la tupla actual (y de este modo la tupla no será insertada/actualizada/borrada); - devolver un puntero a otra tupla (solo en eventos INSERT y UPDATE) que serán insertados (como la nueva versión de la tupla actualizada en caso de UPDATE) en lugar de la tupla original.

Notar que no hay inicialización por parte del CREATE TRIGGER handler. Esto será cambiado en el futuro. Además, si más de un trigger es definido para el mismo evento en la misma relación, el orden de ejecución de los triggers es impredecible. Esto puede ser cambiado en el futuro.

Si una función trigger ejecuta consultas SQL (utilizando SPI) entonces estas funciones pueden disparar nuevos triggers. Esto es conocido como triggers en cascada. No hay ninguna limitación explicita en cuanto al número de niveles de cascada.

Si un trigger es lanzado por un INSERT e inserta una nueva tupla en la misma relación, el trigger será llamado de nuevo (por el nuevo INSERT). Actualmente, no se proporciona ningún mecanismo de sincronización (etc) para estos casos pero esto puede cambiar. Por el momento, existe una función llamada funny_dup17() en los tests de regresión que utiliza algunas técnicas para parar la recursividad (cascada) en si misma..

IMPLEMENTACION DE STORE PROCEDURE EN POSTGRES

 

Procedimientos almacenados: son procedimientos escritos en un lenguaje determinado que se almacenan en la base de datos. En Oracle el lenguaje es PL/SQL, en PostgreSQL es PLPG/SQL. Ejemplo de una función en PLPG/SQL:
create function nuevo_cliente(integer,integer,varchar) returns integer as ' declare par_id_cliente alias for $1; par_dni alias for $2; par_nombre alias for $3; begin insert into clientes (id_cliente,nombre) values (par_id_cliente,par_nombre); insert into dni_clientes (id_cliente,dni) values (par_id_cliente,par_dni); return id_cliente; end;' language 'plpgsql';

Después, para usarla haríamos algo como:

select nuevo_cliente('8','92389924','pepe');

Eso introduciría un nuevo cliente en las tablas "clientes" y "dni_clientes".

Subconsultas

select dni from (select id_cliente,dni,nombre from clientes,dni_clientes where clientes.id_cliente=dni_clientes.id_cliente) where id_cliente>6;

Aunque también puede referirse a esto:

select id_cliente,dni,(select id_cliente as id_cliente2,nombre from nombres) where id_cliente=id_cliente2;

Como ves, la presencia de estas funcionalidades en una base de datos multiplica (y por un factor elevado) el número de posibilidades a la hora de realizar operaciones con la base de datos.



Bibliografia

http://es.wikipedia.org/wiki/Trigger_(base_de_datos

 

 

=====================================================

 

CUADRO COMPARATIVO DE LOS PRINCIPALES MANEJADORES DE BASE DE DATOS COMERCIALES

 

 

Características

Oracle

SQL Server

Informix

Interbase

Plataforma

Windows/Linux

Windows

Windows/Linux

Windows/Linux

ACID

SI

NO

NO

NO

Triggers

SI

SI

SI

SI

Transacciones Concurrentes

SI

SI

NO

NO

SQL ANSI 99

SI

NO

NO

NO

SQL ANSI 92

SI

SI

SI

SI

Numero de Usuarios Ilimitados

SI

NO

NO

NO

Integridad Referencial

SI

SI

SI

SI

Transacciones

SI

SI

SI

SI

ODBC

SI

SI

SI

SI

Codigo Abierto

NO

NO

NO

NO

Cliente/Servidor

SI

SI

SI

SI

MVCC

SI

SI

SI

SI

Costo

Alto

Medio

Alto

Bajo

Comentarios

Aún no hay comentarios.

Añadir un Comentario:



Inserta aquí el código de verificación que ves en la imagen.

Acerca de schoolwork

Tareas del semestre

Archivo

Suscríbete

RSS | Atom

Contacto

Contactar

Albergado en:blogdiario.com

Noticias: Noticias

Un servicio de HispaVista