Logo Studenta

Recuperación en Base de Datos

¡Este material tiene más páginas!

Vista previa del material en texto

1. RECUPERACIÓN
1.1 CONCEPTO
El objetivo del concepto de recuperación es el de proteger la base de datos contra fallas lógicas y físicas que destruyan los datos en todo o en parte independientemente de la naturaleza de las fallas estas pueden afectar los aspectos de almacenamiento de la base de datos como son: 
	
	fallas que provocan la pérdida de memoria volátil 
	
	fallas que provocan la pérdida del contenido de memoria secundaria.
En un sistema de base de datos recuperación significa, restaurar la base de datos, a un estado que se sabe que es correcto, después de una falla que provoca que se considere que el estado actual es incorrecto. 
El principio de recuperación esta fundamentado en la redundancia. 
Podemos tener la seguridad de que la base de datos es recuperable, si aseguramos que cualquier parte de la información que contiene, puede ser reconstruida, a partir de otra información que se encuentra almacenada redundantemente en algún lugar del sistema. 
Aunque los procesos de recuperación se ha desarrollado en el contexto de base de datos relacionales, no es una condición indispensable que las base de datos sean relacionales.
1.2 TRANSACCIONES
Una transacción es una unidad de la ejecución de un programa accede y posiblemente actualiza varios elementos de datos. Una transacción es normalmente el resultado de la ejecución de un programa de usuario escrito en un lenguaje de manipulación de datos de alto nivel o en un lenguaje de programación ( por ejemplo SQL, Cobol, C ó Pascal) y esta delimitado por declaraciones ( o llamadas a función) de la forma inicio transacción y fin transacción. 
La transacción consiste en todas las operaciones que se ejecutan entre el inicio y el final de la transacción. 
Las características de una transacción son:
Atomicidad , o todas las operaciones de la transacción se realizan adecuadamente en la base de datos o ninguna de ellas. 
Consistencia , a ejecución aislada de la transacción ( es decir, sin otra transacción que se ejecute concurrentemente) conserva la consistencia de la base de datos. 
Aislamiento , ya que una transacción no muestra los cambios que produce hasta que finaliza 
Persistencia , ya que una vez finaliza la transacción con éxito, sus efectos perduran en la BD. 
Seriabilidad , en el sentido de que el efecto de ejecutar transacciones concurrentemente debe ser el mismo que se produciría al ejecutarlas por separado en un orden secuencial según van entrando en el sistema. 
Este tipo de técnicas considera que las transacciones tienen 3 fases: 
Lectura: Las transacciones realizan operaciones sobre copias privadas de los objetos 
( accesibles solo por la transacción) 
Validación: En la que se comprueba si el conjunto de objetos modificados por una transacción se solapa con el conjunto de objetos modificados por alguna otra que haya hecho la validación durante la fase de lectura de dicha transacción. 
Grabación: En el caso de no detectar interferencias se graban las modificaciones, convirtiendo las versiones privadas de los objetos en versiones actuales.
1.3 FALLAS DE TRANSACCIÓN
En un extremo del espectro habrá un nodo que jamás falla, a veces llamado un nodo perfecto. En el otro extremo aparece un nodo que fallas de una manera del todo desconocida. Un nodo como esta pudiera comunicar basura a través de la red, o bien en razón de su falla, pudiera enviar acciones inapropiadas, pero con formato valido por la red. Nodos como estos se conocen como nodos desquiciados. 
Otro tipo de falla corresponde a nodos que se convierten en malévolos, lo cual significa que el nodo tiene el propósito expreso de llevar a cabo una actividad no autorizada, o de causar daños de forma intencional. Es incluso posible considerar fallas donde los nodos conspiran unos con otros para hacer caer el sistema distribuido. A veces se conoce como fallas bizantinas 
Entre los extremos de los nodos perfectos y los nodos desquiciados están los nodos “sensatos”. Un nodo sensato es un nodo que puede fallar, pero solo en una forma definida y conocida. El ejemplo más sencillo de un nodo sensato es uno que , ó es perfecto , ó deja de responder por completo. 
1.4 FALLAS DEL SISTEMA
	
	Este tipo de fallas se conocen como caídas suaves 
	
	Afectan a todas las transacciones en progreso, pero no dañan físicamente la base de datos. 
	
	Un problema inherente a las fallas de sistema, es la perdida de toda la información que se encuentra en memoria principal, en los buffers de la base de datos. 
	
	Por lo anterior puede desconocerse el estado real en que se encuentra cada una de las transacciones en progreso. Dichas transacciones no se complementaran, tiene que deshacerse al restablecer el sistema. 
	
	También se hace necesario rehacer, al tiempo de restablece el sistema. Aquellas transacciones que ya se habían completado exitosamente en el momento en que ocurrió la caída. 
1.5 FALLAS EN EL MEDIO 
	
	Ocurren por ejemplo, cuando se dañan las cabezas del disco, o falla el manejador del disco 
	
	Causan daños ala base de datos o a alguna porción de ella. 
	
	Afectan a aquellas transacciones que están usando la porción dañada.
	
	También se denominan caídas duras. 
	
	Este tipo de fallas se restaura, después de reparada la falla de hardware, copiando el respaldo mas actual de la base de datos y rehaciendo las transacciones ocurridas a partir de la construcción del respaldo. 
2. INTEGRIDAD
2.1 DEFINICIÓN
Integridad: conservar la seguridad en un sistema que se permite a múltiples usuarios el acceso al sistema y compartir la base de datos. 
Integridad: tiene como función proteger la base de datos contra operaciones que introduzcan inconsistencias en los datos. Se habla de integridad en el sentido de corrección, validez o precisión de los datos. 
2.2 REGLAS DE INTEGRIDAD
Los conceptos básicos de integridad en el modelo relacional son el de llave primaria, llave foránea, valores nulos y un par de reglas de integridad. 
Una llave primaria es uno o un conjunto de atributos que permiten identificar a las n-adas de manera única en cualquier momento. 
Una llave foránea de una relación es un atributo que hace referencia a una llave primaria de otra relación; esto da pie a que una relación puede tener varias llaves foráneas. 
Un valor nulo es un valor que esta fuera de la definición de cualquier dominio el cual permite dejar el valor del atributo “ latente”, su uso es frecuente en las siguientes situaciones: 
i) cuando se crea una n-ada y no se conocen todos los valores de cada uno de los atributos 
ii) cuando se agrega un atributo a una relación 
iii) Para no tomarse en cuanta al hacer cálculos numéricos. 
Las dos reglas de integridad tiene que ver precisamente con los conceptos antes mencionados y son:
Integridad de relaciones. 
Ningún atributo que forme parte de una llave primaria puede aceptar valores nulos. 
Integridad referencial
Al tener una relación 9#9 con llave primaria 10#10 de dominio 11#11 y otra relación 1#1 con atributo 10#10 que no es llave primaria de 1#1, entonces cualquier valor en el atributo 10#10 en 1#1 debe ser: 
i) nulo, o 
ii) Un valor que este en el atributo 10#10 de la llave primaria de una n-ada en la relación 9#9
2.3 REGLAS DE INTEGRIDAD DE DOMINIO
Un dominio de valores posibles puede estar asociado con cada atributo. Los limites de dominio son la forma mas elemental de restricciones de integridad. Son fáciles de probar por el sistema siempre que se introduce un nuevo dato en la base de datos. 
Tipos de dominios 
Es posible que varios atributos tengan el mismo dominio. Podemos ver que una definición adecuada de restricciones de dominio no solo nos permite probar consultas para asegurar que la comparación que se hace tiene sentido. 
El principio que hay detrás de los dominios de atributo es similar al que hay detrás de la asignación de tipos a variables en los lenguajes de programación. Los lenguajes de programación fuertemente tipiados permiten que el compilador el programa con mayor detalle. 
2.4 REGLAS DE INTEGRIDAD DE RELACIÓN 
La segunda regla de integridadse aplica a las claves ajenas: si en una relación hay alguna clave ajena, sus valores deben coincidir con valores de la clave primaria a la que hace referencia, o bien, deber ser completamente nulos. 
La regla de integridad referencial se marca en términos de estados de base de datos: indica lo que es un estado ilegal, pero no dice cómo puede evitarse. La cuestión es ¿qué hacer si estando en un estado legal, llega una petición para realizar una operación que conduce a un estado ilegal? Existen dos opciones: rechazar la operación, o bien aceptar la operación y realizar operaciones adicionales compensatorias que conduzcan a un estado legal. 
Por lo tanto, para cada clave ajena de la base de datos habrá que contestar a tres preguntas: 
	
	Reglas de los nulos: ¿tiene sentido que la clave ajena acepte nulos? 
	
	Regla de borrado: ¿Qué ocurre si se intenta borrar la tupla referenciada por la clave ajena? 
Restringir: no se permite borrar la tupla referenciada. 
Propagar: se borra la tupla referenciada y se propaga el borrado a las tuplas la referencia mediante la clave ajena. 
Anular: se borra la tupla referenciada y las tuplas que la reverenciaba ponen a nulo la clave ajena (solo si acepta nulos). 
	
	Reglas de modificación: ¿Qué ocurre si se intenta modificar el valor de la clave primaria de la tupla referenciada por la clave ajena? 
Restringir: no se permite modificar el valor de la clave primaria de la tupla referenciada. 
Propagar: se modifica el valor de la clave primaria de la tupla referenciaba y se propaga la modificación a las tuplas que la referencia mediante clave ajena. 
Anular: se modifica la tupla referenciada y las tuplas que la referenciaban ponen a nulo la clave ajena ( solo si acepta nulos).
2.5 MECANISMOS DE VISTAS PARA IMPLANTACIÓN DE INTEGRIDAD
Vistas 
Cualquier relación que no es parte del modelo conceptual, pero se hace visible al usuario como una <<relación virtual>>, se llama vista. Es posible tener un gran número de vistas sobre cualquier conjunto de relaciones reales dado. 
Puesto que las relaciones reales en el modelo conceptual puedes modificarse, generalmente no es posible almacenar una relación correspondiente a una vista. En cambio, una vista debe volverse a calcular para cada consulta que se refiere a ella. 
Definición de vista 
Una vista se define usando la sentencia create view. Para definir una vista debemos darle un nombre y presentar la consulta que calcula la vista. La forma de la sentencia create view es: 
Create view v as < expresión de consulta > 
Donde <expresión de consulta>es cualquier expresión legal de consulta en álgebra relacional. El nombre de la vista se representa por v.
Actualización por medio de vistas 
Aunque las vistas son una herramienta útil para las consultas, presentan problemas importantes si las actualizaciones, inserciones o eliminaciones se expresan usando vistas. La dificultad es que una modificación de la base de datos expresada en términos de vistas debe traducirse en una modificación de las relaciones reales en el modelo conceptual de la base de datos.
3. CONCURRENCIA
 
 3.1 DEFINICIÓN
 
 El término concurrencia se refiere al hecho de los SMBDs, normalmente permiten que muchas transacciones tengan acceso a los mismos datos, al mismo tiempo . 
 En dichos sistemas se requieren mecanismos de control de la concurrencia para asegurar que las transacciones no se interfieran entre si. 
 En sistemas multiusuario, es necesario un mecanismo para controlar la concurrencia. Se pueden producir inconsistencias importantes derivadas del acceso concurrente, como por ejemplo, el problema de la operación perdida. 
 En un sistema de biblioteca, existe un campo que almacena el número de copias disponibles para préstamo. Este campo debe incrementarse en uno cada vez que se devuelve un ejemplar del libro y disminuirse en uno cada vez que se presta un ejemplar. 
 Si existen varias bibliotecarias, una de ellas inicia la transacción t1, leyendo la variable número ejemplares (n), cuyo contenido se guarda en la variable n1. Tiempo después, otra bibliotecaria podría leer la misma variable incrementándola en una unidad, transacción t2. Después, la transacción t1 añade una unidad a esa variable y la actualiza, el resultado es erróneo, ya que la variable N debería haber aumentado en 2 unidades, y solo ha aumentado en una. La transacción t2 se ha perdido. 
 
3.2 PROBLEMAS QUE SE PRESENTAN (ACTUALIZACIÓN , PÉRDIDA, ETC )
Los tres problemas de principales de la concurrencia son: 
 Actualización perdida 
 
 Dependencia no comandada 
 
 Análisis inconsistente 
 
Actualización perdida : Este problema puede presentarse si dos transacciones concurrentes actualizan una misma tupla. Y la segunda que se realiza al final, no toma en cuenta el efecto de la primera. 
Dependencia no comandada : Ocurre si se permite que una transacción lea o modifique una tupla que ha sido modificada por otra transacción, sin que se haya comandado el registro en firme de esta modificación. Una modificación si ocurriera una operación de cancelación podrían generarse inconsistencias. 
Análisis inconsistente: Ocurre cuando una transacción hace un análisis contable o estadístico, sobre una tabla que esta siendo actualizada por otra transacción. 
 
Problemas de la concurrencia 
 En los sistemas de tiempo compartido (aquellos con varios usuarios, procesos, tareas, trabajos que reparten el uso de CPU entre estos) se presentan muchos problemas debido a que los procesos compiten por los recursos del sistema. Los programas concurrentes a diferencia de los programas secuenciales tienen una serie de problemas muy particulares derivados de las características de la concurrencia: 
Violación de la exclusión mutua: En ocasiones ciertas acciones que se realizan en un programa concurrente no proporcionan los resultados deseados. Esto se debe a que existe una parte del programa donde se realizan dichas acciones que constituye una región critica, es decir, es una parte del programa en la que se debe garantizar que si un proceso accede a la misma, ningún otro podrá acceder. Se necesita pues garantizar la exclusión mutua. 
 
Bloqueo mutuo o deadlock: Un proceso se encuentra en estado de deadlock si esta esperando por un suceso que no ocurrirá nunca. Se puede producir en la comunicación de procesos y mas frecuentemente en la gestión de recursos. Existen cuatro condiciones necesarias para que se pueda producir deadlock: 
 
 Los procesos necesitan acceso exclusivo a los recursos
 
 Los procesos necesitan mantener ciertos recursos exclusivos mientras esperan por otros.
 
 Los recursos no se pueden obtener de los procesos que están a la espera.
 
 Existe una cadena circular de procesos en la cual cada proceso posee uno o mas de los recursos que necesita el siguiente proceso en la cadena. 
 
 
Retraso indefinido o starvation: Un proceso se encuentra en starvation si es retrasado indefinidamente esperando un suceso que no puede ocurrir. Esta situación se puede producir si la gestión de recursos emplea un algoritmo en el que no se tenga en cuenta el tiempo de espera del proceso. 
 
Injusticia o unfairness: Se pueden dar situaciones en las que exista cierta injusticia en relación a la evolución de un proceso. Se deben evitar situaciones de tal forma que se garantice que un proceso evoluciona y satisface sus necesidades sucesivas en algún momento. 
 
Espera ocupada: En ocasiones cuando un proceso se encuentra a la espera por un suceso, una forma de comprobar si el suceso se ha producido es verificando continuamente si el mismo se ha realizado ya. Esta solución de espera es muy poco efectiva, porque desperdicia tiempo de procesamiento, y se debe evitar. La solución ideal es suspender el proceso y continuar cuando se haya cumplido la condiciónde espera. 
 
Condiciones de Carrera o Competencia: La condición de carrera (race condition) ocurre cuando dos o mas procesos accesan un recurso compartido sin control, de manera que el resultado combinado de este acceso depende del orden de llegada. 
 
Postergación o Aplazamiento Indefinido (a): Consiste en el hecho de que uno o varios procesos nunca reciban el suficiente tiempo de ejecución para terminar a su tarea. Por ejemplo, que un proceso ocupa un recurso y lo marque como ocupado y que termine sin marcarlo como desocupado. Si algún otro proceso pide ese recurso, lo vera ocupado y esperara indefinidamente a que se desocupe. 
 
Condición de Espera Circular: Esto ocurre cuando dos o mas procesos forman una cadena de espera que los involucra a todos. 
 
Condición de No apropiación: Esta condición no resulta precisamente de la concurrencia, pero juega un papel muy importante en este ambiente. Esta condición especifica que si un proceso tiene asignado un recurso, dicho recurso no puede arrebatársele por ningún motivo, y estará disponible hasta que el proceso lo suelte por su voluntad. 
 
 
3.3 SERIABILIDAD
Teoría de la Seriabilidad 
 Una calendarización (schedule), también llamado una historia, se define sobre un conjunto de transacciones T = { T1, T2, ..., Tn } y especifica un orden entrelazado de la ejecución de las operaciones de las transacciones. La calendarización puede ser especificada como un orden parcial sobre T. 
Ejemplo 1. Considere las siguientes tres transacciones: 
T1: Read( x ) 
 T2: Write( x ) 
 T3: Read( x ) 
 
Write( x ) 
 Write( y ) 
 Read( y ) 
 
Commit 
 Read( z ) 
 Read( z ) 
 
 
 Commit 
 Commit 
 
 Una calendarización de las acciones de las tres transacciones anteriores puede ser: 
H1 = { W2(x), R1(x), R3(x), W1(x), C1, W2(y), R3(y), R2(z), C2, R3(z), C3 } 
¨ Dos operaciones Oij(x) y Okl(x) (i y k no necesariamente distintos) que accesan el mismo dato de la base de datos x se dice que están en conflicto si al menos una de ellas es una escritura. De esta manera, las operaciones de lectura no tienen conflictos consigo mismas. Por tanto, existen dos tipos de conflictos read-write (o write-read) y write-write. 
 Las dos operaciones en conflicto pueden pertenecer a la misma transacción o a transacciones diferentes. En el último caso, se dice que las transacciones tienen conflicto. De manera intuitiva, la existencia de un conflicto entre dos operaciones indica que su orden de ejecución es importante. El orden de dos operaciones de lectura es insignificante. 
 Una calendarización completa define el orden de ejecución de todas las operaciones en su dominio. Formalmente, una calendarización completa STc definido sobre un conjunto de transacciones T = { T1, T2, ..., Tn } es un orden parcial STc = { S T, <T } en donde 
S T = U i S i , para todos los i = 1, 2, ..., n 
<T Ê i <i , para todos los i = 1, 2, ..., n 
Para cualesquiera dos operaciones en conflicto Oij y Okl Î S T, ó Oij <T Okl ó Okl <T Oij 
 La primera condición establece simplemente que el dominio de la calendarización es la unión de los dominios de las transacciones individuales. La segunda condición define la relación de ordenamiento como un súper conjunto de la relación de ordenamiento de transacciones individuales. Esto mantiene el ordenamiento de las operaciones dentro de cada transacción. La condición final define el orden de ejecución entre dos operaciones en conflicto. 
Ejemplo 2. Considere las tres transacciones del ejemplo 1, una posible calendarización completa está dada por la siguiente gráfica dirigida acíclica (DAG). 
 Una calendarización se define como un prefijo de una calendarización completa. Un prefijo de un orden parcial se define como sigue. Dado un orden parcial P = { S , < }, P’ = { S ’, <’ }, es un prefijo de P si 
S ’ Ì S i 
" ei Î S ’, e1 <’ e2, si y solamente si, e1 < e2, y 
" ei Î S ’, si $ ej Î S y ej < ei, entonces, ej Î S ’ 
 Las primeras dos condiciones definen a P’ como una restricción de P en el dominio S ’, en donde las relaciones de ordenamiento en P se mantienen por P’. La última condición indica que para cualquier elemento de S ’, todos sus predecesores en S deben ser incluidos también en S ’. 
Ejemplo 3. La siguiente calendarización es un prefijo de la calendarización del Ejemplo 2. 
 Si en una calendarización S, las operaciones de varias transacciones no están entrelazadas, esto es, si las operaciones de una transacción ocurren de manera consecutiva, entonces se dice que la calendarización es serial. Si cada transacción es consistente (obedece las reglas de integridad), entonces la base de datos se garantiza ser consistente al final de la calendarización serial. La historia asociada a este tipo de calendarización se le conoce como serial. 
Ejemplo 4. La siguiente es una historia serial para el Ejemplo 1. 
HS = { W2(x), W2(y), R2(z), C2, R1(x), W1(x), C1, R3(x), R3(y), R3(z), C3 } 
 Las transacciones se ejecutan de manera concurrente, pero el efecto neto de la historia resultante sobre la base de datos es equivalente a alguna historia serial. Basada en la relación de precedencia introducida por el orden parcial, es posible discutir la equivalencia de diferentes calendarizaciones con respecto a sus efectos sobre la base de datos. 
 Dos calendarizaciones, S1 y S2, definidas sobre e l mismo conjunto de transacciones T, se dice que son equivalentes si para cada par de operaciones en conflicto Oij y Okl (i ¹ k), cada vez que Oij <1 Okl, entonces, Oij <2 Okl. A esta relación se le conoce como equivalencia de conflictos puesto que define la equivalencia de dos calendarizaciones en término del orden de ejecución relativo de las operaciones en conflicto en ellas. 
 Una calendarización S se dice que es serializable, si y solamente si, es equivalente por conflictos a una calendarización serial. 
Ejemplo 5. Las siguientes calendarizaciones no son equivalentes por conflicto: 
HS = { W2(x), W2(y), R2(z), C2, R1(x), W1(x), C1, R3(x), R3(y), R3(z), C3 } 
H1 = { W2(x), R1(x), R3(x), W1(x), C1, W2(y), R3(y), R2(z), C2, R3(z), C3 } 
 
Las siguientes calendarizaciones son equivalentes por conflictos; por lo tanto H2 es serializable: 
HS = { W2(x), W2(y), R2(z), C2, R1(x), W1(x), C1, R3(x), R3(y), R3(z), C3 } 
H2 = { W2(x), R1(x), W1(x), C1, R3(x), W2(y), R3(y), R2(z), C2, R3(z), C3 } 
 
 La función primaria de un controlador de concurrencia es generar una calendarización serializable para la ejecución de todas las transacciones. El problema es, entonces, desarrollar algoritmos que garanticen que únicamente se generan calendarizaciones serializables. 
 
Seriabilidad en SMBD distribuidos 
 En bases de datos distribuidas es necesario considerar dos tipos de historia para poder generar calendarizaciones serializables: la calendarización de la ejecución de transacciones en un nodo conocido como calendarización local y la calendarización global de las transacciones en el sistema. Para que las transacciones globales sean serializables se deben satisfacer las siguientes condiciones: 
 cada historia local debe ser serializable, y 
 
 dos operaciones en conflicto deben estar en el mismo orden relativo en todas las historias locales donde las operaciones aparecen juntas. 
 La segunda condición simplemente asegura que el orden de serialización sea el mismo en todos los nodos en donde las transacciones en conflicto se ejecutan juntas. 
 
Ejemplo 6. Considere las siguientes tres transacciones: 
T1: Read( x ) 
 T2: Read( x ) 
 
x ¬ x + 5 
 x ¬ x * 5 
 
Write( x ) 
 Write( x ) 
 
Commit 
 Commit 
 
 Las siguientes historias locales son individualmenteserializables (de hecho son seriales), pero las dos transacciones no son globalmente serializables. 
LH1 = { R1(x), W1(x), C1, R2(x), W2(x), C2 } 
LH2 = { R2(x), W2(x), C2, R1(x), W1(x), C1 } 
3.4 MECANISMOS DE SEGUROS
 Los mecanismos de seguridad en el control de concurrencia primero se introducen la notación de transacción. Una petición en-línea a la base de datos se considera como una transacción; generalmente involucrada llamadas a rutinas del DBMS para operaciones de Entrada / Salida y alguna cantidad limitada de operaciones. 
 El procesamiento de la transacción empieza tan pronto como se propone la petición del usuario. Termina cuando se contesta la petición y en ese momento el sistema libera todos los recursos utilizados para la transacción. 
 Algunos DBMS tiene mecanismos de seguridad para prevenir actualizaciones concurrentes sin control. Cuando se involucra simultáneamente varias transacciones para acceder los mismos datos, se forja a cada transacción a comprobar la existencia de un seguro asociado con los datos . 
 La figura muestra un mecanismo de seguridad que acomoda en serie dos operaciones de actualización concurrente. Una transacción puede acceder los datos sólo si el seguro asociado con los datos está abierto. Una vez que el programa tiene acceso a los datos, pone el seguro para así bloquear el acceso a los datos a las demás transacciones . 
 El seguro se restablece (rest) mediante la transacción cuando completa su operación de actualización. Aquellas transacciones a las que se negó el acceso a los datos estarán esperando en una fila asociada con el seguro hasta que éste sea restablecido. Cuando esto sucede, sólo la siguiente transacción bloqueara en fila de espera tendrá acceso a los datos compartidos.
 El término granularidad se refiere al tamaño de las unidades aseguradas de datos compartidos . En la programación con lenguajes de alto nivel, el sistema operativo proporciona un seguro para cada archivo. Así , la granularidad del seguro en este caso es todo un archivo. 
 Cuando un archivo se abre, se le asegura para excluir del acceso a otros programas , hasta que el archivo quede cerrado . 
 En un sistema de manejo de base de datos, la granularidad del seguro , que se especifica en el esquema, puede ser un riesgo, un campo o incluso ciertos valores en un campo. 
 Una granularidad pequeña resultará en un mejor uso de los datos y previene interferencias. Sin embargo el manejo de una gran cantidad de seguros se vuelve complejo mientras el nivel de la granularidad se hace más fino. 
 Normalmente un módulo especial llamado el manejador de la seguridad (lock manager) es responsable por el manejo de la misma. 
 No existen estándares en la industria para la implementación de los mecanismos de seguridad en un DBMS. Idealmente, un DBMS debería de prevenir automáticamente la interferencia de la simultaneidad sin necesidad de involucrar al programador, pero tal software sería difícil de implantar y costos de ejecutar. 
 Diversos sistemas proporcionan distintos recursos de seguridad para evitar la concurrencia de la transacciones. 
 En el sistema relacional System R, los mecanismos de seguridad son totalmente transparentes; no se requiere de ninguna operación de seguridad explícita por parte del usuario. 
 
Figura : Mecanismos de seguridad para actualizaciones simultaneas
 
3.4.1 TIPOS DE SEGUROS (ALGORITMOS DE CONTROL DE CONCURRENCIA)
 El criterio de clasificación más común de los algoritmos de control de concurrencia es el tipo de primitiva de sincronización. Esto resulta en dos clases: aquellos algoritmos que están basados en acceso mutuamente exclusivo a datos compartidos (candados) y aquellos que intentar ordenar la ejecución de las transacciones de acuerdo a un conjunto de reglas (protocolos). 
 Sin embargo, esas primitivas se pueden usar en algoritmos con dos puntos de vista diferentes: el punto de vista pesimista que considera que muchas transacciones tienen conflictos con otras, o el punto de vista optimista que supone que no se presentan muchos conflictos entre transacciones. 
 Los algoritmos pesimistas sincronizan la ejecución concurrente de las transacciones en su etapa inicial de su ciclo de ejecución. Los algoritmos optimistas retrasan la sincronización de las transacciones hasta su terminación. 
 El grupo de algoritmos pesimistas consiste de algoritmos basados en candados, algoritmos basados en ordenamiento por estampas de tiempo y algoritmos híbridos. 
 
Algoritmos basados en candados 
 En los algoritmos basados en candados, las transacciones indican sus intenciones solicitando candados al despachador (llamado el administrador de candados). Los candados son de lectura (rl), también llamados compartidos, o de escritura (wl), también llamados exclusivos. Como se aprecia en la tabla siguiente, los candados de lectura presentan conflictos con los candados de escritura, dado que las operaciones de lectura y escritura son incompatibles. 
 
 rl 
 wl 
 
rl 
 si 
 no 
 
wl 
 no 
 no 
 
 En sistemas basados en candados, el despachador es un administrador de candados (LM). El administrador de transacciones le pasa al administrador de candados la operación sobre la base de datos (lectura o escritura) e información asociada, como por ejemplo el elemento de datos que es accesado y el identificador de la transacción que está enviando la operación a la base de datos.
 El administrador de candados verifica si el elemento de datos que se quiere accesar ya ha sido bloqueado por un candado. Si candado solicitado es incompatible con el candado con que el dato está bloqueado, entonces, la transacción solicitante es retrasada. De otra forma, el candado se define sobre el dato en el modo deseado y la operación a la base de datos es transferida al procesador de datos. 
 El administrador de transacciones es informado luego sobre el resultado de la operación. La terminación de una transacción libera todos los candados y se puede iniciar otra transacción que estaba esperando el acceso al mismo dato. 
 
Candados de dos fases (2PL) 
 En los candados de dos fases una transacción le pone un candado a un objeto antes de usarlo. Cuando un objeto es bloqueado con un candado por otra transacción, la transacción solicitante debe esperar. Cuando una transacción libera un candado, ya no puede solicitar más candados. 
 Así una transacción que utiliza candados de dos fases se comporta como en la Figura 1. En la primera fase solicita y adquiere todos los candados sobre los elementos que va a utilizar y en la segunda fase libera los candados obtenidos uno por uno. 
 La importancia de los candados de dos fases es que se ha demostrado de manera teórica que todos las calendarizaciones generadas por algoritmos de control de concurrencia que obedecen a los candados de dos fases son serializables. Puede suceder que si una transacción aborta después de liberar un candado, otras transacciones que hayan accesado el mismo elemento de datos aborten también provocando lo que se conoce como abortos en cascada. 
 Para evitar lo anterior, los despachadores para candados de dos fases implementan lo que se conoce como los candados estrictos de dos fases en los cuales se liberan todos los candados juntos cuando la transacción termina (con commit o aborta). El comportamiento anterior se muestra en la Figura 2. 
 
Figura 1. Gráfica del uso de los candados de dos fases. 
 
 
Figura 2 Comportamiento de los candados de dos fases estrictos. 
 
Candados de dos fases centralizadosEn sistemas distribuidos puede que la administración de los candados se dedique a un solo nodo del sistema, por lo tanto, se tiene un despachador central el cual recibe todas las solicitudes de candados del sistema. 
 En la Figura 3 se presenta la estructura de la comunicación de un administrador centralizado de candados de dos fases. 
 La comunicación se presenta entre el administrador de transacciones del nodo en donde se origina la transacción (llamado el coordinador TM), el administrador de candados en el nodo central y los procesadores de datos (DP) de todos los nodos participantes. Los nodos participantes son todos aquellos en donde la operación se va a llevar a cabo. 
 
 
Figura 3. Comunicación en un administrador centralizado de candados de dos fases estrictos. 
 La crítica más fuerte a los algoritmos centralizados es el "cuello de botella" que se forma alrededor del nodo central reduciendo los tiempos de respuesta de todo el sistema. Más aún, su disponibilidad es reducida a cero cuando se presentan fallas en el nodo central. 
 
Candados de dos fases distribuidos 
 En los candados de dos fases distribuidos se presentan despachadores en cada nodo del sistema. Cada despachador maneja las solicitudes de candados para los datos en ese nodo. 
 Una transacción puede leer cualquiera de las copias replicada del elemento x, obteniendo un candado de lectura en cualquiera de las copias de x. 
 La escritura sobre x requiere que se obtengan candados para todas las copias de x. La comunicación entre los nodos que cooperan para ejecutar una transacción de acuerdo al protocolo de candados distribuidos de dos fases . 
 Los mensajes de solicitud de candados se envían a todos los administradores de candados que participan en el sistema. Las operaciones son pasadas a los procesadores de datos por los administradores de candados. 
 Los procesadores de datos envía su mensaje de "fin de operación" al administrador de transacciones coordinador. 
 Hay tres tipos distintos de seguros que pueden especificarse como seguros de control de acceso: literal , nombre del seguro o un procedimiento de la base de datos. 
 Las llaves encierran los tipos de operaciones o declaraciones DML ( por ejemplo : INSERT, DELETE) cuya ejecución en los datos asegurados requiere de una clave que coincida con a del control de acceso. 
Literal: Es el tipo de seguro más usado. Una literal es lo mismo que una contraseña. Previamente se dieron ejemplos del uso de contraseñas como seguro de control de acceso. 
Nombre del seguro: Especifica el nombre de un elemento en el cual se debe colocar el valor de un seguro . El elemento se guarda en una unidad de almacenamiento permanente y un programa de utilería designa su valor. Así, se puede cambiar el valor del seguro sin cambiar ni recopilar el esquema o subesquemas. 
Procedimiento de base de datos: Un procedimiento de la base de datos se puede usar para comprobar la validez de una clave y ver si coincide con el seguro. 
 A pesar de todo los medios para autorizar el acceso a objetivos asegurados en la sección, algún usuario no autorizado puede tratar de romper la seguridad ensayando distintas combinaciones de contraseña. Una manera de prever esto es registrar las identidades de los usuarios que trataron de acceder la base pero que fallaron debido a la falta de una autorización apropiada. Cuando un usuario ha hecho un cierto número de intentos dentro de un periodo de tiempo, se debe informar al personal de seguridad para que investigue la situación. 
 
 3.4.2 PROTOCOLOS
 Protocolos de bloqueo (locking protocols). 
 Estos son todos de dos fases: 
 2PL centralizad
 
 2PL con copia primaria 
 
 2PL distribuido 
 
 bloque mayoritario. 
 
 
 2PL centralizado 
 Se caracteriza por: 
 Hay un único planificador, o gestor de bloqueos (lock manager), para la totalidad del SGBD Distribuido que pueden garantizar (grant) y liberar (release) bloqueos. 
 
 2PL centralizado. 
o Funcionamiento: 
El coordinador de transacciones local divide la transacción en subtransacciones, usando el catálogo global del sistema. Si la transacción implica actualizar un dato que está replicado, el coordinador solicita un bloqueo de escritura de todas las copias antes de actualizar cada copia y liberar los bloqueos. El coordinador puede elegir cualquiera de las copias de un dato replicado para lectura. 
El gestor de transacciones local, implicado en la transacción global, solicita y libera los bloqueos que mantiene el gestor centralizado de bloqueos usando las reglas usuales para el bloqueo en dos fases. 
El gestor centralizado de bloqueos comprueba que las peticiones de bloqueo sobre un dato sean compatibles, de manera que el gestor de bloqueos envía un mensaje de vuelta al nodo que originó la petición reconociendo que el bloqueo ha sido concedido. En caso contrario, coloca la petición en una cola hasta que el bloqueo pueda ser realizado. 
 
2PL con copia primaria. 
 Se caracteriza por: 
 Cada gestor de bloqueos local es responsable de un conjunto de datos, de manera que se elige una copia como copia primaria; el resto de copia se llaman copias esclavas. La elección del nodo primario es flexible, y el nodo elegido no contiene necesariamente la copia primaria de ese dato. 
 
 2PL distribuido
 Se caracteriza por: 
 Se distribuye un gestor de bloqueo en cada nodo. Cada uno es responsable de la gestión de bloqueos de los datos que contiene en ese nodo. El 2PL distribuido implementa una protocolo de control de replicas Read-One-Write-All. 
 Cualquier copia de un dato replicado puede ser usada para operaciones de lectura, pero todas las copias deben ser bloqueadas para escritura antes que se puedan modificar. 
 
Bloqueo mayoritario. 
 Se caracteriza por: 
 Se mantiene un gestor de bloqueos en cada nodo para gestionar los bloqueos de ese nodo. Cuando se ejecuta una transacción que trabaja con un dato que esta replicado, debe enviar una petición de bloqueo a más de la mitad de los nodos donde esta el dato. 
 
 Protocolos de marcas de tiempo (time stamp protocols) 
 Su objetivo es ordenar las transacciones globalmente de manera que transacciones con una marca de tiempo menor, obtengan la prioridad en el caso de conflicto. El problema es que los relojes de nodos diferentes podrían no estar sincronizados. 
 
 Recuperación de bases de datos distribuidas 
 Fallos en un ambiente distribuido. 
 Tipos de fallos en un SGDB distribuido: 
 La pérdida de mensajes 
 
 El fallo de un enlace de comunicación 
 
 El fallo de un nodo 
 
 Particiones en la red 
 
 El primer punto es responsabilidad del sistema de comunicación, pero el resto de puntos deben ser resueltos por el SGBD distribuido. No obstante es importante el valor de timeout que se establezca (permite decidir si un nodo está caído, si está congestionado, o si es el canal el que tiene problemas). 
 Como afectan los fallos a la recuperación. 
 El SGBDD debe asegurar que las subtransacciones (forman la transacción global) sean realizadas todas o ninguna. 
Los pasos a seguir son: 
Abortar cualquier transacción afectada por el fallo 
Marcar el nodo como fallido para evitar accesos de otros nodos. 
Chequear periódicamente si el nodo se ha recuperado, o esperar a que el nodo fallido avise. 
Al reiniciar, el nodo fallido inicia un proceso de recuperación para abortar transacciones ejecutadas durante fallo. 
Después debe generar una copia consistente de la base de datos. 
 
 Protocolos distribuidos de recuperación. 
 El SGBDD tiene que asegurar la atomicidad en las transacciones globales. 
 Estos protocolosdeben impedir que el fallo en un nodo afecte al resto de nodos en funcionamiento (protocolos no bloqueantes). 
 Tipos de protocolos de ejecución de transacciones: 
Protocolo de ejecución en dos fases. Puede producir interbloqueo. 
 Protocolo de ejecución en tres fases. 
 Estos usan un coordinador (el que inicia la transacción) y tienen unos participantes (nodos implicados) 
 Protocolo de ejecución en dos fases. 
 Funcionamiento: 
 Se distinguen dos fases: votación y decisión. 
 En la primera el coordinador pregunta si están preparados para realizar (commit) la transacción. Si un participante vota abortar, o no responde dentro del timeout, entonces se aborta la transacción. Si todos votan para realizarla (commit), entonces el coordinador da instrucciones para realizar la transacción. 
 El periodo de timeout permite evitar el bloqueo de los nodos ante el fallo de uno de los participantes. Si un nodo falla en el proceso, todos siguen un protocolo de terminación, el nodo fallido sigue un protocolo de recuperación. 
Protocolo de terminación: 
 Este protocolo fija los pasos a seguir cuando un coordinador o participante falla al recibir un mensaje esperado dentro de un periodo de tiempo. 
 Este protocolo establece como deben actuar el coordinador y los participantes cuando no se recibe una respuesta durante el timeout. 
 Enviar PREPARE 
 
 Enviar DECISION 
 
 GLOBAL 
 
 RECONOCIMIENTO 
 
 recibido 
 
 INICIO 
 
 ESPERA 
 
 DECIDIDO 
 
 COMPLETADO 
 
 a) Coordinador b) Participante 
 
 Enviar 
 
 COMMIT 
 
 Enviar 
 
 ABORTAR 
 
 recibido PREPARE 
 
 INICIO 
 
 PREPARADO 
 
 ABORTADO EJECUTADO 
 
Protocolo de recuperación: 
 Este protocolo fija los pasos a seguir cuando el nodo fallido se recupera. 
 El protocolo al aplicar dependerá de quien falló: 
 El coordinador 
 
 Un participante 
 
 Si fue el coordinador quien falló los participantes pueden llevar a cabo un proceso de elección de un nuevo coordinador (protocolo de elección). 
Protocolo de recuperación. Fallo en el coordinador: 
 Estado INICIAL: La recuperación en este caso consiste en iniciar el procedimiento de ejecución (commit). 
 Estado de ESPERA: El coordinador no ha recibido todas las respuestas (ninguna de abortar). La recuperación consiste en reiniciar el procedimiento de ejecución (commit). 
 Estado DECIDIDO: El coordinador ha dado instrucciones para abortar o ejecutar globalmente la transacción. Al reiniciar, si el coordinador ha recibido todos los reconocimientos, completa la transacción con éxito, en caso contrario, tiene que iniciar el protocolo de terminación. 
Protocolo de recuperación. Fallo en un participante: 
Estado INICIAL: El participante no ha votado todavía sobre la transacción,de manera que cuando se recupera puede abortar 
Estado PREPARADO: El participante ha enviado su voto al coordinador. En este caso, la recuperación se hace mediante el protocolo de terminación discutido anteriormente. 
Fallo en los estados ABORTADO/EJECUTADO: El participante ha completado la transacción. Por consiguiente, al reiniciar, ninguna otraacción será necesaria. 
 
 Este protocolo debe intentar que todos los participantes realicen las mismas acciones (estado consistente). 
 Protocolo de elección: 
 El protocolo es ejecutado cuando los participantes detectan que el coordinador ha fallado. Una asunción que hace este protocolo es que los nodos tienen preestablecido un orden. 
 Funcionamiento: Cada nodo envía su numero de orden al resto de nodos mayores que el. Si este recibe un mensaje de un nodo menor que el deja de enviar mensajes. 
 Cuando el nodo fallido se recupera se vuelve a realizar la elección. 
 
Protocolo de ejecución en tres fases. 
 Características: 
 Es no bloqueante para nodos que fallan, excepto si fallan todos. Los fallos en la comunicación pueden hacer que diferentes nodos alcancen diferentes decisiones. 
El protocolo requiere: 
 
 Imposibilidad de que ocurran particiones en la red. 
 
 Al menos un nodo NO debe fallar. 
 
 Como mucho K nodos pueden fallar simultáneamente (el sistema seclasifica como K-elástico). 
 
 
 Protocolo de ejecución en tres fases. 
Funcionamiento: 
b) Participante 
 Enviar Preparado Enviar ABORTAR 
 
 Recibido 
 
 PREPARE 
 
 INICIO 
 
 PREPARADO 
 
 ABORTADO PRE-COMMIT 
 
 COMMITED 
 
a) Coordinador 
 DECIDIDO 
 
 (COMMITED) 
 
 COMPLETADO 
 
 Recibido 
 
 Preparado 
 
 Recibido 
 
 ABORTAR 
 
 Enviado 
 
 PREPARE 
 
 INICIO 
 
 ESPERANDO 
 
 DECIDIDO 
 
 (ABORTAR) 
 
 PRE-COMMIT
 
 
 El protocolo "commit" de dos fases permite que una transacción distribuida sea ejecutada de manera confiable y se llama de dos fases porque logra su objetivo en dos etapas. 
Primera Fase 
 Durante la primera etapa se consigue que todos los participantes reciban las operaciones que conforman la transacción, las escriban en lo que se llama "almacenamiento estable" y que le hagan conocer a un coordinador central que ya están listos para ejecutar la transacción. 
Segunda fase 
 La segunda etapa consiste de indicar a todos los participantes que ejecuten las operaciones de la transacción. 
Almacenamiento Estable 
 El almacenamiento estable consiste de algún medio físico en donde se pueda escribir datos de manera confiable, de tal suerte que si ocurre cualquier accidente se tenga la capacidad de recuperar todos los datos y suministrarlos a los procesos pertinentes. Por ejemplo, podemos decir que un medio de almacenamiento estable sería la combinación de escribir los datos en un disco duro primario y al mismo tiempo en uno o más discos secundarios (espejo) reduciendo al máximo la posibilidad de perder los datos. 
Código del protocolo commit de dos fases 
 Coordinador: Escribe la primitiva "PREPARE" en la bitácora 
Envía la primitiva PREPARE a cada participante e inicializa CONTADOR 
 Participantes: Esperan por la primitiva "PREPARE" 
Si el participante está listo para operar entonces 
ejecuta 
Escribe operaciones de la transacción a la bitácora local
Escribe la primitiva "LISTO" en la bitácora local
Envía la primitiva "LISTO" al coordinador 
si no, hace esto: 
Escribe la primitiva "ABORTAR" en la bitácora local
Envía la primitiva "ABORTAR" al coordinador. 
fin. 
Coordinador: Espera la primitiva LISTO o ABORTAR de todos los participantes 
o bien, espera que se venza el valor del CONTADOR. 
Si CONTADOR = 0 o alguna respuesta es la primitiva ABORTAR entonces 
Escribe la primitiva "ABORTAR GLOBAL" en la bitácora
Envía la primitiva ABORTAR a todos los participantes. 
Si no, si se reciben todos los mensajes de LISTO hace esto: 
Escribe la primitiva "COMMIT GLOBAL" en la bitácora local
Envía la primitiva "COMMIT GLOBAL" a todos los participantes. 
Participantes: Esperan por la primitva ABORTAR o COMMIT GLOBAL 
Escriben el mensaje recibido en la bitácora local (ABORTAR o COMMIT)
Envían la primitiva "CONFIRMADO" al coordinador
Ejecutan el mensaje recibido (ABORTAR o COMMIT) 
Coordinador: Espera por la primitiva CONFIRMADO de todos los participantes 
Escribe la primitiva COMPLETO en la bitácora local. 
 3.4.3 DEADLOCK
 El bloqueo (deadlock) ocurre cuando se desarrolla una espera circular entre dos transacciones y cada una solicita una operación de actualización sobre el mismo archivo. 
 Suponga que las dos siguientes actualizaciones se deben ejecutar: 
 Transacción 1: Cambiar la cantidad de una orden de compra en la cual el cliente H. Haley compró una pieza el 16 de diciembre. La cantidad nueva es 4. La petición será procesada al acceder primero el archivo CUSTOMER y después el archivo TRANS . 
 Transacción 2: Actualizar la dirección del cliente que compró una pieza con número de inventario (INV-NO) 1408 el 4 de diciembre. La dirección nueva es40 Bank Street. 
 Para cumplir con la petición primero se debe acceder el archivo TRANS y después el archivo CUSTOMER. 
 Ambas transacciones reclaman los mismos archivos TRANS Y CUSTOMER. Para empezar, cada transacción reclama un archivo. Después, cada transacción hace seguir otro comando READY solicitando el otro archivo que necesita. 
 Sin embargo, cada transacción queda bloqueado para uso exclusivo. Ambas transacciones esperarán infinitamente, ya que ninguna puede terminar su transacción y liberar el archivo solicitado por otra. 
 El programador o el sistema puede evitar los bloqueos. En el ejemplo anterior esto se puede hacer si una transacción demanda los dos archivos que requiere para completar su transacción al mismo tiempo: 
 Transaction 1: access the TRANS file and then the CUSTOMER file. 
 Transaction 2: access the CUSTOMER file and then the TRANS file 
 
 Ejemplo de bloqueo
 En las dos primeras proposiciones READY , cada transacción llama a un archivo y establece un seguro sobre el archivo solicitado. Se desarrolla una situación de establecimiento cuando la transacción 1 se bloquea por su petición de tener derecho exclusivo sobre el archivo CUSTOMER , y a su vez , la proposición 2 se bloquea por su petición de entrar en el uso exclusivo del archivo TRANS. Como resultado, ambas transacciones esperarán infinitamente. 
 Si un conjunto de procesos esta en estado de espera por recursos y nunca cambia de estado porque los recursos por los que espera están siendo utilizados por otros procesos en estado de espera tenemos un Deadlock. Los recursos son la memoria, dispositivos de E/S, semáforos, archivos, etc. 
La forma en que un proceso hace uso de un recurso es: 
 Solicitud: si el recurso esta disponible se le otorga, si no el proceso pasa a estado de espera. 
 
 Uso: El proceso utiliza el recurso 
 
 Liberación: el proceso debe liberar el recurso. 
 
 
Condiciones necesarias para que se produzca deadlock 
 Si se presentan simultáneamente las cuatro siguientes condiciones el sistema esta en deadlock. 
Exclusión mutua: Por lo menos un proceso que tenga otorgado un recurso en forma exclusiva. 
Uso y Espera: Debe existir al menos un proceso que este haciendo uso de un recurso y que este esperando por otros recursos asignados a otros procesos. 
No interrupción: Los recursos no pueden ser retirados al proceso. Si un proceso hace uso de un recurso no le podrá ser retirado hasta que voluntariamente el proceso lo libere. 
Espera Circular: Debe existir un conjunto de procesos {P1.....Pn} tal que P1 espera por un recurso utilizado por P2,......,Pn espera por un recurso utilizado por P1. 
 
Resourse Allocation Graph (Grafo de utilización de recursos) 
Conjunto de Vértices: U =P U R 
P={P1,P2,....,Pn} 
R={R1,R2,...,Rn} 
 Conjunto de Aristas: 
 Una arista de un proceso Pi a un Recurso Rj significa que el proceso i esta haciendo una solicitud por el recurso Rj. 
 Una arista del recurso Rj al proceso Pi, significa que el recurso esta asignado al proceso. 
 Si un RAG no tiene ciclos el sistema no esta en DEADLOCK, si los tiene no se puede afirmar nada. 
 
3.4.3.1 TÉCNICAS PARA PREVENIRLO
Prevención de Deadlocks 
 La estrategia consiste en anular alguna de las cuatro condiciones necesarias para que se produzca un Deadlock. 
No puede ser anulada porque existen recursos que deben ser usados en modalidad exclusiva. 
La alternativa sería hacer que todos los procesos solicitaran todos los recursos que habrán de utilizar antes de utilizarlos al momento de su ejecución lo cual sería muy ineficiente. 
Para anular esta condición cuando un proceso solicita un recurso y este es negado el proceso deberá liberar sus recursos y solicitarlos nuevamente con los recursos adicionales. El problema es que hay recursos que no pueden ser interrumpidos. 
Espera Circular: esta estrategia consiste en que el sistema operativo numere en forma exclusiva los recursos y obligue a los procesos a solicitar recursos en forma ascendente. El problema de esto es que quita posibilidades a la aplicación. 
 
Evasión de Deadlocks 
 
 Si se tiene cuidado al en la forma de asignar los recursos se pueden evitar situaciones de Deadlock. Supongamos un ambiente en el que todos los procesos declaren a priori la cantidad máxima de recursos que habá de usar. 
 
 Estado Seguro: un estado es seguro si se pueden asignar recursos a cada proceso (hasta su máximo) en algún orden sin que se genere Deadlock. El estado es seguro si existe un ordenamiento de un conjunto de procesos {P1...Pn} tal que para cada Pi los recursos que Pi podrá utilizar pueden ser otorgados por los recursos disponibles mas los recursos utilizados por los procesos Pj,j<i. Si los recursos solicitados por Pi no pueden ser otorgados, Pi espera a que todos los procesos Pj hayan terminado. 
 
 
 Algoritmo del banquero de Dijkstra 
 
 Asigna peticiones de recursos siempre que las mismas den como resultado estados seguros. Solicitudes que den como resultado estados inseguros serán negadas hasta que puedan ser satisfechas. Este algoritmos evita situaciones de Deadlock asignando los recursos en forma correcta. 
 
 Las debilidades del algoritmo son: que requiere que la cantidad de recursos del sistema sea constante, requiere una cantidad de procesos constante y requiere que los procesos garanticen que los recursos van a ser devueltos en un intervalo finito de tiempo. 
 
Algoritmos de Detección de Deadlock 
 
Cuando hay una única ocurrencia de cada recurso. (variante del grafo de "wait for graph"). Consiste en reducir el grafo, retirando las aristas que van de recursos a procesos y de procesos a recursos, colocando nuevas aristas que reflejan la situación de espera entre procesos. Si el grafo reducido tiene ciclos el sistema esta en Deadlock. Orden de operaciones = n^2 , n = cantidad de aristas. 
Cuando hay múltiples ocurrencias de cada recurso 
Procedure detecta_deadlock 
var Disponible:array[1..n] of integer //# de recursos 
Usados:array[1..n] of integer 
Solicitados:array[1..n] of integer 
Finalizado:array[1..n] of boolean 
Begin 
Work:=Disponibles; 
For i:=1..n do if(usados[i]≠0) then finish[i]:=false 
Else finish[i]:=true; 
While(encontrar_indice_i = true) do { 
Work:=work + usados[i]; 
Finish[i]:=true; } 
If ((finish[i] = false) para algun i), 1≤i≤n then à El sistema esta en Deadlock. 
End 
Function encontrar_indice_i : Boolean 
Begin 
If (existe i tal que (Finish[i]=false && solicitados[i] ≤ work) 
Then -> true 
Else -> false 
End 
 
3.4.3.2 TÉCNICAS PARA DESHACERLO (RECUPERACIÓN)
 En una base de datos puede existir errores debido a varios motivos, tales como la actualización incompleta de datos redundantes, validación inadecuada de los datos de entrada, mal funcionamiento físico o errores de lógica en la programación . Desgraciadamente los errores no siempre se pueden evitar, así que los DBMS proporcionan mecanismos para recuperar los datos correctos después de que ocurren los errores. 
 La restauración de una base de datos a su estado normal es un problema real e importante que no se puede pasar por alto. 
 Generalmente, quien opera la base (DBA) , es responsable de implementar procedimientos de detección de errores . Utilerías de detección son proporcionadas como parte de DBMS o se puede desarrollar particularmente. Sin importar el procedimiento utilizado, éstos se corren a intervalos regulares para mantener la integridad. Una vez detectados, es esencial que el manejador los corrija inmediatamente. 
 Para que el manejador obtenga la información necesaria para efectuar la recuperación de la base, se debe hacer regularmentecopias de respaldo (back-up copies). Por lo común se usan cintas magnéticas para guardar las copias, debido a que son compactas y de bajo costo. 
 La última copia de respaldo anterior a un error, se usa para restaurar los datos afectados hasta ese día. A veces ocurre que se requiere varias copias de respaldo de distintas áreas afectadas para restaurar completamente la base de datos. 
 Operación de registro 
 La mayoría de los DBMS proporcionan un elemento de rastreo para registrar lo sucedido en cada transacción actualizada por la base de datos . 
 El registro, es un prerrequisito para la recuperación de la base de datos; restaura un archivo a su estado anterior cuando ocurre alguna falla en una transacción. El manejador del registro (log manager), es una componente de la DBMS que efectúa el registro escribiendo cualquiera de los dos tipos de registro siguiente en un archivo de búsqueda: 
1) Ante-imagen: Se refiere a los bloques antiguos de datos originales en la base que se guardaron antes de la actualización de una transacción. Si ocurre un error, esta copia se puede usar para cancelar el efecto de la transacción. 
2) Post-imagen: Es el nombre que recibe un bloque procesado por una transacción listo para ser reescrito en la base. 
Métodos de recuperación 
 Se usan dos métodos de recuperación de base de datos: recuperación en avance o recuperación en retroceso (roll-forward o roll-back). El método a utilizar depende del tipo y la extensión de los errores. 
1) Recuperación en avance 
 Con este método se consigue la restauración mediante la copia de respaldo de la base para recuperar la porción principal de los datos. Después se reaplican los registros post-imagen del registro a la copia de respaldo para incorporar las actualizaciones efectuadas desde que se hizo la copia de respaldo. Los registros post-imagen del registro log, más que las transacciones, se reaplican ala copia de respaldo, ya que estas imágenes son datos procesados, listos para rescribirse en la base. 
2) Recuperación en retroceso 
 Esta recuperación puede nulificar el efecto de una sola transacción que hizo cambios en la base pero abortó antes del término. ( Recuerde que para mantener la integridad de los datos, una transacción debe ejecutarse en su totalidad o no ejecutarse). La recuperación en retroceso se consigue llamando al registro ante-imagen del archivo log y reinstalándolo en la base para nulificar el efecto de transacción errónea. 
3.5 ETIQUETAS DE TIEMPO (ESTAMPADO DE TIEMPO) 
Algoritmos basados en estampas de tiempo
 A diferencia de los algoritmos basados en candados, los algoritmos basados en estampas de tiempo no pretenden mantener la seriabilidad por exclusión mutua. En lugar de eso, ellos seleccionan un orden de serialización a priori y ejecutan las transacciones de acuerdo a ellas. Para establecer este ordenamiento, el administrador de transacciones le asigna a cada transacción Ti una estampa de tiempo única ts( Ti ) cuando ésta inicia. 
 Una estampa de tiempo es un identificado r simple que sirve para identificar cada transacción de manera única. Otra propiedad de las estampas de tiempo es la monoticidad, esto es, dos estampas de tiempo generadas por el mismo administrador de transacciones deben ser monotonicamente crecientes. Así, las estampas de tiempo son valores derivados de un dominio totalmente ordenado. 
 
 
Figura 1. Comunicación en candados de dos fases distribuidos. 
 
 Existen varias formas en que las estampas de tiempo se pueden asignar. Un método es usar un contador global monotonicamente creciente. Sin embargo, el mantenimiento de contadores globales es un problema en sistemas distribuidos. 
 Por lo tanto, es preferible que cada nodo asigne de manera autónoma las estampas de tiempos basándose en un contador local. Para obtener la unicidad, cada nodo le agrega al contador su propio identificador. Así, la estampa de tiempo es un par de la forma 
<contador local, identificador de nodo> 
 Note que el identificador de nodo se agrega en la posición menos significativa, de manera que, éste sirve solo en el caso en que dos nodos diferentes le asignen el mismo contador local a dos transacciones diferentes. 
El administrador de transacciones asigna también una estampa de tiempo a todas las operaciones solicitadas por una transacción. Más aún, a cada elemento de datos x se le asigna una estampa de tiempo de escritura, wts(x), y una estampa de tiempo de lectura, rts(x) ; sus valores indican la estampa de tiempo más grande para cualquier lectura y escritura de x, respectivamente. 
El ordenamiento de estampas de tiempo (TO) se realiza mediante la siguiente regla: 
Regla TO: dadas dos operaciones en conflicto, Oij y Okl, perteneciendo a las transacciones Ti y Tk, respectivamente, Oij es ejecutada antes de Okl, si y solamente si, ts(Ti) < ts(Tk). En este caso Ti se dice ser un transacción más vieja y Tk se dice ser una transacción más joven. 
 
Dado este orden, un conflicto entre operaciones se puede resolver de la siguiente forma: 
for Ri(x) do begin 
if ts(Ti) < wts( x ) then 
reject Ri(x) 
else 
accept Ri(x) 
rts(x) ¬ ts(Ti) 
end 
 for Wi(x) do begin 
if ts(Ti) < rts(x) and 
ts(Ti) < wts(x) then 
reject Wi(x) 
else 
accept Wi(x) 
wts(x) ¬ ts(Ti) 
end 
 
 
 La acción de rechazar una operación, significa que la transacción que la envió necesita reiniciarse para obtener la estampa de tiempo más reciente del dato e intentar hacer nuevamente la operación sobre el dato. 
 
Ordenamiento conservador por estampas de tiempo 
 El ordenamiento básico por estampas de tiempo trata de ejecutar una operación tan pronto como se recibe una operación. Así, la ejecución de las operaciones es progresiva pero pueden presentar muchos reinicios de transacciones. 
 El ordenamiento conservador de estampas de tiempo retrasa cada operación hasta que exista la seguridad de que no será reiniciada. 
 La forma de asegurar lo anterior es sabiendo que ninguna otra operación con una estampa de tiempo menor puede llegar al despachador. Un problema que se puede presentar al retrasar las operaciones es que esto puede inducir la creación de interbloqueos (deadlocks). 
Ordenamiento por estampas de tiempo múltiples 
 Para prevenir la formación de interbloqueos se puede seguir la estrategia siguiente. Al hacer una operación de escritura, no se modifican los valores actuales sino se crean nuevos valores. Así, puede haber copias múltiples de un dato. Para crear copias únicas se siguen las siguientes estrategias de acuerdo al tipo de operación de que se trate: 
1. Una operación de lectura Ri(x) se traduce a una operación de lectura de x de una sola versión encontrando la versión de x, digamos xv, tal que, ts(xv) es la estampa de tiempo más grande que tiene un valor menor a ts(Ti). 
Una operación de escritura Wi(x) se traduce en una sola version, Wi(xw), y es aceptada si el despachador no ha procesado cualquier lectura Rj(xr), tal que, 
ts(Ti) < ts(xr) < ts(Tj) 
Control de concurrencia optimista 
 Los algoritmos de control de concurrencia discutidos antes son por naturaleza pesimistas. En otras palabras, ellos asumen que los conflictos entre transacciones son muy frecuentes y no permiten el acceso a un dato si existe una transacción conflictiva que accesa el mismo dato. 
 Así, la ejecución de cualquier operación de una transacción sigue la secuencia de fases: validación (V), lectura (R), cómputo (C) y escritura (W) . Los algoritmos optimistas, por otra parte, retrasan la fase devalidación justo antes de la fase de escritura ). De esta manera, una operación sometida a un despachador optimista nunca es retrasada. 
 Las operaciones de lectura, cómputo y escrita de cada transacción se procesan libremente sin actualizar la base de datos corriente. Cada transacción inicialmente hace sus cambios en copias locales de los datos. 
 La fase de validación consiste en verificar si esas actualizaciones conservan la consistencia de la base de datos. Si la respuesta es positiva, los cambios se hacen globales (escritos en la base de datos corriente). De otra manera, la transacción es abortada y tiene que reiniciar. 
 
 
. Fases de la ejecución de una transacción pesimista, optimista. 
 Los mecanismos optimistas para control de concurrencia fueron propuestos originalmente con el uso de estampas de tiempo. Sin embargo, en este tipo de mecanismos las estampas de tiempo se asocian únicamente con las transacciones, no con los datos. 
 Más aún, las estampas de tiempo no se asignan al inicio de una transacción sino justamente al inicio de su fase de validación. Esto se debe a que las estampas se requieren únicamente durante la fase de validación. 
 
 
 
	
	http://geocities.yahoo.com/ps/info?.refer=dbannerhttp://geocities.yahoo.com/ps/info?.refer=dbanner
	¡Error!Referencia de hipervínculo no válida.
	
	http://geocities.yahoo.com/ps/info?.refer=dbannerGeoCities Premium Services
	
4. SEGURIDAD
		
	4.1 CONCEPTO		
	El objetivo es proteger la Base de Datos contra accesos no autorizados. Se llama también privacidad. 
Incluye aspectos de:		
		Aspectos legales, sociales y éticos 	
		Políticas de la empresa, niveles de información publica y privada 	
		Controles de tipo físico, acceso a las instalaciones 	
		Identificación de usuarios: voz, retina del ojo, etc. 	
		Controles de sistema operativo 	
	En relación al SGBD, debe mantener información de los usuarios, su tipo y los accesos y operaciones permitidas a éstos. 
Tipos de usuarios: 
· DBA, están permitidas todas las operaciones, conceder privilegios y establecer usuarios 		
		Usuario con derecho a crear, borrar y modificar objetos y que además puede conceder privilegios a otros usuarios sobre los objetos que ha creado. 	
		Usuario con derecho a consultar, o actualizar, y sin derecho a crear o borrar objetos. 	
	Privilegios sobre los objetos, añadir nuevos campos, indexar, alterar la estructura de los objetos, etc. 
Los SGBD tienen opciones que permiten manejar la seguridad, tal como GRANT, REVOKE, etc. También tienen un archivo de auditoria en donde se registran las operaciones que realizan los usuarios. 
MEDIDAS DE SEGURIDAD 		
		Físicas: Controlar el acceso al equipo. Tarjetas de acceso, etc	
		Personal: Acceso sólo del personal autorizado. Evitar sobornos, etc.	
		SO: Seguridad a nivel de SO	
		SGBD: Uso herramientas de seguridad que proporcione el SGBD. Perfiles de usuario, vistas, restricciones de uso de vistas, etc.	
	Un SMBD cuenta con un subsistema de seguridad y autorización que se encarga de garantizar la seguridad de porciones de la BD contra el acceso no autorizado:		
		Identificar y autorizar a los usuarios: uso de códigos de acceso y palabras claves, exámenes, impresiones digitales, reconocimiento de voz, barrido de la retina, etc.	
		Autorización: usar derechos de acceso dados por el terminal, por la operación que puede realizar o por la hora del día.	
		Uso de técnicas de cifrado: para proteger datos en Base de Datos distribuidas o con acceso por red o internet.	
		Diferentes tipos de cuentas: en especial del ABD con permisos para: creación de cuentas, concesión y revocación de privilegios y asignación de los niveles de seguridad.	
		Manejo de la tabla de usuarios con código y contraseña, control de las operaciones efectuadas en cada sesión de trabajo por cada usuario y anotadas en la bitácora, lo cual facilita la auditoria de la Base de Datos.	
	
4.2 IDENTIFICACIÓN Y AUTENTIFICACIÓN
En un SGBD existen diversos elementos que ayudan a controlar el acceso a los datos. En primer lugar el sistema debe identificar y autentificar a los usuarios utilizando alguno de las siguientes formas: 		
		Código y contraseña 	
		Identificación por hardware 	
		Características bioantropométricas 	
		Conocimiento, aptitudes y hábitos del usuario 	
		Información predefinida (Aficiones, cultura, etc) 	
	Además, el administrador deberá especificar los privilegios que un usuario tiene sobre los objetos: 		
		Usar una B.D. 	
		Consultar ciertos datos 	
		Actualizar datos 	
		Crear o actualizar objetos 	
		Ejecutar procedimientos almacenados 	
		Referenciar objetos 	
		Indexar objetos 	
		Crear identificadores 	
	Mecanismos de autentificación 
La autentificación, que consiste en identificar a los usuarios que entran al sistema, se puede basar en posesión (llave o tarjeta), conocimiento (clave) o en un atributo del usuario (huella digital). 
Claves 
El mecanismo de autentificación más ampliamente usado se basa en el uso de claves o passwords; es fácil de entender y fácil de implementar. En UNIX, existe un archivo /etc/passwd donde se guarda los nombres de usuarios y sus claves, cifradas mediante una función one-way F. El programa login pide nombre y clave, computa F(clave), y busca el par (nombre, F(clave)) en el archivo. 
Con claves de 7 caracteres tomados al azar de entre los 95 caracteres ASCII que se pueden digitar con cualquier teclado, entonces las 957 posibles claves deberían desincentivar cualquier intento por adivinarla. Sin embargo, una proporción demasiado grande de las claves escogidas por los usuarios son fáciles de adivinar, pues la idea es que sean también fáciles de recordar. La clave también se puede descubrir mirando (o filmando) cuando el usuario la digita, o si el usuario hace login remoto, interviniendo la red y observando todos los paquetes que pasan por ella. Por último, además de que las claves se pueden descubrir, éstas también se pueden "compartir", violando las reglas de seguridad. 
En definitiva, el sistema no tiene ninguna garantía de que quien hizo login es realmente el usuario que se supone que es. 
Identificación física 
Un enfoque diferente es usar un elemento físico difícil de copiar, típicamente una tarjeta con una banda magnética. Para mayor seguridad este enfoque se suele combinar con una clave (como es el caso de los cajeros automáticos). Otra posibilidad es medir características físicas particulares del sujeto: huella digital, patrón de vasos sanguíneos de la retina, longitud de los dedos. Incluso la firma sirve. 
Algunas medidas básicas: 		
		Demorar la respuesta ante claves erróneas; aumentar la demora cada vez. Alertar si hay demasiados intentos. 	
		Registrar todas las entradas. Cada vez que un usuario entra, chequear cuándo y desde dónde entró la vez anterior. 	
		Hacer chequeos periódicos de claves fáciles de adivinar, procesos que llevan demasiado tiempo corriendo, permisos erróneos, actividades extrañas (por ejemplo cuando usuario está de vacaciones). 	
	
4.3 MATRIZ DE AUTORIZACIÓN
Autorizaciones 
Para facilitar la administración los SGBD suele incorporar el concepto de perfil, rol o grupo de usuarios que agrupa a una serie de privilegios por lo k el usuario que se asigna a un grupo hereda todos los privilegios del grupo. 
El mecanismo de control de acceso se encarga de denegar o conceder el acceso a los usuarios. En un SGBD puede existir diferentes tipos de autorización: 
Una primera distinción puede hacerse entre: 		
		Autorización explicita. Normalmente usada en los sistemas tradicionales. Consiste en almacenar que sujetos pueden accesar a ciertos objetos con determinados privilegios para lo que suele utilizarse una matriz de control de accesos. 	
		Autorización implícita. Consiste en que una autorización definida sobre un objeto puede deducirse a partir de otras (por ejemplo si se puede acceder a una clase en un SGBD se puede también acceder a todas las instancias de esa clase). 	
	Los usuarios pueden tener varios tiposde 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.	
	Los usuarios pueden recibir todos los tipos de autorización ninguno de ellos, o una combinación determinada de los mismos. 
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 las 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. 	
	Las autorizaciones de eliminación y de borrado se diferencian en que la autorización de borrado solo permite el borrado de tuplas. Si un usuario borra todas las tuplas de unas relación, la relación sigue existiendo, pero esta vacía. Si se elimina una relación, deja de existir. 
La capacidad de crear nuevas relaciones queda regulada mediante la autorización de recursos. El usuario con la autorización de recursos que crea una relación nueva recibe automáticamente todos los privilegios sobre el sistema. 
La autorización de índices puede parecer innecesaria, dado que la creación o borrado de un índice no afecta a los datos de las relaciones. Más bien, los índices son una estructura para las mejoras de rendimiento. Sin embargo, los índices también ocupan espacio y se exige que las modificaciones de las bases de datos actualicen los índices , los que llevaran a cabo actualizaciones estarían tentados de borrar los índices , los que llevan a cabo actualizaciones estarían tentados de borrar los índices, mientras que los que formulara consultas estarían tentados de crear numeroso índices. 
Para permitir si el administrador de la base de datos que regule el uso de los recursos del sistema es necesario tratar la creación de índices como un privilegio. 
La forma superior de autoridad es la concebida al administrador de la base de datos. El administrador de la base de datos puede autorizar usuarios nuevos, reestructurar la base de datos, etc. 
Esta forma de autorización es análoga a la proporcionada al súper usuario u operador del sistema operativo. 
4.4 DEFINICIÓN DE UN ESQUEMA DE SEGURIDAD
El problema de la seguridad consiste en lograr que los recursos de un sistema sean, bajo toda circunstancia, utilizados para los fines previstos. Para eso se utilizan mecanismos de protección.
Un aspecto importante de la seguridad es el de impedir la pérdida de información, la cual puede producirse por diversas causas: fenómenos naturales, guerras, errores de hardware o de software, o errores humanos. La solución es una sola: mantener la información respaldada, de preferencia en un lugar lejano. 
Otro aspecto importante de la seguridad, es el que tiene que ver con el uso no autorizado de los recursos: 		
		Lectura de datos.	
		Modificación de datos.	
		Destrucción de datos.	
		Uso de recursos: ciclos de CPU, impresora, almacenamiento.	
	Otras amenazas y ataques posibles:		
		Virus. Un virus es parecido a un gusano, en cuanto se reproduce, pero la diferencia es que no es un programa por sí sólo, si no que es un trozo de código que se adosa a un programa legítimo, contaminándolo. Cuando un programa contaminado se ejecuta, ejecutará también el código del virus, lo que permitirá nuevas reproducciones, además de alguna acción (desde un simple mensaje inocuo hasta la destrucción de todos los archivos).	
		Caballo de troya. Un caballo de troya es un programa aparentemente útil que contiene un trozo de código que hace algo no deseado.	
		Puerta trasera. Una puerta trasera es un punto de entrada secreto, dejado por los implementadores del sistema para saltarse los procedimientos normales de seguridad. La puerta trasera puede haberse dejado con fines maliciosos o como parte del diseño; en cualquier caso, son un riesgo.	
		Caza claves. Dejar corriendo en un terminal un programa que pida "login:" y luego "password:", para engañar a los usuarios de modo que estos revelen su clave.	
		Solicitar recursos como páginas de memoria o bloques de disco, y ver qué información contienen; muchos sistemas no los borran cuando se liberan, de modo que se puede encontrar información "interesante".	
		Sobornar o torturar al administrador para que suelte la clave.	
	Principios básicos para la seguridad		
		Suponer que el diseño del sistema es público. 	
		El defecto debe ser: sin acceso. 	
		Chequear permanentemente. 	
		Los mecanismos de protección deben ser simples, uniformes y construidos en las capas más básicas del sistema. 	
		Los mecanismos deben ser aceptados sicológicamente por los usuarios. 	
	
4.5 MECANISMOS DE VISTAS PARA LA IMPLANTACIÓN DE SEGURIDAD (VIEW/FORMS)
Vistas 
El concepto de vistas es el medio de proporcionar a un usuario un modelo personalizado de la base de datos. Una vista puede ocultar los datos que un usuario no necesita ver. La capacidad de las vistas puede ocultar datos sirve para simplificar el uso del sistema y para mejorar la seguridad. 
El uso del sistema se simplifica porque se permite al usuario restringir su atención a los datos de interés. 
Aunque pueden que se nieguen el acceso directo a una relación, puede que se le permita el acceso a parte de esa relación mediante una vista. Por lo tanto, se puede utilizar una combinación de seguridad en el nivel relacional y en el nivel de las vistas para limitar el acceso de un usuario precisamente a los datos que se necesita. 
En el ejemplo bancario, considérese un empleado que necesita saber los nombres de todos los clientes que tienen un préstamo en cada sucursal. Este empleado no esta autorizado a ver la información concerniente a los prestamos concretos que pueda tener cada cliente. Por lo tanto, se le debe negar el acceso directo ala relación préstamo. 
Pero si va a tener acceso a la información necesaria, se le debe conceder acceso ala vista cliente-préstamo, que consiste solo en los nombres de los clientes y las sucursales en los que tiene un préstamo. Esta vista se puede definir en SQL de la siguiente manera: 
Create view cliente-préstamo as 
(select nombre-sucursal, nombre-cliente 
from prestatario, préstamo 
where prestatario.número-préstamo = préstamo.número-préstamo) 
Supóngase que el empleado formula la siguiente consulta SQL: 
select * 
from préstamo-cliente 
El empleado esta autorizado a ver el resultado de esta consulta. Sin embargo, cuando el procesador de consultas traduce la consulta en una consulta sobre las relaciones reales de la base de datos, se obtiene una consulta sobre prestatario y préstamo. Por lo tanto, se debe comprobar la autorización de la consulta del empleado antes de que comience el procesamiento de la misma. 
La creación de vistas no necesita autorización de recursos. El usuario que crea una vista no recibe necesariamente todos los privilegios sobre la misma. 
Ese usuario solo recibe los privilegios sobre la misma. Ese usuario solo recibe los privilegios que no proporcionan autorizaciones adicionales respecto de las que ya posee. 
Por ejemplo, un usuario no puede recibir la autorización de actualización sobre una vista sin tener la autorización de actualización sobre las relaciones utilizadas para definir la vista. Si un usuario crea una vista sobre la que no se puede conceder ninguna autorización de lectura sobre las relaciones prestatario y préstamo. 
4.6 BASE DE DATOS ESTADÍSTICAS
En este tipo de base de datos se debe evitar que a a partir de consultas que afectan a los datos globales se puedan inferir valores de datos individuales o inferir que un dato elemental no tiene determinado valor. 
Las

Continuar navegando