Download Tema 6. Restricciones a la Base de Datos: Integridad y seguridad

Document related concepts

Trigger (base de datos) wikipedia , lookup

Transcript
Tema 6. Restricciones a la Base de Datos:
Integridad y seguridad
Juan Ignacio Rodrı́guez de León
Resumen
Las restricciones desde el punto de vista de integridad de bases
de datos. se presentan dependencias funcionales, integridad referencial y otros mecanismos para mantenimiento de integridad, tales
como disparadores y afirmaciones. El objetivo es la protección de la
base de datos de accidentes. Restricciones de los dominios. Integridad referencial. Asertos (asserts). Disparadores (triggers). Seguridad
y autorización. Autorización en SQL. Cifrado y autenticación
Índice
1. Restricciones de los dominios
3
2. Integridad referencial
2.1. Integridad referencial en el modelo E-R . . . . . . . . . . . .
2.2. Modificación de la base de datos . . . . . . . . . . . . . . . .
2.3. Integridad referencial en SQL . . . . . . . . . . . . . . . . . .
4
4
4
5
3. Asertos
6
4. Disparadores (triggers)
4.1. Necesidad de los disparadores . . . . . . . . . . . . . . . . .
4.2. Disparadores en SQL . . . . . . . . . . . . . . . . . . . . . . .
4.3. Cuando no deben usarse disparadores . . . . . . . . . . . . .
7
7
7
8
5. Seguridad y autorización
5.1. Violaciones de la seguridad
5.2. Autorizaciones . . . . . . .
5.3. Autorizaciones y vistas . . .
5.4. Concesión de privilegios . .
5.5. El concepto de papel (rol) . .
5.6. Trazas de auditorı́a . . . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
8
9
9
10
10
10
ÍNDICE
6. Autorización en SQL
6.1. privilegios en SQL . . . . . . . . . . . . . .
6.1.1. Papeles o roles . . . . . . . . . . . .
6.1.2. El privilegio de conceder privilegios
6.1.3. Otras caracterı́sticas . . . . . . . . .
2
.
.
.
.
11
11
12
12
12
7. Cifrado y autenticación
7.1. Técnicas de cifrado . . . . . . . . . . . . . . . . . . . . . . . .
7.2. Autenticación . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
13
14
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
RESTRICCIONES DE LOS DOMINIOS
3
En este tema se tratarán las restricciones a la base de datos. Las restricciones son limitaciones que deseamos imponer en nuestra sistema, de forma
que sea imposible almacenar datos incorrectos.
Algunas de las restricciones ya se han visto, por ejemplo, la limitación de
los valores posibles de los atributos a un subconjunto, lo que denominábamos
dominio del atributo.
1.
Restricciones de los dominios
Las restricciones de los dominios son la forma más simple de restricción
de integridad. El sistema las verifica fácilmente siempre que se introduce
en la base de datos un nuevo elemento de datos.
La cláusula create domain se puede usar para definir nuevos dominios.
Por ejemplo, las instrucciones:
create domain Euros numeric(12,2)
create domain Dólares numeric(12,2)
Un intento de asignar un valor de tipo Dólares a una variable de tipo
Euros resultarı́a en un error sintáctico, aunque ambos tengan el mismo tipo
numérico.
SQL también proporciona las cláusulas drop domain y alter domain para
borrar o modificar dominios que se hayan declarado anteriormente.
La cláusula check de SQL permite restringir aun más los dominios; permite al diseñador del esquema especificar un predicado que debe satisfacer
cualquier valor para poder pertenecer al dominio. Véase, como ejemplo:
create domain sueldo-por-hora numeric(5,2)
constraint comprobación-valor-sueldo
check (value ≥ 4.00)
El dominio sueldo-por-hora tiene una restricción que asegura que el
sueldo por hora sea mayor que 4,00.
También puede utilizarse para restringir un dominio para que no contenga valores nulos, o se puede limitar para que contenga sólo un conjunto
especificado de valores usando la cláusula in.
las condiciones check permiten subconsultas que se refieren a otras relaciones. Por ejemplo, esta restricción se podrı́a especificar sobre la relación
préstamo:
check (nombre-sucursal in
(select nombre-sucursal from sucursal))
2
INTEGRIDAD REFERENCIAL
4
La condición check verifica que nombre-sucursal en cada tupla en la
relación préstamo es realmente el nombre de una sucursal de la relación
cuenta. Ası́, la condición no sólo se debe comprobar cuando se inserte o
modifique préstamo, sino también cuando cambie la relación sucursal (en
este caso, cuando se borre o modifique la relación cuenta).
La restricción anterior es realmente un ejemplo de una clase de restricción muy habitual denominadas restricción de integridad referencial. En el
Apartado 2 se estudian estas restricciones y como especificarlas en SQL.
Las condiciones check complejas pueden ser útiles cuando se desee
asegurar la integridad de los datos, pero se deben usar con cuidado, dado
que pueden ser costosas de comprobar.
2.
Integridad referencial
A menudo se desea asegurar que un valor que aparece en una relación
para un conjunto de atributos determinado aparezca también en otra relación
para un cierto conjunto de atributos. Esta condición se denomina integridad
referencial.
El caso más normal es cuando queremos garantizar que el valor almacenado en una clave externa está también como clave primaria en la
relación referenciada. En caso contrario, se dice que la tupla de la relación
referenciante está colgante.
Las tuplas colgantes pueden ser aceptables o no, dependiendo del modelo de datos. En el caso de que no sean aceptables, hay que imponer una
integridad referencial o dependencia de subconjunto.
2.1.
Integridad referencial en el modelo E-R
Si se obtiene el esquema de la base de datos relacional creando tablas a
partir de los diagramas E-R, cada relación que proceda de un conjunto de
relaciones tendrá restricciones de integridad referencial.
Otra fuente de restricciones de integridad referencial son los conjuntos
de entidades débiles; el esquema de la relación de cada conjunto de entidades débiles incluye una clave externa, lo que lleva a una restricción de
integridad referencial.
2.2.
Modificación de la base de datos
La modificación de la base de datos puede ocasionar violaciones de
la integridad referencial. Las comprobaciones a realizar son sencilla al insertar un dato, simplemente se exige la existencia de las claves primarias
relacionadas.
2
INTEGRIDAD REFERENCIAL
5
El borrar se da un caso más interesante. Si borramos de la tabla que
contiene la clave primaria, pueden existir tuplas dependientes en otras
relaciones. En ese caso, se pueden tomar tres opciones diferentes:
Impedir la operación.
Realizar la operación, y borrar las tuplas de las relaciones dependientes, de forma que se garanticé la consistencia de los datos. Las operaciones de borrados que se realizan en respuesta al borrado inicial
se denominan borrados en cascada.
Realizar la operación, y poner en la clave externa de las tuplas de
las relaciones dependientes, o bien valores nulos, o bien valores predefinidos, de forma que se garantice la consistencia de los datos. Las
operaciones de actualización que se realizan en respuesta al borrado
inicial se denominan actualizaciones en cascada.
Para las actualizaciones, hay que considerar dos casos, las actualizaciones en la tabla referenciada o maestra y las realizadas en la tabla referenciante o de detalle.
Si se modifica la clave externa, en la tabla de detalles, el nuevo valor debe existir en la tabla maestra. En caso contrario, se cancela la
operación.
Si se modifica la clave primaria, en la tabla maestra, se debe realizar
una comprobación similar a la realizada en el borrado, que puede
incluir también la cancelación de la operación o la realización de
actualizaciones en cascada
2.3.
Integridad referencial en SQL
Las claves externas pueden especificarse como parte de la instrucción
create table de SQL usando la cláusula foreign key.
De manera predeterminada, una clave externa referencia los atributos
que forman la clave primaria de la tabla referenciada (SQL también soporta una versión de la cláusula references, donde se puede especificar
explı́citamente una lista de atributos de la relación referenciada).
Se usa la siguiente sintaxis para declarar que un atributo forma una
clave externa:
foreign key (A1 [, A2 , . . . , An ])
references R
Cuando se viola una restricción de integridad referencial, el procedimiento normal es rechazar la acción que provocó la violación. Sin embargo,
3
ASERTOS
6
la cláusula foreign key puede especificar las acciones a tomar para restaurar
la integridad referencial.
La cláusula on delete cascade asociada con la declaración de la clave
externa, provoca que el borrado se realice en cascada. La cláusula on update cascade, de forma similar realiza una actualización en cascada, si se
modifica la clave primaria.
SQL también permite una acción diferente: establecer a nulo o darle un
valor predeterminado a los atributos de la clave externa, de forma que se
mantenga la integridad referencial, con la cláusula set default.
Si hay una cadena de dependencias de claves externas entre varias
relaciones, un borrado o una actualización en uno de sus extremos puede
propagarse por toda la cadena, de ahı́ la denominación de actualizaciones
o borrados en cascada.
Las transacciones pueden consistir en varios pasos, y las restricciones de
integridad se pueden violar temporalmente dentro de una transacción. Las
restricciones de integridad se comprueban sólo al final de la transacción, no
en los pasos intermedios.
3.
Asertos
Un aserto es un predicado que expresa una condición que se desea que
la base de datos satisfaga siempre.
Las restricciones de dominio y las de integridad referencial son formas
especiales de los asertos. Se les ha prestado una atención especial porque se
pueden verificar con facilidad y se aplican a una gran variedad de aplicaciones de bases de datos. Sin embargo, hay muchas restricciones que no se
pueden expresar utilizando únicamente estas formas especiales. Ejemplos
de estas restricciones pueden ser:
La suma de todos los importes de los préstamos de cada sucursal
debe ser menor que la suma de todos los saldos de las cuentas de esa
sucursal.
Cada préstamo tiene al menos un cliente que tiene una cuenta con un
saldo mı́nimo de 1.000 Euros.
En SQL los asertos adoptan la forma:
create assertion <nombre-aserto> check <predicado>
Cuando se crea un aserto el sistema comprueba su validez. Si el aserto es
válido, sólo se permiten las modificaciones posteriores de la base de datos
que no hagan que se viole el aserto.
Esta comprobación puede introducir una sobrecarga importante si se
han realizado asertos complejos. Por tanto, los asertos deben utilizarse con
precaución.
4
DISPARADORES (TRIGGERS)
4.
7
Disparadores (triggers)
Un disparador es una orden que el sistema ejecuta de manera automática
como efecto secundario de la modificación de la base de datos.
Para diseñar un mecanismo disparador hay que cumplir dos requisitos:
Especificar las condiciones en las que se va a ejecutar el disparador.
Esto se descompone en un evento que causa la comprobación del
disparador y una condición que se debe cumplir para ejecutar el disparador.
Especificar las acciones que se van a realizar cuando se ejecute el
disparador.
Este modelo de disparadores se denomina modelo evento–condición–
acción.
Una vez se almacena un disparador en la base de datos, el sistema de
base de datos asume la responsabilidad de ejecutarlo cada vez que ocurra
el evento especificado y se satisfaga la condición correspondiente.
4.1.
Necesidad de los disparadores
Los disparadores son mecanismos útiles para alertar a los usuarios o
para realizar de manera automática ciertas tareas cuando se cumplen determinadas condiciones.
Obsérvese que los sistemas de disparadores en general no pueden realizar actualizaciones fuera de la base de datos,
4.2.
Disparadores en SQL
Los sistemas de bases de datos SQL usan ampliamente los disparadores,
aunque antes de SQL:1999 no fueron parte de la norma. Por desgracia,
cada sistema de bases de datos implementó su propia sintaxis para los
disparadores, conduciendo a incompatibilidades (La sintaxis SQL:1999 para
los disparadores es similar a la sintaxis de los sistemas de bases de datos
DB2 de IBM y de Oracle).
El disparador debe especificar sobre que tabla se va a activar, y que
operación lo dispara: insert, update o delete (No hay disparadores en los
select porque estos no modifican los datos). Además debe indicar, cuando
se va a ejecutar, antes (before) o después (after) de la operación). También
se puede especificar una predicado de condición necesario para la activación del trigger, mediante la cláusula when. Para las actualizaciones, el
disparador puede especificar aquellas columnas cuya actualización cause
la ejecución del disparador.
5
SEGURIDAD Y AUTORIZACIÓN
8
El código que se ejecuta en el disparador puede necesitar los valores
de los atributos antes y después de ser modificados. para ello se utilizan
las cláusulas referencing new row as y referencing old row as. Los valores
nuevos son accesibles en disparadores de inserción o actualización, y los
valores antiguos en disparadores de actualización o borrado.
Estos disparadores pueden servir como restricciones extras que pueden
evitar actualizaciones no válidas. Por ejemplo, si no se desea permitir descubiertos, se puede crear un disparador before que retroceda la transacción
si el nuevo saldo es negativo.
En lugar de realizar una acción por cada fila afectada, se puede realizar
una acción única para la instrucción SQL completa que causó la inserción,
borrado o actualización. Para hacerlo se usa la cláusula for each statement
en lugar de for each row. Las cláusulas referencing old table as o referencing new table as se pueden usar entonces para hacer referencia a tablas
temporales (denominadas tablas de transición) conteniendo todas las filas
afectadas. Las tablas de transición no se pueden usar con los disparadores
before, pero sı́ con los after, independientemente de si son disparadores de
instrucciones (statement) o de filas (row).
4.3.
Cuando no deben usarse disparadores
No se deben usar disparadores para resolver problemas que ya tiene
otro mecanismo de resolución, es decir, no se deben usar disparadores para
limitar el rango de valores de un atributo (Para eso se usan los dominios),
o para preservar la integridad referencial, por ejemplo.
A veces se utilizan también para proporcionar datos consolidados o
resumidos, obtenidos a partir de los datos reales. Si el sistema gestor lo
permite, es mejor utilizar vistas materializadas.
Otro uso tı́pico que se puede evitar es el uso de disparadores para realizar copias de los datos, usando los disparadores para marcar los registros
que se hayan modificador, creado o borrado desde la última copia. La mayor parte de los sistemas gestores modernos permiten realizar estas réplicas
bajo el control del gestor.
Por último, las bases de datos orientadas o objetos incluyen varios
mecanismos de encapsulamiento que también pueden sustituir y mejorar
la funcionalidad que nos pueden dar los disparadores.
5.
5.1.
Seguridad y autorización
Violaciones de la seguridad
Existen varias formas de acceso que pueden ser mal utilizadas. Concretamente hay que impedir las operaciones de lectura no autorizada, las
modificaciones no autorizadas, y la destrucción de datos no autorizada
5
SEGURIDAD Y AUTORIZACIÓN
9
Para proteger la base de datos hay que adoptar medidas de seguridad
en varios niveles: A nivel de Base de datos, a nivel de Sistema operativo,
de redes, seguridad fı́sica y por último, pero no menos importante, a nivel
humano.
Las dos últimas son especialmente importantes, ya que romper la seguridad a esos niveles más bajos normalmente conlleva el poder saltársela a
niveles más altos. Piénsese, por ejemplo, lo que podrı́a hacer un intruso que
obtuviera, mediante engaños, el identificador de usuario y la contraseña
del administrador, o con acceso fı́sico a las máquinas y a los discos que
gestionan y almacenan la base de datos.
5.2.
Autorizaciones
Un esquema de seguridad muy utilizado es el autorizaciones, que permitirı́a realizar (o no) determinadas operaciones sobre los datos. Por ejemplo,
podemos tener una autorización para lectura, otra para inserción, otra para
modificación y otro para borrado. Se le pueden asignar a un usuario todos
los tipos de autorización, ninguno o una combinación de ellos.
Además de estas autorizaciones, se pueden tener autorizaciones para
trabajar con ı́ndices, modificar el esquema, etc...
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 la
misma.
La forma superior de autoridad es la concedida al administrador de la
base de datos. El administrador de la base de datos puede autorizar usuarios
nuevos, reestructurar la base de datos, etcétera. Esta forma de autorización
es análoga a la proporcionada al superusuario u operador del sistema operativo.
5.3.
Autorizaciones y vistas
Como se vio en el tema 3, se pueden utilizar vistas para ocultar determinada información, que el usuario de la vista no desea o no deba ver.
La creación de vistas no requiere la autorización de recursos. El usuario
que crea una vista no recibe necesariamente todos los privilegios sobre la
misma. Sólo recibe los privilegios que no añaden nuevas autorizaciones a
las que ya posee. Por ejemplo, un usuario no puede recibir la autorización
de actualización sobre una vista si no tiene la autorización de actualización
sobre las relaciones utilizadas para definir la vista.
5
SEGURIDAD Y AUTORIZACIÓN
5.4.
10
Concesión de privilegios
Un usuario al que se le ha concedido una autorización puede ser autorizado a transmitirla a otros usuarios. Sin embargo, hay que tener cuidado
con el modo en que se hace, para poder asegurar que la misma pueda
retirarse en el futuro.
La transmisión de la autorización de un usuario a otro puede representarse mediante un grafo. Los nodos de este grafo son los usuarios. Un arco
Ui → U j indica que el usuario Ui concede una autorización a U j . La raı́z de
todos los grafos será el administrador de la base de datos.
Un usuario tiene autorización si y sólo si hay un camino desde el administrador de la base de datos hasta el nodo que representa a ese usuario.
Esto se hace ası́ para evitar que un par de usuarios eludan las reglas de
retirada de autorizaciones concediéndose autorización mutuamente.
5.5.
El concepto de papel (rol)
Los papeles o roles son una forma de simplificar la asignación de autorizaciones a los usuarios. Las autorizaciones se conceden a los papeles, de
igual modo que se conceden a usuarios individuales. En la base de datos se
crea un conjunto de papeles. Se concede uno o varios papeles a cada usuario
de la base de datos.
Una alternativa similar, pero menos preferible, serı́a crear un identificador de usuario cajero y permitir que cada cajero se conectase a la base de
datos usando este identificador. El problema con este esquema es que no
serı́a posible identificar exactamente al cajero que ha realizado una determinada transacción, conduciendo a problemas de seguridad.
5.6.
Trazas de auditorı́a
Una traza de auditorı́a es un registro histórico de todos los cambios
(inserciones, borrados o actualizaciones) de la base de datos, junto con
información sobre quién realizó el cambio y cuando.
Es posible crear una traza de auditorı́a definiendo disparadores (usando variables definidas del sistema que identifican el nombre de usuario
y la hora). Sin embargo, muchos sistemas de bases de datos proporcionan mecanismos incorporados para crear trazas de auditorı́a, que son más
convenientes de utilizar.
6
AUTORIZACIÓN EN SQL
6.
6.1.
11
Autorización en SQL
privilegios en SQL
La norma SQL incluye los privilegios delete, insert, select y update .
SQL también incluye un privilegio references que permite a un usuario o
papel declarar claves externas al crear relaciones. Si la relación que se va
a crear incluye una clave externa que hace referencia a atributos de otra
relación, el usuario o papel debe haber recibido el privilegio references
sobre esos atributos.
El lenguaje de definición de datos de SQL incluye órdenes para conceder
y retirar privilegios. La instrucción grant se utiliza para conferir autorizaciones.
grant <lista de privilegios> on <nombre de relación o de lista> to <lista
de usuarios/papeles>
Para retirar una autorización se utiliza la instrucción revoke. Adopta
una forma casi idéntica a la de grant:
revoke <lista de privilegios> on <nombre de relación o de vista> from
<lista de usuarios o papeles> [restrict | cascade]
Las autorización update e insert puede concederse sobre todos los atributos de la relación o sólo sobre algunos. la lista de atributos sobre los que se
va a conceder la autorización opcionalmente aparece entre paréntesis justo
después de la palabra clave update o insert. Si se omite la lista de atributos
se concede sobre todos los atributos de la relación.
El privilegio SQL references también se concede con grant. La siguiente
instrucción grant permite al usuario U1 crear relaciones que hagan referencia a la clave nombre-sucursal de la relación sucursal como si fuera una
clave externa:
grant references (nombre-sucursal) on sucursal to U1
En un principio puede parecer que no hay ningún motivo para evitar
que los usuarios creen claves externas que hagan referencia a otra relación.
Sin embargo, hay que recordar que las restricciones de las claves externas pueden limitar las operaciones de borrado y de actualización sobre la
relación a la que hacen referencia.
El privilegio all privileges puede utilizarse como una forma abreviada
de todos los privilegios que se pueden conceder. De manera parecida, el
nombre de usuario public hace referencia a todos los usuarios presentes y
futuros del sistema.
6
AUTORIZACIÓN EN SQL
6.1.1.
12
Papeles o roles
Los papeles se pueden crear como sigue:
create role cajero
Se pueden conceder privilegios a los papeles al igual que a los usuarios,
como se ilustra en la siguiente instrucción
grant select on cuenta to cajero
Los papeles se pueden asignar a los usuarios, ası́ como a otros papeles,
como muestran estas instrucciones.
grant cajero to Juan
create role gestor
grant cajero to gestor
grant gestor to marı́a
Nótese que esto puede generar una cadena de papeles. Los privilegios
efectivos consisten en todos los privilegios concedidos directamente más
los concedidos indirectamente.
Debido a esto, la retirada de un privilegio a un usuario o papel puede
hacer que otros usuarios o papeles también lo pierdan. Este comportamiento
se denomina retirada en cadena.
6.1.2.
El privilegio de conceder privilegios
Un usuario o papel al que se le concede un privilegio no está autorizado
de manera predeterminada a concederlo. Si se desea conceder un privilegio
a un usuario y permitirle que lo transmita a otros usuarios hay que añadir la
cláusula with grant option a la orden grant correspondiente. Por ejemplo,
si se desea conceder a U1 el privilegio select sobre sucursal y que pueda
transmitirlo a otros, hay que escribir
grant select on sucursal to U1 with grant option
6.1.3.
Otras caracterı́sticas
El creador de un objeto (relación, vista o papel) obtiene todos los privilegios sobre el objeto, incluyendo el privilegio de conceder privilegios a
otros.
7
CIFRADO Y AUTENTICACIÓN
7.
13
Cifrado y autenticación
Para información extremadamente reservada es necesario cifrar los datos.
Los datos cifrados no se pueden leer a menos que el lector sepa la manera
de descifrarlos. El cifrado también forma la base de los buenos esquemas
para la autenticación de usuarios en una base de datos.
7.1.
Técnicas de cifrado
Una buena técnica de cifrado tiene las propiedades siguientes:
Es relativamente sencillo para los usuarios autorizados cifrar y descifrar los datos.
El esquema de cifrado no depende de lo poco conocido que sea el
algoritmo, sino más bien de un parámetro del algoritmo denominado
clave de cifrado.
Es extremadamente difı́cil para un intruso determinar la clave de
cifrado.
Los esquemas como DES, TripleDES o Rijndael son esquemas de cifrado
simétricos (Se usa la misma clave para cifrar que para descifrar). Para que
este esquema funcione los usuarios autorizados deben proveerse de la clave
de cifrado mediante un mecanismo seguro, por lo que el esquema es tan
seguro como lo sea este mecanismo.
Los cifrados de clave pública utilizan claves distintas para el cifrado
y para el descifrado, por lo que puede evitar en parte el problema de la
distribución de la clave.
Cada usuario Ui tiene una clave pública Ci y una clave privada Di . Las
claves públicas, como su nombre indica, son de dominio público: cualquiera
puede verlas. La clave privada, por el contrario, sólo es conocida por el
usuario al que pertenece. Si el usuario U1 desea guardar datos cifrados, los
cifra utilizando su clave pública C1 . Descifrarlos requiere la clave privada
D1 (Que sólo el conoce).
Como la clave de cifrado de cada usuario es pública es posible intercambiar información de manera segura. Si el usuario U1 desea compartir
los datos con U2 los codifica utilizando C2 , la clave pública de U2 . Dado que
sólo U2 conoce la manera de descifrar los datos, la información se transmite
de manera segura.
Para que el cifrado de clave pública funcione debe haber un esquema
de cifrado que pueda hacerse público sin permitir a la gente descubrir el
esquema de descifrado. En otros términos, debe ser difı́cil deducir la clave
privada dada la clave pública.
7
CIFRADO Y AUTENTICACIÓN
14
Pese a que el cifrado de clave pública es seguro, también es costoso en
cuanto a cálculo. Se suele utilizar un esquema hı́brido para la comunicación
segura: Se establece una clave de sesión, utilizando cifrado simétrico, por
ejemplo DES. las claves se trasmite mediante un cifrado de clave pública y
posteriormente se utiliza el cifrado DES para los datos transmitidos.
7.2.
Autenticación
La autenticación se refiere a la tarea de verificar la identidad de una
persona o software que se conecte a una base de datos.
La forma más simple consiste en una contraseña o password que se debe
presentar cuando se abra una conexión a la base de datos. Sin embargo, el
uso de contraseñas tiene algunos inconvenientes, especialmente en una red.
Un esquema más seguro es el sistema de desafı́o/respuesta. El sistema de
bases de datos envı́a una cadena de desafı́o al usuario. El usuario cifra la
cadena de desafı́o usando una contraseña secreta como clave de cifrado
y devuelve el resultado. El sistema de bases de datos puede verificar la
autenticidad del usuario descifrando la cadena, y comparando el resultado
con la cadena de desafı́o original. La ventaja de este sistema es que las
contraseñas no circulen por la red.
Los sistemas de clave pública también se pueden usar para cifrar en un
sistema de desafı́o/respuesta. se cifra la cadena de desafı́o usando la clave
pública del usuario y se le envı́a al usuario. Éste descifra la cadena con
su clave privada y devuelve el resultado al sistema de bases de datos. El
sistema de bases de datos comprueba entonces la respuesta. Este esquema
tiene la ventaja añadida de no almacenar la contraseña en la base de datos.