EQUIPO 9 FRAGOSO PEÑA FERNANDO HUERTA GÓMEZ DANIEL PÉREZ OCHOA VALERI PÉREZ SAN JUAN ALDO PAILLES RUBIÑOS FRANCISCO NICOLÁS
Las restricciones de integridad proporcionan un medio de asegurar que las modificaciones hechas a la base de datos por los usuarios autorizados no provoquen la pérdida de la consistencia de los datos.  Restricciones de integridad para el modelo E-R: Declaración de claves. Forma de la relación.
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. Es posible que varios atributos tengan el mismo dominio.  Una definición adecuada de las restricciones de los dominios no sólo permite verificar los valores introducidos en la base de datos, sino también examinar las consultas para asegurarse de que tengan sentido las comparaciones que hagan.
La cláusula  create domain  se puede usar para definir nuevos dominios. Para las instrucciones: create domain  Euros  numeric (12,2) create domain  Dólares  numeric (12,2) Definen los dominios  Euros  y  Dólares  como números decimales con un total de 12 dígitos dos de los cuales se sitúan después de la coma decimal.
Los valores de un dominio pueden ser  convertidos  a otro dominio. Si el atributo  A  de la relación  r  es de tipo  Euros,  se puede convertir a  Dólares  escribiendo: cast  r.A  as  Dólares 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 los dominios de maneras poderosas que no permiten la mayor parte de los sistemas de tipos de los lenguajes de programación.  create domain   sueldo-por-hora   numeric (5,2) constrain   comprobación-valor-sueldo check ( value  >- 4.oo)
La cláusula  check  también puede utilizarse para restringir un dominio para que no contenga valores nulos: create domain  número-cuenta  char (10) constrain  comprobación-número-cuenta-nulo check(value not null)
El dominio se puede limitar para que contenga sólo un conjunto especificado de valores usando la cláusula  in : create domain  tipo-cuenta  char (10) constrain  comprobación-tipo-cuenta check ( value in  (‘Corriente’, ‘Ahorro’))
INTEGRIDAD REFERENCIAL Se denomina  integridad referencial  al deseo de 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.
Integridad referencial en el modelo E-R Las restricciones de integridad referencial aparecen con frecuencia. 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.  Modificación de la base de datos La modificación de la base de datos puede ocasionar violaciones de la integridad referencial.
Integridad referencial en SQL Las claves primarias 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. Esta lista se debe declarar como clave candidata de la relación referenciada. Forma abreviada como parte de la definición de un atributo para declarar que el atributo forma una clave externa: n ombre-sucursal  char (15)  references  sucursal
Cuando se viola una restricción de integridad referencial, el procedimiento normal es rechazar la acción que provocó la violación. Sin embargo, la cláusula  foreign key  puede especificar que si una acción de borrado o de actualización de la relación a la que hace referencia viola la restricción, en lugar de rechazar la acción, hay que adoptar medidas para modificar tupla de la relación que hace la referencia con objeto de restaurar la restricción. Considérese la siguiente definición de una restricción de integridad de la relación  cuenta: create table  cuenta (… f oreign key  (nombre-sucursal)  references  sucursal on delete cascade on delete cascade, … )
Debido a la cláusula on delete cascade asociada con la declaración de la clave externa, si un borrado de una tupla de sucursal da lugar a que se viole la restricción de integridad referencial, el sistema no rechaza el borrado. En su lugar, el borrado se realiza en <<cascada>> en la relación cuenta, borrando la tupla que hace referencia a la sucursal que se borró.  SQL también permite que la cláusula foreign key especifique una acción diferente a cascade si se viola la restricción; el campo que hace la referencia (nombre-sucursal) se puede establecer en nulo o darle un valor predeterminado para el dominio (usando set default).
Si hay cadena de dependencias de claves externas entre varias relaciones, un borrado o una actualización en uno de sus extremos pueden propagarse por toda la cadena. Si una actualización o borrado en cascada crea una violación de la restricción que no puede resolverse mediante una nueva operación en cascada, el sistema aborta la transacción. En consecuencia, todas las modificaciones generadas por la transacción y por sus acciones en cascada se deshacen. En SQL la semántica de las claves se complica por el hecho de que SQL permite valores nulos. Los atributos de las claves externas pueden ser nulos.
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. Sin embargo, hay muchas restricciones que no se pueden expresar utilizando únicamente estas formas especiales. En SQL los asertos adoptan la forma: create assertion  <nombre-aserto>  check  <predicado>
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. create assertion  <nombre-aserto>  check  <predicado> Las dos restricciones mencionadas pueden escribirse: create assertion  restricción-suma  check ( not exist  ( select*from  sucursal where  ( select sum (importe)  from  préstamo   where  préstamo.nombre-sucursal   =sucursal.nombre-sucursal) >= ( select sum  (importe)  from  cuenta   Where  préstamo.nombre-sucursal   =sucursal.nombre-sucursal)))
Cada préstamo tiene al menos un cliente que tiene una cuenta con un saldo mínimo de 1.ooo Euros. create assertion  restricción-saldo  check ( not exist  ( select*from  préstamo where not exist  ( select*   from  prestatario, impositor, cuenta   where  préstamo.número-préstamo   = prestatario.número-préstamo and  prestatario.nombre-prestatario   = impositor.nombre-cliente and  imposotor.número-cuenta   = cuenta.número-cuenta and  cuenta.saldo >= 100)))
DISPARADORES 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 u una  condición  que se debe cumplir para la ejecutar el disparador. Especificar las  acciones  que se van a realizar cuando se ejecute el disparador.
Necesidades 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.  Ejemplo: Insertar una nueva tupla  s  a la relación  préstamo  con s{nombre-sucursal}=t{nombre-sucursal} s{número-préstamo}=t{número-cuenta} s{importe}=-t{saldo}   Insertar una nueva tupla  u  a la relación  prestatario  con u{nombre-cliente}=<<Santos>> u{número-préstamo}=t{número-cuenta}
Disparadores en SQL Una instrucción de actualización SQL podría actualizar múltiples tuplas de la realización, y la cláusula  for each row  en el código del disparador se iteraría explícitamente por cada fila actualizada. La cláusula  referencing new row as  crea una variable  nfila  (denominada  variable de transición ) que almacena el valor de una fila actualizada después de la actualización. La instrucción  when  especifica una condición, en este caso  nfila…saldo <0. El sistema ejecuta el resto del cuerpo del disparador sólo para las tuplas que satisfacen la condición. La cláusula  begin atomic…end  sirve para encuadrar varias instrucciones SQL en una única instrucción compuesta. Las dos instrucciones  insert  en la estructura  begin…end  realizan las tareas específicas para la creación de nuevas tuplas en las relaciones  prestatario  y  préstamo  para representar el nuevo préstamo. La instrucción  update  sirve para establecer en 0 el saldo de la cuenta.
El evento del disparador puede tener varias formas: El  evento  del disparador puede ser  insert  o  delete  en lugar de  update. Para las actualizaciones el disparador puede especificar columnas cuya actualización cause la ejecución del disparador. La cláusula  referencing old row as  se puede usar para crear una variable que almacene el valor anterior de una fila actualizada o borrada. La cláusula  referencing new row as  se puede usar con las inserciones además de las actualizaciones. Los disparadores se pueden activar antes  (before)  del evento  (insert/delete/update)  en lugar de después  (after)  del evento.
Estos disparadores pueden servir como restricciones extras que pueden evitar actualizaciones no válidas. Se puede definir un disparador que reemplace el valor por el valor  null . Se puede usar la instrucción  set  para realizar modificaciones. create trigger   poner-nulo   before update on   r referencing new row as   nfila for each row when   nfila.número-teléfono = ‘’ set   nfila.número-teléfono = ‘’
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 instrucción ( statement ) o de filas ( row ). Una instrucción SQL única se puede usar para realizar varias acciones en términos de las tablas de transición.
SEGURIDAD Y AUTORIZACIÓN Los datos guardados en la base de datos deben estar protegidos contra los accesos no autorizados, de la destrucción o alteración malintencionadas además de la introducción accidental de inconsistencias que evitan las restricciones de integridad. Violaciones de la seguridad  Entre las formas de acceso malintencionados se encuentran: La lectura no autorizada de los datos (robo de información). La modificación no autorizada de los datos. La destrucción no autorizada de los datos.
La  seguridad de las bases de datos  se refiere a la protección frente a accesos malintencionados. No es posible la protección absoluta de la base de datos contra el uso malintencionado, pero se puede elevar lo suficiente el costo para quien lo comete como para disuadir la mayor parte, sino la totalidad, de los intentos de tener acceso a la base de datos sin la autorización adecuada.  Para proteger la base de datos hay que adoptar medidas de seguridad en varios niveles: Sistemas de bases de datos. Sistema operativo.   Red.   Físico.   Humano.
Autorizaciones  Los usuarios pueden tener varios tipos de 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 relaciones nuevas. La autorización de alteración  permite el añadido o el borrado de atributos de las relaciones. La autorización de la eliminación  permite el borrado de las relaciones.
Autorizaciones y vistas Una vista puede ocultar los datos que un usuario no necesita ver. La capacidad de las vistas para 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 puede que se niegue el acceso a una relación mediante una vista. Por tanto, se puede usar 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 necesita.  La creación de vistas no necesita la autorización de  recursos.  El usuario que crea una vista no recibe necesariamente todos los privilegios sobre la misma. Ese usuario sólo recibe los privilegios que no proporcionan autorizaciones adicionales respecto de las que ya posee. Si un usuario crea una vista sobre la que no se puede conceder ninguna autorización, se deniega la solicitud de creación de la vista.
Concesión de privilegios El usuario al que se la ha concedido alguna forma de autorización puede ser autorizado a transmitir esa autorización a otros usuarios. Sin embargo hay que tener cuidado con el modo en que se puede transmitir la autorización entre los usuarios para 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 de autorización.
AUTORIZACIÓN EN SQL Privilegios en SQL La norma SQL incluye los privilegios  delete, insert, select  y  update.  El privilegio  select  se corresponde con el privilegio de  lectura.  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 que hace referencia a atributos de otra relación, el usuario o papel debe haber recibido el privilegio  references  sobre esos atributos. El motivo de que el privilegio  references  sea una característica útil es algo sutil. 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. La forma básica de esta instrucción es la siguiente: grant  <lista de privilegios>  on  <nombre de la relación o de la lista>  to  <lista de usuarios/papeles>
La autorización  update  puede concederse sobre todos los atributos de la relación o sólo sobre algunos. Si se incluye la autorización  update  en una instrucción  grant,  la lista de atributos sobre los que se va a conceder la autorización  update  opcionalmente aparece entre paréntesis justo después de la palabra clave  update.  Si se omite la lista de atributos se concede el privilegio  update  sobre los atributos de la relación.  En SQL, el privilegio  insert,  también puede especificar una lista de atributos; cualquier inserción en la relación debe especificar sólo esos atributos y al resto de los atributos se les conceden valores predeterminados (si hay alguno definido para ellos) o se les da el valor nulo. El privilegio SQL  references  se concede sobre atributos concretos de manera parecida a la mostrada para el privilegio  update. El privilegio  all privileges  puede utilizarse como una forma abreviada de todos los privilegios que se pueden conceder. SQL incluye también un privilegio  usage  que autoriza a un usuario a utilizar un dominio especificado.

INTEGRIDAD Y SEGURIDAD

  • 1.
    EQUIPO 9 FRAGOSOPEÑA FERNANDO HUERTA GÓMEZ DANIEL PÉREZ OCHOA VALERI PÉREZ SAN JUAN ALDO PAILLES RUBIÑOS FRANCISCO NICOLÁS
  • 2.
    Las restricciones deintegridad proporcionan un medio de asegurar que las modificaciones hechas a la base de datos por los usuarios autorizados no provoquen la pérdida de la consistencia de los datos. Restricciones de integridad para el modelo E-R: Declaración de claves. Forma de la relación.
  • 3.
    RESTRICCIONES DE LOSDOMINIOS 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. Es posible que varios atributos tengan el mismo dominio. Una definición adecuada de las restricciones de los dominios no sólo permite verificar los valores introducidos en la base de datos, sino también examinar las consultas para asegurarse de que tengan sentido las comparaciones que hagan.
  • 4.
    La cláusula create domain se puede usar para definir nuevos dominios. Para las instrucciones: create domain Euros numeric (12,2) create domain Dólares numeric (12,2) Definen los dominios Euros y Dólares como números decimales con un total de 12 dígitos dos de los cuales se sitúan después de la coma decimal.
  • 5.
    Los valores deun dominio pueden ser convertidos a otro dominio. Si el atributo A de la relación r es de tipo Euros, se puede convertir a Dólares escribiendo: cast r.A as Dólares SQL también proporciona las cláusulas drop domain y alter domain para borrar o modificar dominios que se hayan declarado anteriormente.
  • 6.
    La cláusula check de SQL permite restringir los dominios de maneras poderosas que no permiten la mayor parte de los sistemas de tipos de los lenguajes de programación. create domain sueldo-por-hora numeric (5,2) constrain comprobación-valor-sueldo check ( value >- 4.oo)
  • 7.
    La cláusula check también puede utilizarse para restringir un dominio para que no contenga valores nulos: create domain número-cuenta char (10) constrain comprobación-número-cuenta-nulo check(value not null)
  • 8.
    El dominio sepuede limitar para que contenga sólo un conjunto especificado de valores usando la cláusula in : create domain tipo-cuenta char (10) constrain comprobación-tipo-cuenta check ( value in (‘Corriente’, ‘Ahorro’))
  • 9.
    INTEGRIDAD REFERENCIAL Sedenomina integridad referencial al deseo de 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.
  • 10.
    Integridad referencial enel modelo E-R Las restricciones de integridad referencial aparecen con frecuencia. 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. Modificación de la base de datos La modificación de la base de datos puede ocasionar violaciones de la integridad referencial.
  • 11.
    Integridad referencial enSQL Las claves primarias 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. Esta lista se debe declarar como clave candidata de la relación referenciada. Forma abreviada como parte de la definición de un atributo para declarar que el atributo forma una clave externa: n ombre-sucursal char (15) references sucursal
  • 12.
    Cuando se violauna restricción de integridad referencial, el procedimiento normal es rechazar la acción que provocó la violación. Sin embargo, la cláusula foreign key puede especificar que si una acción de borrado o de actualización de la relación a la que hace referencia viola la restricción, en lugar de rechazar la acción, hay que adoptar medidas para modificar tupla de la relación que hace la referencia con objeto de restaurar la restricción. Considérese la siguiente definición de una restricción de integridad de la relación cuenta: create table cuenta (… f oreign key (nombre-sucursal) references sucursal on delete cascade on delete cascade, … )
  • 13.
    Debido a lacláusula on delete cascade asociada con la declaración de la clave externa, si un borrado de una tupla de sucursal da lugar a que se viole la restricción de integridad referencial, el sistema no rechaza el borrado. En su lugar, el borrado se realiza en <<cascada>> en la relación cuenta, borrando la tupla que hace referencia a la sucursal que se borró. SQL también permite que la cláusula foreign key especifique una acción diferente a cascade si se viola la restricción; el campo que hace la referencia (nombre-sucursal) se puede establecer en nulo o darle un valor predeterminado para el dominio (usando set default).
  • 14.
    Si hay cadenade dependencias de claves externas entre varias relaciones, un borrado o una actualización en uno de sus extremos pueden propagarse por toda la cadena. Si una actualización o borrado en cascada crea una violación de la restricción que no puede resolverse mediante una nueva operación en cascada, el sistema aborta la transacción. En consecuencia, todas las modificaciones generadas por la transacción y por sus acciones en cascada se deshacen. En SQL la semántica de las claves se complica por el hecho de que SQL permite valores nulos. Los atributos de las claves externas pueden ser nulos.
  • 15.
    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. Sin embargo, hay muchas restricciones que no se pueden expresar utilizando únicamente estas formas especiales. En SQL los asertos adoptan la forma: create assertion <nombre-aserto> check <predicado>
  • 16.
    La suma detodos 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. create assertion <nombre-aserto> check <predicado> Las dos restricciones mencionadas pueden escribirse: create assertion restricción-suma check ( not exist ( select*from sucursal where ( select sum (importe) from préstamo where préstamo.nombre-sucursal =sucursal.nombre-sucursal) >= ( select sum (importe) from cuenta Where préstamo.nombre-sucursal =sucursal.nombre-sucursal)))
  • 17.
    Cada préstamo tieneal menos un cliente que tiene una cuenta con un saldo mínimo de 1.ooo Euros. create assertion restricción-saldo check ( not exist ( select*from préstamo where not exist ( select* from prestatario, impositor, cuenta where préstamo.número-préstamo = prestatario.número-préstamo and prestatario.nombre-prestatario = impositor.nombre-cliente and imposotor.número-cuenta = cuenta.número-cuenta and cuenta.saldo >= 100)))
  • 18.
    DISPARADORES 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 u una condición que se debe cumplir para la ejecutar el disparador. Especificar las acciones que se van a realizar cuando se ejecute el disparador.
  • 19.
    Necesidades de losdisparadores Los disparadores son mecanismos útiles para alertar a los usuarios o para realizar de manera automática ciertas tareas cuando se cumplen determinadas condiciones. Ejemplo: Insertar una nueva tupla s a la relación préstamo con s{nombre-sucursal}=t{nombre-sucursal} s{número-préstamo}=t{número-cuenta} s{importe}=-t{saldo}   Insertar una nueva tupla u a la relación prestatario con u{nombre-cliente}=<<Santos>> u{número-préstamo}=t{número-cuenta}
  • 20.
    Disparadores en SQLUna instrucción de actualización SQL podría actualizar múltiples tuplas de la realización, y la cláusula for each row en el código del disparador se iteraría explícitamente por cada fila actualizada. La cláusula referencing new row as crea una variable nfila (denominada variable de transición ) que almacena el valor de una fila actualizada después de la actualización. La instrucción when especifica una condición, en este caso nfila…saldo <0. El sistema ejecuta el resto del cuerpo del disparador sólo para las tuplas que satisfacen la condición. La cláusula begin atomic…end sirve para encuadrar varias instrucciones SQL en una única instrucción compuesta. Las dos instrucciones insert en la estructura begin…end realizan las tareas específicas para la creación de nuevas tuplas en las relaciones prestatario y préstamo para representar el nuevo préstamo. La instrucción update sirve para establecer en 0 el saldo de la cuenta.
  • 21.
    El evento deldisparador puede tener varias formas: El evento del disparador puede ser insert o delete en lugar de update. Para las actualizaciones el disparador puede especificar columnas cuya actualización cause la ejecución del disparador. La cláusula referencing old row as se puede usar para crear una variable que almacene el valor anterior de una fila actualizada o borrada. La cláusula referencing new row as se puede usar con las inserciones además de las actualizaciones. Los disparadores se pueden activar antes (before) del evento (insert/delete/update) en lugar de después (after) del evento.
  • 22.
    Estos disparadores puedenservir como restricciones extras que pueden evitar actualizaciones no válidas. Se puede definir un disparador que reemplace el valor por el valor null . Se puede usar la instrucción set para realizar modificaciones. create trigger poner-nulo before update on r referencing new row as nfila for each row when nfila.número-teléfono = ‘’ set nfila.número-teléfono = ‘’
  • 23.
    En lugar derealizar 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 instrucción ( statement ) o de filas ( row ). Una instrucción SQL única se puede usar para realizar varias acciones en términos de las tablas de transición.
  • 24.
    SEGURIDAD Y AUTORIZACIÓNLos datos guardados en la base de datos deben estar protegidos contra los accesos no autorizados, de la destrucción o alteración malintencionadas además de la introducción accidental de inconsistencias que evitan las restricciones de integridad. Violaciones de la seguridad Entre las formas de acceso malintencionados se encuentran: La lectura no autorizada de los datos (robo de información). La modificación no autorizada de los datos. La destrucción no autorizada de los datos.
  • 25.
    La seguridadde las bases de datos se refiere a la protección frente a accesos malintencionados. No es posible la protección absoluta de la base de datos contra el uso malintencionado, pero se puede elevar lo suficiente el costo para quien lo comete como para disuadir la mayor parte, sino la totalidad, de los intentos de tener acceso a la base de datos sin la autorización adecuada. Para proteger la base de datos hay que adoptar medidas de seguridad en varios niveles: Sistemas de bases de datos. Sistema operativo. Red. Físico. Humano.
  • 26.
    Autorizaciones Losusuarios pueden tener varios tipos de 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.
  • 27.
    Los usuarios puedenrecibir 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 relaciones nuevas. La autorización de alteración permite el añadido o el borrado de atributos de las relaciones. La autorización de la eliminación permite el borrado de las relaciones.
  • 28.
    Autorizaciones y vistasUna vista puede ocultar los datos que un usuario no necesita ver. La capacidad de las vistas para 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 puede que se niegue el acceso a una relación mediante una vista. Por tanto, se puede usar 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 necesita. La creación de vistas no necesita la autorización de recursos. El usuario que crea una vista no recibe necesariamente todos los privilegios sobre la misma. Ese usuario sólo recibe los privilegios que no proporcionan autorizaciones adicionales respecto de las que ya posee. Si un usuario crea una vista sobre la que no se puede conceder ninguna autorización, se deniega la solicitud de creación de la vista.
  • 29.
    Concesión de privilegiosEl usuario al que se la ha concedido alguna forma de autorización puede ser autorizado a transmitir esa autorización a otros usuarios. Sin embargo hay que tener cuidado con el modo en que se puede transmitir la autorización entre los usuarios para 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 de autorización.
  • 30.
    AUTORIZACIÓN EN SQLPrivilegios en SQL La norma SQL incluye los privilegios delete, insert, select y update. El privilegio select se corresponde con el privilegio de lectura. 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 que hace referencia a atributos de otra relación, el usuario o papel debe haber recibido el privilegio references sobre esos atributos. El motivo de que el privilegio references sea una característica útil es algo sutil. 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. La forma básica de esta instrucción es la siguiente: grant <lista de privilegios> on <nombre de la relación o de la lista> to <lista de usuarios/papeles>
  • 31.
    La autorización update puede concederse sobre todos los atributos de la relación o sólo sobre algunos. Si se incluye la autorización update en una instrucción grant, la lista de atributos sobre los que se va a conceder la autorización update opcionalmente aparece entre paréntesis justo después de la palabra clave update. Si se omite la lista de atributos se concede el privilegio update sobre los atributos de la relación. En SQL, el privilegio insert, también puede especificar una lista de atributos; cualquier inserción en la relación debe especificar sólo esos atributos y al resto de los atributos se les conceden valores predeterminados (si hay alguno definido para ellos) o se les da el valor nulo. El privilegio SQL references se concede sobre atributos concretos de manera parecida a la mostrada para el privilegio update. El privilegio all privileges puede utilizarse como una forma abreviada de todos los privilegios que se pueden conceder. SQL incluye también un privilegio usage que autoriza a un usuario a utilizar un dominio especificado.