sábado, 11 de abril de 2009

Seguridad, Mecanismos de Seguridad, Concurrencia, Metodos de Control




SEGURIDAD EN BASE DE DATOS

Al hablar de seguridad hemos preferido centrarnos en la información misma, aunque a menudo se hable de seguridad informática, de seguridad de los sistemas de información o de seguridad de las tecnologías de la información.
En cualquier caso hay tres aspectos principales, como distintas vertientes de la seguridad.
La confidencialidad: se cumple cuando solo las personas autorizadas (en su sentido amplio podríamos referirnos también a sistemas) pueden conocer los datos o la información correspondiente.


La integridad: consiste en que sólo las personas autorizadas puedan variar (modificar o borrar) los datos. Además deben quedar pistas para control posterior y para auditoria.
Pensemos que alguien variara datos de forma que perdiéramos la información de determinadas deudas a cobrar (o que sin perderla tuviéramos que recurrir a la información en papel), o que modificara la última parte de los domicilios de algunos clientes.
Algunas de estas acciones se podrían tardar en detectar, y tal vez las diferentes copias de seguridad hechas a lo largo del tiempo estarían viciadas (corruptas decimos a veces), lo que haría difícil la reconstrucción.


La disponibilidad: se cumple si las personas autorizadas pueden acceder a tiempo a la información.
El disponer de la información después del momento necesario puede equivaler a al no disponibilidad. Otro tema es disponer de la información a tiempo pero que esta no sea correcta, e incluso que no se sepa, lo que puede originar la toma de decisiones erróneas.
Otro caso grave es la no disponibilidad absoluta. Por haberse producido algún desastre. En este caso a medida que pasa el tiempo el impacto será mayor, hasta llegar a suponer la no continuidad de la entidad, como ha pasado en muchos de los casos producidos (más de un 80% según estadísticas), ya que las incidencias son frecuentes, y tenemos cercano el caso de los daños en el área de Acapulco.
En relación con ello deben existir soluciones alternativas, basadas en medios propios o contratados, copias actualizadas de la información crítica y de programas en un lugar diferente, y un verdadero plan de continuidad que permitía restablecer las operaciones en un tiempo inferior o igual al prefijo.
Para ello los usuarios habrán determinado previamente la criticidad de las aplicaciones y el impacto en sus áreas por parte de un comité, se habrán determinado las prioridades.
En la preparación y actualización del plan debemos pensar en situaciones posibles y en el impacto que tendrían en nuestra entidad (en su caso en las de nuestros clientes), especialmente si no disponemos de la información necesaria almacenada en lugares alternativos.
Hoy en día, las bases de datos son componentes cardinales de cualquier aplicación basada en web, permitiendo que los sitios web provean contenido dinámico. Debido a que información considerablemente sensible o secreta puede ser almacenada en tales bases de datos, usted debe considerar seriamente la forma de protegerlas.
Para recuperar o almacenar cualquier información necesita conectarse a la base de datos, enviar una consulta válida, recoger el resultado y cerrar la conexión. Hoy en día, el lenguaje de consultas usado comúnmente en estas interacciones es el Lenguaje de Consultas Estructurado (SQL por sus siglas en Inglés). Puede apreciar cómo un atacante puede intentar acometidas con una consulta SQL.
Como puede apreciar, PHP no puede proteger su base de datos por sí solo. Las siguientes secciones están dirigidas a servir de introducción a los conceptos básicos de cómo acceder y manipular bases de datos desde scripts PHP.
Mantenga en mente esta simple regla: protección en profundidad. Entre más acciones tome para incrementar la protección de su base de datos, menor será la probabilidad de que un atacante tenga éxito, y exponga o abuse de cualquier información secreta que estuviera almacenada. Un buen diseño del esquema de la base de datos y de la aplicación basta para lidiar con sus mayores temores.


Mecanismos de Seguridad de la BD

· Control de accesos
· Control de flujo
· Control de inferencia
· Encriptado

Métodos para el Control de Accesos


· Control de Acceso Discrecional
Garantiza privilegios a usuarios, incluyendo la capacidad para acceder archivos de datos específicos, registros o campos para operar de una manera determinada (read, insert, delete, o update).
· Control de Acceso Mandatorio


Clasifica usuarios y datos en múltiples niveles de seguridad, y luego fuerza determinadas reglas acordes a cada nivel.

Seguridad a cargo del DBMS
Encriptado de Datos
· Los datos son ilegibles a menos que se tenga conocimiento del código.
Seguimiento del ‘rastro’ (Audit Trail)
· si alguien entra en la BD
· A que datos accedió y que hizo con ellos

Seguridad a Nivel de Usuario en SQL


· Cada usuario tiene ciertos derechos sobre ciertos objetos.
· Distintos usuarios: los mismos o distintos derechos sobre los mismos objetos.

Para controlar la granularidad de los derechos de acceso los usuarios pueden tener derechos (autorización / privilegios) sobre:
• Tabla
• Vista




CONCURRENCIA EN BASE DE DATOS



El termino concurrencia se refiere al hecho de que los DBMS (SISTEMAS DE ADMINISTRACION DEBD) permiten que muchas transacciones puedan accesar a una misma base de datos a la vez.

En un sistema de estos se necesitan algún tipo de mecanismos de control de concurrencia para asegurar que las transacciones concurrentes no 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.

Métodos de control de concurrencia

Protocolos basados en técnicas de bloqueo

Cabe destacar antes de comenzar el estudio de los protocolos basados en bloqueos que son los más utilizados por los SGBD comerciales. Los demás tienen un alcance más teórico que práctico.

Un bloqueo es una variable asociada a un elemento de datos de la base de datos, usada para restringir las operaciones que se pueden aplicar sobre él.

Existen varios tipos de bloqueo: binarios (de propiedades limitadas), compartidos, exclusivos (usados en la práctica), y bloqueos de certificación.

Las operaciones sobre bloqueos se deben implementar como secciones críticas, es decir, de forma indivisible; el SGBD no deberá alternar sus instrucciones con otras.

Bloqueos binarios

Se caracterizan por tener dos valores posibles, bloqueados y desbloqueados. Cada elemento de la base de datos tiene un bloqueo distinto. El bloqueo señala si una transacción está operando sobre el elemento o está libre para que se pueda operar con él. De esta manera se impide que dos o más transacciones estén operando sobre un mismo elemento al mismo tiempo.

La implementación de un bloqueo binario es simple; basta con un vector de la siguiente forma: donde el booleano es en sí el indicador del bloqueo.

Bloqueos de lectura/escritura

Son una ampliación de los bloqueos binarios. Tenemos que el bloqueo puede tener tres posibles posiciones: libre, bloqueado para lectura, y bloqueado para escritura. De esta forma, más de una transacción puede tener un mismo elemento de datos bloqueado para lectura, pero sólo una para escritura. Si una transacción quiere escribir en ese elemento, habrá de esperar a que el bloqueo quede libre (cualquiera que sea el tipo de bloqueo), y a continuación, bloquearlo para escritura. Si quiere leer, sólo tendrá que esperar si el elemento está bloqueado para escritura. Se dice por tanto, que el bloqueo de lectura es compartido y el de escritura exclusivo. Tendremos por tanto tres operaciones; bloquear_escritura(X), bloquear_lectura(X) y desbloquear(X).

Problemas del bloqueo en dos fases: interbloqueo y espera indefinida
El interbloqueo se produce cuando cada transacción T en un conjunto de dos o más transacciones está esperando a algún elemento que está bloqueado por alguna otra transacción T' de dicho conjunto. En este estado, cada transacción está parada en espera a que otra transacción libere el recurso. Las condiciones para que se produzca en interbloqueo son las siguientes:

1. Exclusión mutua. Cada elemento está bloqueado por una transacción, o está libre.
2. Retención y espera: Una transacción que ya tiene elementos bloqueados puede solicitar un elemento adicional, y esperar que se le asigne, sin devolver previamente ninguno de los anteriores.
3. No apropiación: Sólo puede liberar un elemento la transacción que lo tiene asignado; no se lo puede quitar otra transacción que tenga mayor prioridad, ni el SGBD.
4. Espera circular: Existe una cadena circular, compuesta por dos transacciones o más, y otros tantos elementos intercalados, de manera que cada proceso está esperando que se le asigne un elemento, el cual, a su vez, está asignado al siguiente proceso de la cadena.
5. 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 más de los recursos que necesita el siguiente proceso en la cadena.


El tratamiento del interbloqueo está orientado bien a prevenirlo, bien a detectarlo y evitarlo.

Protocolos de prevención de interbloqueo

Bloqueo en dos fases conservador: consiste en ordenar todos los elementos de la base de datos y asegurarse de que una transacción que necesite varios elementos los bloqueará según ese orden. Su inconveniente es que obliga al programador a conocer la manera en que están ordenados estos elementos.

Detección del interbloqueo: este enfoque es más práctico, y más interesante si esperamos que haya poca interferencia entre transacciones. La forma más sencilla y conocida es mediante el grafo de espera de transacciones/elementos. Se tiene que existe interbloqueo si el grafo de espera tiene un ciclo. El sistema revisa periódicamente este grafo, y si encuentra un ciclo, elige una transacción víctima para abortarla y así romper el anterior. El inconveniente de este sistema es decidir una política adecuada para la frecuencia de la comprobación y la selección de víctimas.

7 comentarios: