Capitulo 8 - Diseño y desarrollo de aplicaciones

download Capitulo 8 - Diseño y desarrollo de aplicaciones

of 37

Transcript of Capitulo 8 - Diseño y desarrollo de aplicaciones

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    1/3

    Casi todo el uso de las bases de datos se produce desde los program as de aplicacion, A su vez, casi todala interaccion de los usuarios con las bases de datos es indirecta, mediante los programas de aplicacion,No resulta sorprendente, por tanto, que los sistemas de bases de datos lleven mucho tiempo soportandoherrarnientas como los generadores de formularios y de interfaces graficas de usuario, que ayudan alograr el desarrollo rapido de aplicaciones que actuan de interfaz con los usuarios. En los ultimos anos,la red Web se ha transformado en la interfaz de usuario con las bases de datos mas usada.En la primera parte de este capitulo (Apartados 8.1 a 8.4) se estudian las herrarnientas y las tecno-

    Iogias necesarias para crear aplicaciones de bases de datos. En concreto, se centrara la atenci6n en lasherrarnientas que ayudan al desarrollo de interfaces de usuario para las bases de datos. Se comenzaracon una introducci6n a las herramientas para la creaci6n de interfaces de formularios e inforrnes. Pes-teriormente se ofrecera una vision detallada del modo en que se desarrollan aplicaciones con interfacesbasadas en Web_Mas adelante se trataran los disparadores. Los disparadores permiten que las aplicaciones controlen

    los eventos (actividades) de las bases de datos y emprendan acciones cuando se produzcan determi-nados eventos. Tambien ofrecen una manera de afiadir reglas y acciones sin modificar el c6digo yaexistente de las aplicaciones. Los disparadores fueron un afiadido de ultima hora a Ia norma de SQL Sepresentara la sintaxis de SQL tanto en la modalidad correspondiente a la norma SQL:1999 como en la dealgunos sistemas comerciales.Finalmente, se trataran la autorizaci6n y Ia seguridad. Se describiran los mecanismos de autorizaci6n

    ofrecidos por SQL y la sintaxis para su uso. Posteriormente se estudiaran las limitaciones de los mecanis-mas de autorizaci6n de SQL y se presentaran otros conceptos y tecnologias necesarios para la protecci6nde las bases de datos y de las aplicaciones.

    8.1 Interfaces de usuario y herramientasAunque mucha gente interactua con las bases de datos, poca usa un lenguaje de consultas para interac-tuar directamente can los sistemas de bases de datos. La mayor parte de las personas interactuan conlos sistemas de bases de datos usando alguno de los medias siguientes:

    1. Los formularios y las interfaces graficas de usuario permiten a los usuarios introducir los valo-res que completan las consultas predefinidas. EI sistema ejecuta las consultas, aplica el formatocorrespondiente y muestra el resultado al usuario. Las interfaces graficas de usuario ofrecen unamanera sencilla de usar de interactuar con los sistemas de bases de datos.

    2. Los generadores de informes permiten que se generen informes predefinidos sobre el contenidoactual de la base de datos. Los analistas a los adrninistradores ven esos informes para tomardecisiones comerciales.

    247

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    2/3

    248 Capitulo 8 Disefio y desarrollo de aplicaciones

    3. Las herrarnientas de analisis de datos permiten que los usuarios examinen y analicen lode manera interactiva.

    Merece la pena destacar que estas interfaces usan lenguajes de consultas para comunicarse contemas de bases de datos.En este apartado se ofrece una visi6n general de los formularies. de las interfaces graficas de u

    y de los generadores de informes. El Capitulo 14 trata las herramientas de analisis de datos codetalle. Por desgracia, no hay ninguna norma para las interfaces de usuario y cada sistema de badatos suele ofrecer su propia interfaz de usuario. En este apartado se describen los conceptos bsin profundizar en los detalles de ningun producto de interfaz de usuario concreto.

    8.1.1 Formularios e interfaces grcificas de usuarioLas interfaces de formularios se us an mucho para introducir datos y extraer informaci6n de las badatos, mediante consultas predefinidas. Por ejemplo, los motores de busqueda en la World Widofrecen formularios que se usan para introducir las palabras clave. La pulsaci6n del bot6n de "rernhace que el motor de busqueda ejecute la consulta usando las palabras clave introducidas y mueresultado al usuario.Como ejemplo mas orientado a las bases de datos, se puede establecer conexi6n con el siste

    matriculaci6n de una universidad, en el que se pide que se escriban en un formula rio el numeidentificaci6n y la contrasefia. El sistema usa esta informaci6n para comprobar la identidad del uy para extraer informaci6n, como el nombre y las asignaturas de las que se ha matriculado, dede datos y mostrarla. Puede que haya otros enlaces en Ia pagina Web que permitan buscar asigny hallar mas informaci6n sobre ellas, como puede ser el programa y la persona que las imparte.Los programadores pueden crear formularios e interfaces grMicas de usuario usando navega

    Web como parte visible al usuario, a usando formularios y otros servicios ofrecidos por las interfaprogramaci6n de aplicaciones (APls, application-programmer interfaces) de los lenguajes de progcion, como Java Swing, 0 las APIs proporcionadas con Visual Basic a con Visual C++. Los navegaWeb que soportan HTML constituyen los formularios e interfaces graficas de usuario mas usadasdia. Aunque el navegador Web proporciona la parte visible al usuario para interactuar con el, elsamiento subyacente se lleva a cabo en el servidor Web, usando tecnologias tales como los servJava, las paginas de servidor de Java (Java Server Pages, JSP)0 las paginas activas de servidorServer Pages, ASP). En el Apartado 8.3.2 se estudiara 1amanera de crear formularios usando HTMmanera de crear sistemas en segundo plano mediante los servlets de Java en el Apartado 8.4.Hay gran variedad de herramientas que simplifican la creaci6n de interfaces graficas de usu

    de formularios. Estas herramientas permiten a los desarrolladores de aplicaciones crear formude manera declarativa sencilla, mediante los programas editores de formularios. Los usuarios pdefinir el tipo, el tamafio y el formato de cada campo del formulario mediante el editor de formuSe pueden asociar acciones del sistema can las acciones de los usuarios, como la escritura en unla pulsaci6n de una tecla de funci6n del teclado 0 el envio de un formulario. Por ejemplo, la ejede una consulta para escribir los campos nombre y direcci6n puede asociarse con la escritura delnumero de identificaci6n, y la ejecuci6n de una instrucci6n de actualizaci6n se puede asociarenvio de un formulario. Ejemplos de estos sistemas son Oracle Forms, Sybase PowerBuilder yHTML-DB.Las comprobaciones de errores sencillas pueden llevarse a cabo definiendo restricciones para lo

    pos del formulario. Por ejemplo, una restricci6n de un campo de fecha puede comprobar si lintroducida por el usuario tiene el formato correcto y se halla en el rango deseado (por ejemplo,tema de reservas puede exigir que 1afecha no sea anterior a la fecha de hoy ni diste mas de seis mAunque estas restricciones se pueden comprobar a1ejecutar 1atransacci6n, la detecci6n tempranaerrores ayuda a los usuarios a corregirlos con rapidez. Los menus que indican los valores validospueden introducir en cada campo pueden ayudar a e1iminar 1aposibilidad de muchos tipos de eLos desarrolladores de sistemas consider an que la posibilidad de controlar de manera declarativacaracteristicas con 1aayuda de una herramienta de desarrollo de interfaces de usuario, en lugar ddirectamente el formulario mediante lenguajes de guiones a de programaci6n, faci1ita mucho su t

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    3/3

    8.1 Interfaces de usuario y herramientas 249

    Compaiiia de suministros Acme, S.L.Informe trimestral de ventas

    Periodo: 1 de enero a 31 de marzo de 2005Region Categoria Ventas SubtotalNorte Hardware inforrnatico 1.000.000

    Software inforrnatico 500.000Todas las categorias 1.500.000

    Sur Hardware informatico 200.000Software informatica 400.000Todas las categorias 600.000

    Ventas totales 2.100.000

    Figura 8.1 Informe con formato.

    8.1.2 Generadores de informesLos generadores de informes son herramientas para generar informes legibles a partir de las bases dedatos. Integran la consulta a labase de datos con la creaci6n de texto con formato y con grMicos resumen(como los grMicos de barras 0 circulares). Por ejemplo, un informe puede mostrar las ventas totales delos ultimos dos meses para cada regi6n de ventas.El desarrollador de aplicaciones puede especificar el formato de los informes mediante los servicios

    de formato del generador de informes. Se pueden usar variables para almacenar parametres como elmes y el ano y para definir los campos del informe. Las tablas, los graficos, los graficos de barras uotros graficos se pueden definir mediante consultas a la base de datos. Las definiciones de las consultaspueden hacer uso de los valores de los parametres almacenados en las variables.Una vez definida la estructura de los informes en un servicio generador de informes se puede alma-

    cenar y ejecutar en cualquier momento para generar informes. Los sistemas generadores de informesofrecen gran variedad de servicios para estructurar el resultado tabular, como la definici6n de encabe-zados de tablas y de columnas, la visualizaci6n de los subtotales correspondientes a cada grupo de latabla, la divisi6n automatica de las tablas de gran tamafio en varias paginas y la visualizaci6n de lossubtotales al final de cada pagina. - .La Figura 8.1 es un ejemplo de informe con Formato. Los datos del informe se generan mediante la

    agregaci6n de la informaci6n sabre los pedidos.Gran varied ad de marcas, como Crystal Reports y Microsoft (SQLServer Reporting Services), ofrecen

    herramientas para la generaci6n de informes. Varias familias de aplicaciones, como Microsoft Office,incluyen procedimientos para incrustar directamente en los documentos los resultados con formato delas consultas a la base de datos. Los servicios de generaci6n de grMicos proporcionados por CrvstalReports, 0 por hojas de calculo como Excel se pueden usar para tener acceso a las bases de datos v ge-nerar descripciones tabulares 0graficas de los datos. En los documentos de texto creados con MicrosoftWord, por ejemplo, se puede incrustar uno 0mas de estos graficos. La caracteristica de Microsoft Officedenominada OLE(object linking and embedding, vinculaci6n e incrustaci6n de objetos) se utiliza paravincular los graficos en el documento de texto. Los graficos se crean inicialmente a partir de datos gene-rados ejecutando consultas a la base de datos; las consultas se pueden volver a ejecutar v los graficos sepueden regenerar cuando sea necesario, para crear una versi6n actual del informe global.Ademas de generar los informes estaticos, estas herramientas permiten que sean interactivos. Par

    ejemplo, un usuario puede "profundizar" en areas de su interes, por ejemplo, pasar de una vista agrega-da que muestra las ventas totales de un ano completo a las cifras de ventas mensuales un ano concreto.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    4/3

    Capitulo 8 Diseno y desarrollo de aplicaciones

    8.2 Interfaces Web para bases de datosWorld Wide Web (Web, para abreviar) es un sistema distribuido de informaci6n basado en elhipertexto.Las interfaces Web con las bases de datos se han vuelto muy importantes. Tras describir varios motivospara establecer interfaces con Web, se ofrece una visi6n general deIa tecnologia Web (Apartado 8.3).Posteriormente se describen algunas tecnicas para la creaci6n de interfaces Web para las bases de datos,mediante servlets y lenguajes de guiones dellado del servidor (Apartado 8.4). Este tema se completa enel Apartado 8.5 mediante la descripci6n de tecnicas para la creaci6n de aplicaciones Web de gran escalay la mejora de su rendimiento.Web es irnportante como parte visible al usuario de las bases de datos por varios motivos: los nave-gadores Web ofrecen una i ni er fa z u n iv e rs a l para la informaci6n facilitada por los sistemas subyacentesubicados en cualquier parte del mundo. La parte visible al usuario puede ejecutarse en cualquier siste-ma informatico y no hace falta que el usuario descargue software especifico para que tenga acceso a lainformaci6n. Ademas, hoy en dia casi todas las personas que pueden permitirselo tienen acceso a Web.Con el crecirniento de los servicios de informaci6n y del comercio electr6nico en Web, las bases dedatos usadas para los servicios de informacion, la ayuda a la toma de decisiones y el procesamiento detransacciones deben estar conectados a Web. La interfaz de los formularios HTML resulta convenientepara el procesarniento de las transacciones. El usuario puede rellenar los datos de un formulario depedido y pulsar un bot6n de envfo para remitir un mensaje al servidor. El servidor ejecuta el programade aplicaci6n correspondiente al forrnulario de pedido y esta acci6n, a su vez, inicia transacciones en labase de datos. El servidor da formato al resultado de la transacci6n y se 10devuelve al usuario.Otro motivo para el uso de interfaces entre las bases de datos y Web es que la presentaci6n exclusivade documentos estaticos (fijos) en un sitio Web presenta algunas limitaciones, aunque el usuario norealice ninguna consulta ni procese ninguna transacci6n:

    Los documentos Web estaticos no permiten su adaptacion alusuario. Por ejemplo, puede que ur.peri6dico desee personalizar su aspecto para cada usuario, para destacar los articulos informati-vos que sea mas probable que interesen a cada persona . Cuando seactualizan los datos de una organizaci6n, los documentos deWeb se vuelven obsoletossi no se actualizan tambien, Elproblema esmas grave sivarios documentos deWeb replican datoimportantes y hay que actualizarlos todos.

    Estos problemas pueden resolverse mediante la generaci6n dinamica de los documentos de Web a partirde una base de datos. Cuando se solicita un documento, se ejecuta un programa en el sitio del servidor,que a su vez ejecuta consultas a la base de datos y genera el documento solicitado de acuerdo con el re-sultado de las consultas. Siempre que se actualizan datos importantes de la base de datos se actualizanlos documentos generados de manera automatica. El documento genera do tarnbien puede personalizar-se para el usuario de acuerdo con la informaci6n del usuario guardada en la base de datos.Las interfaces Web ofrecen ventajas atrayentes inc1uso para las aplicaciones de bases de datos ques610se usan dentro de una organizaci6n. La norma lenguaje de marcas de hipertexto (HyperText Mar-kup Language, HTML) permite que el texto reciba formato de manera ordenada y que se destaque lainformaci6n irnportante. Los hipervfnculos, que son enlaces con otros documentos, pueden asociarsecon regiones de los datos mostrados. Al pulsar en un hipervfnculo se accede y muestra el documentovinculado. Los hipervmculos resultan muy utiles para explorar datos, ya que permiten que los usuarioobtengan mas detalles de los datos que prefieran.Finalmente, los navegadores actuales acceder a programas desde documentos HTML, y ejecutarlos enel navegador en modo seguro-es decir, sin dafiar los datos de la computadora del usuario, Los pro-gramas pueden escribirse en lenguajes de guiones dellado del cliente, como [avascript, 0 ser "applets"escritas en ellenguaje Java, 0 animaciones escritas en lenguajes como Flash 0 Shockwave. Estos pro-gramas permiten la creaci6n de interfaces de usuario sofisticadas, mas de 10 que es posible con HTMLunicamente, interfaces que pueden usarse sin descargar ni instalar ningun software. Por ello. las inter-faces Web resultan potentes y visualmente atractivas, y han edipsado las interfaces especificas de granvariedad de aplicaciones de bases de datos.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    5/3

    8.3 Fundamentos de Web 251

    htmt C-1 01 Centro 500 C-1 02 Navacerrada 400 C-201 Galapagar 900 -otable La relaci6n cuentadorm action-r'Consuitafsanco" method-qetSeleccione cuenta 0prestarno e introduzca el nurnero

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    6/3

    252 Capitulo 8 Disef\o y desarrollo de aplicaciones

    : I C - I D l

    La relacion cuentaSeleccione cuenta 0 prestamo e intrc duzcae l m : im e roIcuenta ill Envie.r J

    Figura 8.3 Aspecto del c6digo HTMLde la Figura 8.2.Las figuras muestran el modo en que HTMLpuede mostrar una tabla y un formulario sencillo qU

    permite que los usuarios seleccionen el tipo (cuenta 0prestamo) de un menu e introduzcan un numeen un cuadro de texto. HTMLtambien soporta otros tipos de entrada. La pulsaci6n del bot6n de envfhace que el programa ConsultaBanco (especificado en el campo form action) se ejecute con los valorproporcionados por elusuario para los argumentos tipoy nurnero (especificados en los campos selectinput).El program a genera un documento HTML,que se devuelve al usuario y se Iemuestra; se veramodo de crear estos programas en los Apartados 8.3.4,8.4Y8.4.5.HTTPdefine dos maneras de enviar al servidor Web los valores introducidos por los usuarios.

    metodo get codifica los valores como parte del URL.Por ejemplo, si la pagina de busqueda de Googusa un formulario con un parametro de entrada denominado q con el rnetodo get y el usuario escri"silberschatz" en la cadena de caracteres y envia el formulario, el navegador solicitara al servidor Wel URLsiguiente:

    http://www.google.com/search?q=silberschatzEImetodo post, por el contrario, envia una petici6n de la pagina www.google.com y envia el valor rlos parametres como parte del intercambio del protocolo HTTPentre el servidor Weby el navegador.formulario de la Figura 8.2especifica que el formulario utilice elmetodo get.Aunque el c6digo HTMLse puede crear usando un editor de texto sencillo, hay varios editores q

    permiten Iacreaci6n directa de texto HTMLusando una interfaz grafica. Estos editores permiten insertconstrucciones como los formularios,los menus y las tablas en el documento HTMLa partir de un mende opciones, en lugar de escribir manualmente el c6digo para generar esas construcciones.HTMLsoporta ho ja s d e e si il o, que pueden modificar las definiciones predeterminadas del modo en q

    semuestran las estructuras de formato HTML,asi comootros atributos de visualizaci6n como el color dfondo de la pagina. La norma h oj as d e e sti lo e n c as ca da ( ca sc ad in g s ty le sh ee t, CSS)permite usar varias vecla misma hoja de estilo para varios documentos HTML,dando un aspecto uniforme aunque distintivotodas las paginas del sitio Web.

    8.3.3 Secuencias de comandos del lado del cllente y appletsLainclusi6n de c6digo ejecutable en los documentos permite que las paginas Websean activas y ejecutactividades como la animaci6n mediante la ejecuci6n de programas en el sitio local, en lugar de presetar simplemente textos y graficos pasivos. EIuso principal de estos programas es la interacci6n flexibcon el usuario, mas alla de la limitada capacidad de interacci6n proporcionada por HTMLy por los fomularios HTML.Ademas, la ejecuci6n de programas en el sitio del cliente aeelera mucho la interacci6en comparacion con tener que enviar cada interacci6n al sitio del servidor para su procesamiento.Un riesgo que aparece al permitir estos programas es que, si el disefio del sistema no se realiza c

    cuidado, el c6digo de programa incluido en Ia pagina Web (0, de modo equivalents, en un mensajecorreo electr6nico) puede realizar acciones malevolas en la computadora del usuario. Las acciones mlevolas pueden ser la lectura de informacion privada, la eliminaci6n y modificaci6n de informaci6nla computadora y hasta la toma del control de la computadora y la difusi6n del c6digo a otras comp

    http://www.google.com/search?q=silberschatzhttp://www.google.com/http://www.google.com/http://www.google.com/search?q=silberschatz
  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    7/3

    8.3 Fundamentos de Web 253

    tadoras (por correo electronico, por ejemplo). En los ultimos aries muchos virus transmitidos por correoelectronico se han difundido ampliamente de este modo.Una de las razones por las que ellenguaje Java se ha hecho tan popular es que proporciona un modo

    seguro de ejecutar los programas en las computadoras de los usuarios. Elcodigo Java puede compilarseen "codigo de bytes" independiente de la plataforma, que puede ejecutarse en cualquier navegadorque soporte Java. A diferencia de los programas locales, los programas de Java (applets) descargadoscomo parte de una pagina Web carecen de autoridad para llevar a cabo acciones que puedan resultardestructivas. Se les perrnite mostrar datos en la pantalla 0 establecer una conexion de red para obtenermas informacion con el servidor desde el que se ha descargado la pagina Web. Sin embargo, no se lesperrnite el acceso a los archivos locales, ejecutar programas del sistema ni establecer conexiones de redcon otras computadoras,Aunque Java es un lenguaje de programacion complete, existen lenguajes mas sencillos, denomi-

    nados lenguajes de guiones, que pueden enriquecer la interaccion con el usuario, mientras ofrecen lamisma proteccion que Java. Estos lenguajes prop oreionan estructuras que pueden incluirse en los docu-mentos HTML. Los lenguaj es de guiones dellado del c1iente son lenguajes disenados para ejecutarse enel navegador Web del cliente. De entre ellos, ellenguaje Javascript es, con mucho, elmas usado, Javascriptse suele utilizar para diversas tareas. Por ejemplo, las funciones escritas en [avascript se pueden usar pa-ra llevar a cabo comprobaciones de errores (validaciones) de los datos introducidos por el usuario, comoel que la cadenas de caracteres de la fecha tenga el formato correcto, 0 el que elvalor introducido (comola edad) se halle en el rango adecuado.[avascript puede usarse incluso para modificar de manera dinamica el c6digo HTML que se muestra.

    El navegador divide el c6digo HTML en una estructura arborea dentro de la memoria definida por unanorma denominada modelo de objetos documento (Document Object Model, DOM). El c6digo Java-script puede modificar la estructura arb6rea para llevar a cabo determinadas operaciones. Por ejemplo,supongase que un usuario necesita introducir varias filas de datos como elementos de una factura quese esta creando. Una tabla con cuadros de texto y otros metodos de entrada de datos en un formulariose puede usar para recoger los datos que introduce el usuario. La tabla puede tener un tamafio prede-terminado pero, si se necesitan mas filas, se pueden afiadir pulsando un boton con la etiqueta "Anadirelemento", por ejemplo. Este bot6n se puede configurar para que invoque una funcion de Javascript quemodifique el arbol DOM afiadiendo a la tabla una fila adicional.Tambien existen lenguajes de guiones con finalidades especificas para deterrninadas tareas, como la

    animacion (Flash y Shockwave de Macromedia, por ejemplo) y el modelado tridimensional (lenguajede marcas de realidad virtual-Virtual Reality Markup Language, VRML). Los lenguajes de guionestambien pueden usarse en ellado del servidor, como se vera mas adelante.

    8.3.4 Los servidores Web y las sesionesLos servidores Web son programas que se ejecutan en la maquina servidora, que aceptan las solicitudesde los navegadores Web y devuelven los resultados en forma de documentos HTML. El navegador y elservidor Web se comunican mediante un protocolo denominado protocolo de transferencia de hiper-texto (HyperText Transfer Protocol, HTTP). HTTP proporciona caracteristicas potentes, aparte de la meratransferencia de documentos. La caracteristica mas importante es la posibilidad de ejecutar programas,con los argumentos proporcionados por el usuario, y devolver los resultados como documentos HTML.En consecuencia, los servidores Web pueden actuar con facilidad como intermediarios para ofreceracceso a gran variedad de servicios de informacion. Se pueden crear servicios nuevos mediante la crea-

    ci6n e instalaci6n de programas de aplicaciones que los ofrezcan. La norma interfaz de pasarela comun(Common Gateway Interface, CCl) define el modo en que el servidor Web se comunica con los progra-mas de las aplicaciones. Los programas de las aplicaciones suelen comunicarse con servidores de basesde datos, mediante ODBC, JDBC u otros protocolos, con objeto de obtener 0 guardar datos.La Figura 8.4 muestra un servicio Web que usa una arquitectura de tres capas, con un servidor Web,

    un servidor de aplicaciones y un servidor de bases de datos. El uso de varios niveles de servidoresaumenta la sobrecarga del sistema; la interfaz CCl inicia un nuevo proceso para atender cada solicitud,10cual supone una sobrecarga aun mayor.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    8/37

    254 Capitulo 8 Disefio y desarrollo de aplicaciones

    red

    navegador

    Figura 8.4 Arquitectura Web de tres capas.

    La mayor parte de los servicios Web de hoy en dia usan una arquitectura Web de dos capas, en la qlos programas de las aplicaciones se ejecutan en el servidor Web, como en la Figura 8.5. En los apartadsiguientes se estudiaran con mas detalle los sistemas basados en la arquitectura de dos capas.No existe ninguna conexi6n continua entre los clientes y los servidores Web; cuando un servidor V

    recibe una solicitud, se crea tempora1mente una conexion para enviar la solicitud y recibir la respuedel servidor Web. Pero se cierra la conexi6n, y la siguiente solicitud llega mediante otra nueva. Aferencia de esto, cuando un usuario inicia una sesi6n en una computadora, 0 se conecta a una basedatos mediante ODBC0 JDBC,se crea una sesi6n y en e1servidor y en e1cliente se conserva la informci6n de la sesi6n hasta que esta conc1uye-informaci6n como el identificador de usuario y sus opcionde sesi6n que haya definido. Una razon de peso para que HTTPsea sin conexi6n es que la mayor pade las computadoras presentan un numero limitado de conexiones simultaneas que pueden aceptar,10 que sepodria superar ese limite y denegarse el servicio a otros usuarios. Con un servicio sin conexiesta se interrumpe en cuanto se satisface una solicitud, 10que deja las conexiones disponibles para osolicitudes.La mayor parte de los servicios de informaci6n basados enWebnecesitan informaci6n sobre las ses

    nes para permitir una interacci6n significativa con e1usuario. Por ejemplo, los servicios suelen restrinel acceso a la informacion y, por tanto, necesitan autentificar a los usuarios. La autenticaci6n debecerse una vez por sesion, y las interacciones posteriores de la sesi6n no deben exigir que se repitaautenticaci6n.Para imp1ementar sesiones a pesar del cierre de las conexiones hay que a1macenar informaci6n a

    cional en el cliente y devolverla con cada solicitud de la sesi6n; el servidor usa esta informaci6n pidentificar que la solicitud forma parte de la sesi6n del usuario. En el servidor tarnbien hay que guardinformaci6n adicional sobre la sesi6n.Esta informaci6n adicional se suele conservar en el cliente en forma de cookie; una cookie no es m

    que un pequeno fragmento de texto, con un nombre asociado, que contiene informaci6n de identifici6n. Por ejemplo, google.com puede definir una cookie con el nombre prefs que codifique las preferecias definidas por el usuario. como el idioma preferido y elmirnero de respuestas mostradas por pagiEn cada solicitud de busqueda google.com puede recuperar la cookie denominada prefs del navegaddel usuario y mostrar el resultado de acuerdo con las preferencias especificadas. 5610 se le permitecada dominio (sitio Web) que recupere las cookies que ha definido, no las definidas por otros dominipor 10que sus nombres se pueden reutilizar en otros dominios.Con objeto de realizar un seguimiento de las sesiones de usuario, una aplicaci6n puede generar

    identificador de sesi6n (genera1mente un numero aleatorio que no se este usando como identificadorsesi6n) y enviar una cookie denominada (por ejemplo) idsesi6n que contenga ese identificador de sesiElidentificador de sesi6n tambien se a1macena localmente en el servidor. Cuando llega una solicitudservidor de aplicaciones solicita a1cliente la cookie denominada idsesi6n. Siel cliente no posee la coo

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    9/37

    8.4 Servlets y JSP 255

    red servidor Webyservidor de aplicaciones

    navegador

    Figura 8.5 Arquitectura Webde dos capas.

    almacenada, 0 devuelve un valor que no se halla registrado como identificador de sesi6n valido en elservidor, la aplicaci6n concluye que la solicitud no forma parte de una sesi6n actual. Si el valor de lacookie coincide con el de un identificador de sesion almacenado, la solicitud se identifica como parte deuna sesi6n abierta.Si una aplicaci6n necesita identificar de manera segura a los usuarios, puede definir la cookie s610

    despues de autentificar al usuario; por ejemplo, se puede autentificar al usuario s610cuando se hayanenviado un nombre de usuario y una contrasefia validos'.Para las aplicaciones que no exigen un nivel elevado de seguridad, como los sitios de noticias abier-

    tos al publico, las cookies se pueden almacenar de manera permanente en el navegador y en el servi-dor; identifican al usuario en visitas posteriores al mismo sitio, sin necesidad de que escriba ningunainformacion de identificaci6n. Para las aplicaciones que exijan un nivel de seguridad mas elevado, elservidor puede invalidar (eliminar) la sesi6n tras un periodo de inactividad 0 cuando el usuario la cie-rre (generalmente los usuarios cierran la sesi6n pulsando un bot6n de cierre de sesi6n, que remite unformulario de cierre de sesi6n, cuya acci6n es invalidar la sesi6n actual). La invalidaci6n de la sesi6nconsiste simplemente en eliminar el identificador de la sesi6n de la lista de sesiones activas del servidorde aplicaciones.

    8.4 Servlets y JSPEn la arquitectura Web de dos capas las aplicaciones se ejecutan como parte del propio servidor Web.Un modo de implementar esta arquitectura es cargar los programas Java en el servidor Web. La especi-ficaci6n servlet de Java define una interfaz de programaci6n de aplicaciones para la comunicaci6n entreel servidor Web y los programas de aplicaciones. La clase HttpServlet de Java implementa la especifica-ci6n servlet de la API;las clases servlet usadas para implementar funciones concretas se definen comosubclases de esta clase/. A menudo se usa la palabra serolet para hacer referencia a un programa (ya unaclase) de Java que implementa la interfaz servlet. La Figura 8.6muestra un ejemplo de c6digo servlet;en breve se explicara con detalle.1. El identificador de usuario puede guardarse en la parte del cliente, en una cookie denominada, por ejemplo, idusuario. Estascookies se pueden usar para aplicaciones con un nivel de seguridad bajo, como los sitios Web gratuitos que identifican a sususuarios. No obstante, para las aplicaciones que exigen un nivel de seguridad mas elevado, este mecanisme genera un riesgo: losusuarios malintencionados pueden modificar el valor de las cookies en el navegador y luego pueden suplantar a otros usuarios.La definici6n de una cookie (denominada idsesi6n, por ejemplo) con un identificador de sesi6n generado aleatoriamente (a partirde un espacio de nurneros de gran tamano) hace muy improbable que ningun usuario pueda suplantar como un usuario diferente(es decir, que pretend a ser otro usuario). Los identificadores de sesi6n generados de manera secuencial, por otro lado, sf sonsusceptibles de suplantaci6n.2. La interfaz de los servlets tambien puede soportar solicitudes que no sean HTTP, aunque el ejemplo elegido s610usa HTTP.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    10/

    256 Capitulo 8 Disefio y desarrollo de aplicaciones

    El codigo del servlet (es decir, el programa de Java que implementa la interfaz del servlet) seen el servidor Web cuando se inicia el servidor, 0 cuando el servidor recibe una solicitud HTTP rpara ejecutar un servlet concreto. La tarea del servlet es procesar esa solicitud, 10 cual puede suacceder a una base de datos para recuperar la informacion necesaria, y generar dinarnicamentepagina HTML para devolversela al navegador del c1iente.

    8.4.1 Un ejemplo de servletLos servlets se emplean a menudo para generar de manera dinamica respuestas a las solicitudeHTTP. Pueden tener acceso a datos proporcionados mediante formularios HTML, aplicar la "logica ccial" para decidir la respuesta que deben dar y generar el resultado HTML que se devolvera al naveg

    La Figura 8.6 muestra un ejemplo de c6digo de servlet para implementar el formulario degura 8.2. El servlet se denomina ConsultaBancoServlet, mientras que el formulario especifica qution="ConsultaBanco". Se debe indicar al servidor Web que este servlet se va a utilizar para tratsolicitudes de ConsultaBanco. El formulario especifica que se usa el mecanismo HTTP get para tratir los parametres. Por tanto, se invoca el metodo doGetO del servlet, que se define en el codigo.

    Cada solicitud da lugar a una nueva hebra en la que se ejecuta la Hamada, por 10que se puedenen paralelo varias solicitudes. Los valores de los menus del formulario y de los campos de entradapagina Web, asi como las cookies, se comunican a un objeto de la c1ase HttpServletRequest que spara la solicitud, y la respuesta ala solicitud se comunica a un objeto de la c1ase HttpServletRespons

    El metodo doGetO del ejemplo extrae los valores del tipo y del numero del parametro medrequest.getParameterO, y los utiliza para realizar una consulta a la base de datos. El c6digo paraacceso a la base de datos no se muestra; hay que consultar e1Apartado 4.5.2 para conseguir dedel modo de uso de JDBC para tener acceso a las bases de datos. El sistema devuelve el resultadoconsulta al solicitante imprimiendolos en formato HTML en la respuesta del objeto HttpServletRespo

    import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class ConsultaBancoServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOExceptionString type = request.getParameter("type");String number = request.getParameter("number");... c6digo para buscar el saldo del prestamo/cuenta ...... uso de JDBC para comunicarse can la base de datos ..._. se da par supuesto que el valor se guarda en la variable saldoresponse. setCo ntent Type("textlhtm I");PrintWriter out = response.getWriterO;out.println(" Resultado de la consulta");out.println("");out.println("Saldo de " + type + number + " = " + saldo);out.println("");out.closet);

    Figura 8.6 Ejemplo de c6digo de servlet.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    11/

    8.4 Servlets y JS P 257

    8.4.2 Sesiones de los servletsRecuerdese que la interacci6n entre el navegador y el servidor Web carece de estado. Es decir, cadavez que el navegador formula una solicitud al servidor, necesita conectarse al servidor, solicitar algunainformaci6n y desconectarse del servidor. Se pueden emplear cookies para reconocer que una solicituddada procede de la misma sesi6n de navegador que otra anterior. Sin embargo, las cookies constituyenun mecanisme de bajo nivel y los programadores necesitan una abstracci6n mejor para tratar con lassesiones.

    La API del servlet ofrece un metoda para realizar el seguimiento de las sesiones y almacenar la infer-maci6n relacionada con ellas. La invocaci6n del metodo getSession(false) de la elase HttpServletRequestrecupera el objeto HttpSession correspondiente al navegador que envi6 la solicitud. Un valor del argu-mento de true habria especificado que habfa que crear un nuevo objeto sesi6n si la solicitud fuera nueva.Cuando se invoca el metoda getSessionO, el servidor pide primero al eliente que devuelva una cookiecon un nombre concreto.

    Si el eliente no tiene ninguna cookie con ese nombre, 0 devuelve un valor que no corresponde al deninguna sesi6n abierta, la solicitud no forma parte de ninguna sesi6n abierta. En ese caso, el servletpuede dirigir al usuario a la pagina de inicio de sesi6n, que puede permitir que el usuario presente sunombre de usuario y su contrasefta. EI servlet correspondiente a la pagina de inicio de sesi6n puedecomprobar que la contrasefta coincida con la del usuario (por ejemplo, buscando la informaci6n deautenticaci6n en la base de datos).

    Se pueden utilizar otros rnetodos de autenticaci6n de usuarios. Si el usuario se autentifica correcta-mente, el servlet de inicio de sesi6n ejecuta getSession(cierto), que devuelve un nuevo objeto sesi6n. Pa-ra crear una nueva sesi6n el servidor Web ejecuta internamente las tareas siguientes: definir una cookie(denominada, por ejernplo, idsesi6n) con un identificador de sesi6n como valor asociado en el nave-gador cliente, crear un nuevo objeto sesi6n y asociar el valor del identificador de sesi6n con el objetosesi6n.

    El c6digo del servlet tambien puede almacenar y buscar pares (nombre-atributo, valor) en el objetoHttpSession, para mantener el estado entre varias solicitudes de una misma sesi6n. Por ejemplo, elservlet del inicio de sesi6n puede almacenar el identificador de usuario del usuario como parametrode la sesi6n ejecutando el metodo session.setAttribute("idusuario", idusuario) sabre el objeto sesi6n (enel que la variable de Java idususuario contiene el identificador del usuario), una vez autentificado elusuario y creado el objeto sesi6n.

    Si la solicitud formara parte de una sesi6n abierta, el navegador habria devuelto el valor de la cookiey el servidor Web habna devuelto el objeto sesi6n correspondiente. EI servlet puede recuperar entonceslos parametres de la sesi6n, como el identificador de usuario, del objeto sesi6n ejecutando el metodosession.getAttribute("idusuario"). Si el atributo idusuario no esta definido, la funci6n devuelve un valornulo,lo que indica que el usuario del eliente no se ha autentificado .

    . 8.4.3 Cicio de vida de los servletsEl cielo de vida de cada servlet esta controlado por el servidor Web en el que se ha implantado. Cuandohay una solicitud de un cliente para un servlet concreto; el servidor comprueba primero si existe algunejemplar de ese servlet. Si no existe, el servidor Web carga la clase del servlet en la maquina virtual deJava (Java virtual machine, JVM) y crea un ejemplar de la elase del servlet. Ademas, el servidor llamaal metodo initO para inicializar el ejemplar del servlet. Tengase en cuenta que cada ejemplar del servlet5610se inicializa una vez, cuando se carga.

    Tras asegurarse de que existe el ejemplar del servlet, el servidor invoca el metoda service del servlet,con un objeto request y un objeto response como parametres. De manera predeterminada, el servidorcrea una hebra nueva para ejecutar el metodo service; por tanto, se pueden ejecutar en paralelo variassolicitudes al servlet, sin tener que esperar que solicitudes anteriores completen su ejecuci6n. El metodoservice llama a doGet 0 a doPost, segun corresponda.

    Cuando ya no sea necesario, se puede cerrar el servlet llamando al metodo destroyt). El servidor sepuede configurar para que cierre de manera automatica el servlet si no se le han hecho solicitudes en unperiodo de tiempo determinado; este periodo es un parametro del servidor que se puede definir comose considere adecuado para la aplicaci6n.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    12/

    258 Capitulo8 Disefio y desarrollo de aplicaciones

    8.4.4 Soporte de los servletsEl programa de Java de Sun servletrunner ofrece un soporte minima para la ejecuci6n de servleuna manera rapid a de comenzar a trabajar con los servlets. Puede recibir solicitudes en el puertoespecifique, invocar a los servlets correspondientes y devolver la respuesta al cliente.Muchos servidores de aplicaciones ofrecen soporte predeterminado para los servlets. Entre ello

    el servidor de aplicaciones de c6digo abierto [Boss, el servidor Web de Java de Sun, el servidor Ense de Netscape, el servidor de aplicaciones Weblogic de BEA,el servidor de aplicaciones de Oracservidor de aplicaciones WebSphere de IBM.Uno de los motores de servlets independientes maslares es el servidor Tomcat del proyecto Jakarta de Apache, que es un proyecto libre de c6digo aEstos servidores de aplicaciones ofrecen gran variedad de servicios adicionales, aparte del soposico para servlets proporcionado por servletrunner. Por ejemplo, si se modifica el c6digo de un spueden detectarlo y volver a compilar y a cargar el servlet de manera transparente. Como ejempcional, muchos servidores de aplicaciones permiten que el servidor se ejecute en varias rnaquinamejorar el rendimiento y encaminar las solicitudes a la copia adecuada. Tambien ofrecen funcionpara controlar el estado del servidor de aplicaciones, incluidas las estadisticas de rendimiento. Mservidores de aplicaciones soportan tambien la plataforma Java 2 Enterprise Edition (J2EE),quesoporte y APIspara gran varied ad de tareas, como el manejo de objetos, el procesamiento en pen varios servidores de aplicaciones y el manejo de datos en XML(XMLse describe mas adelanteCapitulo 10).

    8.4.5 Secuencias de comandos en el lado del servidorLa escritura incluso de una mera aplicaci6n Web en un lenguaje de programaci6n como Java 0C suna tarea que consume bastante tiempo y necesita muchas lineas de c6digo y programadores frizados con las complejidades del lenguaje. Un enfoque alternative, el de los guiones en el laservidor, ofrece un metodo mucho mas sencillo para la creaci6n de multiples aplicaciones. Los ljes de guiones ofrecen estructuras que pueden incluirse en los documentos HTML.En los guioellado del servidor, antes de entregar una pagina Web, el servidor ejecuta las secuencias inc1uiel contenido HTMLde la pagina. Cada secuencia, al ejecutarse, puede generar texto que se afiapagina (0 que incluso puede eliminar contenido de la pagina). El c6digo fuente de los guiones sena de la pagina, de modo que puede que el cliente ni siquiera se de cuenta de que la pagina cooriginalmente c6digo. Puede que el gui6n ejecutado contenga c6digo SQLque se ejecute en una bdatos.En los ultimos anos han aparecido varios lenguajes de guiones, como Server-Side [avascript de

    cape, JScript de Microsoft, Java Server Pages OSP)de Sun, el preprocesador de hipertexto PHHypertext Preprocessor, PHP), ellenguaje de marcas de ColdFusion (ColdFusion Markup LanCFML)y DTMLde Zope. De heche, incluso es posible incluir en las paginas HTMLc6digo escritoguajes de guiones mas antiguos como VBScript, Perl y Python. Por ejemplo, Active Server Pagesde Microsoft soporta VBScripty JScript incorporados. Estos lenguajes soportan caracteristicas parpero se diferencian en el estilo de programaci6n y en la facilidad con la que se pueden crear aplicasencillas.A continuaci6n se describe brevemente Java Server Pages OSP),un lenguaje de guiones que p

    que los programadores de HTML mezclen HTMLestatico con el generado de manera dinamica.tivo es que, en muchas paginas Web dinamicas, la mayor parte del contenido sigue siendo estatdecir, se halla presente el mismo contenido siempre que se genera la pagina). El contenido dinamla pagina Web (que se genera, por ejemplo, en funci6n de los parametres de los formularios) suuna pequefia parte de la pagina. La creaci6n de estas paginas mediante la escritura de c6digo deda lugar a grandes cantidades de HTMLque se codifican como cadenas de Java. Por el contrarpermite que el c6digo Java se incorpore al HTMLestatico: el c6digo Java incorporado genera ldinarnica de la pagina. Los guiones de JSPrealmente se traducen en c6digo de servlet que luego spila, pero se le ahorra al programador de la aplicaci6n el problema de tener que escribir gran pac6digo para crear el servlet.La Figura 8.7 muestra el texto fuente de una pagina HTMLque incluye un gui6n JSP.El c6d

    va se distingue del de HTMLcircundante por estar encerrado entre . El gui6n llam

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    13/

    8.S Creaci6n de aplicacionesWebde gran tamano 259

    quest.getParameterO para obtener el valor del atributo nombre. En funci6n de ese valor, el gui6n decide10 que se debe escribir despues de "Hola", Un ejemplo mas realista puede llevar a cabo acciones mascomplejas, como buscar valores en una base de datos usando JDBC.

    JS P tarnbien soporta el concepto de b ib lio te ca d e e iiq ue ta s ( ta g li br ar y) , que permite el uso de etique-tas que separecen mucho a las etiquetas HTML, pero se interceptan en el servidor y se sustituyen por elc6digo HTML correspondiente. JS P ofreceun conjunto estandar de etiquetas que definen variables y con-trolan el flujo (iteradores, si-entonces-si no), junto con un lenguaje de expresiones basado en Javascript(pero interpretado en el servidor). El conjunto de etiquetas es extensible, y ya se han irnplementado va-rias bibliotecas de etiquetas. Por ejemplo, existe una biblioteca de etiquetas que soporta la visualizaci6npaginada de conjuntos de datos de gran tarnafio Yuna biblioteca que simplifica la visualizaci6n y el ana-lisis de fechas y de horas. Veanse las notas bibliograficas para conocer mas referencias de informaci6nsobre las bibliotecas de etiquetas de JSP.

    8.S Creaci6n de aplicaciones Web de gran tamanoAlcrear aplicaciones Web,gran parte del esfuerzo de programaci6n sededica ala interfaz de usuario, enlugar de a las tareas relacionadas con labase de datos. En la prirnera parte de este apartado se estudianmodos de reducir el esfuerzo de programaci6n dedicado a esta tarea. Mas adelante se describen algunastecnicas para mejorar el rendimiento de las aplicaciones.

    8.5.1 Creaci6n de interfaces WebA continuaci6n se describen varias tecnicas para reducir el esfuerzo de programaci6n para la creaci6nde la interfaz de usuario.Muchas estructuras HTML se generan mejor usando correctamente las funciones definidas de Java,

    en lugar de escribiendolas como parte del c6digo de cada pagina Web. Por ejemplo, los formularios dedirecciones suelen necesitar un menu que contenga los nombres de paises 0 de estados. En lugar deescribir un largo c6digo HTML para crear elmenu necesario cada vez que se utilice, es preferible definiruna funci6n que genere el menu y llamar a esa funci6n siempre que sea necesario.A menudo los menus se generan mejor a partir de datos de la base de datos, como una tabla quecontenga los nombres de los paises 0de los estados. La funci6n que genera elmenu ejecuta una consulta

    a la base de datos y rellena el menu usando el resultado de la consulta. Afiadir luego un pais 0 unestado s610exige una modificaci6n de la base de datos, no del c6digo de la aplicaci6n. Este enfoquetiene el posible inconveniente de exigir mayor interacci6n con la base de datos, pero estas sobrecargasse pueden minimizar guardando en la memoria cache del servidor de aplicaciones el resultado de laconsulta.Los formularios para la introducci6n de fechas y de horas, 0 las introducciones de datos que exi-

    gen validacion, se generan tambien mejor llamando a funciones definidas de manera adecuada. Esasfunciones pueden generar c6digo Javascript para llevar a cabo la validaci6n en el generador.

    -chtrnb- Hola -c/title -c/head

    Figura 8.7 Texto fuente de HTML can un gui6n JSP.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    14/

    8. 6 Disparadores 161

    8.5.3 Mejora del rendimiento de las aplicacionesSon millones de personas las que pueden tener acceso a los sitios Web en todo el mundo. con tasas demillares de solicitudes por segundo, 0incluso mayores, en el caso de los sitiosmas populares. Garantizarque las solicitudes se atiendan con tiempos de respuesta bajos sup one un importante desaffo para losdesarrolladores de los sitios Web.Seusan tecnicas de almacenamiento cache de varios tipos para aprovechar las caracteristicas comunes

    de las diversas transacciones. Por ejemplo, sup6ngase que el c6digo dela aplicaci6n para la atenci6n decada solicitud de usuario necesita contactar con una base de datos mediante lOBe. La creaci6n de cadanueva conexi6n IDBCpuede tardar varios milisegundos, por 10 que ia apertura de una conexion nuevapara cada solicitud de usuario no es una buena idea si hay que permitir altas tasas transaccionales.La agrupaci6n de conexiones se usa para reducir esta sobrecarga, que funciona de la manera si-

    guiente. El gestor del grupo de conexiones (parte del servidor de aplicaciones) crea un grupo (es decir,un conjunto) de conexiones abiertas ODBC0 lOBe. En lugar de abrir una conexi6n nueva con la base dedatos, el c6digo que atiende las solicitudes de los usuarios (generalmente un servlet) pide (solicita) unaconexi6n al grupo de conexiones y se la devuelve cuando el c6digo (servlet) completa el procesamiento.Siel grupo no tiene conexiones sin usar cuando sele solicita una, se abre una conexi6n nueva con labasede datos (procurando no superar el numero maximo de conexiones que puede soportar el sistema debases de datos de manera concurrente). Sihay muchas conexiones abiertas que no se han usado durantealgUn tiempo, el gestor del grupo de conexiones puede cerrar algunas de las conexiones abiertas conla base de datos. Muchos servidores de aplicaciones, y los controladores ODBCy lDBCmas recientes,ofrecen un gestor de grupo de conexiones incorporado.Un error habitual que cometen muchos programadores al crear aplicaciones Web es olvidarse de

    cerrrar las conexiones IDBCabiertas (0,10 que es 10mismo, cuando se usa la agrupaci6n de conexiones,olvidarse de devolver la conexi6n al grupo de conexiones). Cada solicitud abre entonces una conexi6nnueva con la base de datos, y esta alcanza pronto el limite de conexiones que puede tener abiertassimultaneamente, Estos problemas no suelen manifestarse en las pruebas a pequena escala, ya que lasbases de datos suelen permitir centenares de conexiones abiertas, sino que s6lo se manifiestan con LIDusa intensivo. Algunos programadores dan por supuesto que las conexiones, como lamemoria asignadaa los programas de Java, son basura que se recoge de manera automatica. Por desgracia, esto no sucede,y los programadores son responsables del cierre de las conexiones que han abierto.Puede que algunas solicitudes den como resultado que se vuelva a enviar exactamente lamisma con-sulta a la base de datos. El coste de la comunicaci6n con la base de datos puede reducirse enormemente

    guardando en la cache los resultados de consultas anteriores y volviendo a usarlos. siempre y cuandono haya cambiado el resultado de la consulta en la base de datos. Algunos servidores Websoportan estealmacenamiento en la cache del resultado de las consultas,Se pueden reducir aun mas los costes guardando en la cache la pagina Web final que se envia en

    respuesta a las consultas. Sillega una consulta nueva exactamente con los mismos parametres que unaconsulta anterior y la pagina Web resultante se halla en la cache, puede volver a usarse para evitar elcoste de volver a calcular la pagina. El almacenamiento en la cache se puede hacer en el nivel de losfragmentos de las paginas Web, que luego se combinan para crear paginas Webcompletas.Los resultados de las consultas y las paginas Webguardados en la cache son modalidades de las vistas

    materializadas. Si la base de datos subyacente se modifica, pueden descartarse 0 volver a calcularse0, incluso, actualizarse de modo incremental, como en el mantenimiento de las vistas materializadas.Algunos sistemas de bases de datos (como SQL Server de Microsoft) ofrecen una manera de que elservidor de aplicaciones registre las consultas a la base de datos y obtenga una notificacion de la basede datos cuando semodifique el resultado de alguna consulta. Este mecanisme de notificaci6n sepuedeusar para garantizar que los resultados de consultas guardados en la cache del servidor de aplicacionesesten actualizados.

    8.6 DisparadoresUn disparador es una instrucci6n que el sistema ejecuta de manera automatica como efecto secundariode lamodificaci6n de la base de datos. Para disenar un mecanisme disparador es necesario:

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    15/

    262 Capitulo 8 Disef\o y desarrollo de aplicaciones

    1. Especificar las condiciones en las que se va a ejecutar el disparador. Esto se descompone eevento que provoca la comprobaci6n del disparador y una condici6n que se debe cumplir parase ejecute el disparador.

    2. Especificar las acciones que se van a realizar cuando se ejecute e1disparador.Este modele de disparadores se denomina modele evento-condicion-accion de los disparadores.

    La base de datos almacena los disparadores como si fuesen datos norm ales, por 10 que son petentes y estan accesibles para todas las operaciones de la base de datos. Una vez que se introducedisparador en la base de datos, el sistema de bases de datos asume la responsabilidad de ejecutarlovez que se produzca el evento especificado y se satisfaga la condici6n correspondiente.8.6.1 Necesidad de los disparadoresLos disparadores son mecanismos utiles para alertar a los usuarios 0para iniciar de manera autornaciertas tareas cuando se cumplen determinadas condiciones. A modo de ejemplo, sup6ngase quelugar de permitir saldos de cuenta negatives, el banco trata los descubiertos dejando a cero el saldla cuenta y creando un prestamo por el importe del descubierto. El banco da a este prestamo un numde prestamo identico al ruimero de cuenta que ha tenido el descubierto. En este ejemplo la condipara ejecutar el disparador es una actualizaci6n de la relaci6n cuenta que da lugar a un valor negade saldo. Sup6ngase que Santos retir6 cierta cantidad de dinero de una cuenta que dio lugar a qsaldo de la cuenta fuera negativo y que t denota la tupla de cuenta con un valor negativo de saldoacciones que hay que emprender son:

    Insertar una nueva tupla s en la relaci6n prestamo cons[numero_prestamo] =[numero_cuenta]s[nombre_sucursal] = t[nombre_sucursal]s[importe] = -t[saldo]

    Observese que, dado que t[saldo 1 es negative. hay que cambiar el signo de t[saZdo1 para obtenimporte del prestamo-s-un numero positive. Insertar una nueva tupla u en 1arelaci6n prestatario con

    u[nombre_cliente] = "Santos"u[numero_prestamo] = t[numero_cuenta] Dejar t[saldol a O .

    C?mo ejemplo adicional del uso de disparadores, sup6ngase un almacen que desee mantenerexistencias minimas de cada producto; cuando e1nivel de existencias de un producto cae por debajonivel minimo, se debe realizar un pedido de manera automatica. Esta es la manera en que estaempresarial se puede implementar mediante disparadores: al actua1izar el nivel de existencias deproducto el disparador debe comparar ese nivel con el nivel de existencias minimo del producto yha11a en e1minimo 0 por debajo de el. se afiade un nuevo pedido a la relaci6n pedidos.

    Observese que los sistemas de disparadores en general no pueden realizar actualizaciones fuerabase de datos y, por tanto, en el ejemplo de reposici6n de las existencias, no se puede usar un disparapara realizar directamente un pedido al exterior. En vez de eso. se afiade un pedido a la re1aci6n pedcomo en el ejemplo del inventario. Se debe crear un proceso del sistema separado que se este ejecutaconstantemente que explore peri6dicamente 1arelaci6n pedidos y formule los pedidos. Este procesosistema tambien debe tener en cuenta las tuplas de 1arelaci6n pedidos que se han procesado y el momde formulaci6n de cada pedido. El proceso tambien debe realizar un seguimiento de las entregas dpedidos y alertar a los gestores en caso de condiciones excepcionales, tales como los retrasos eentregas. Algunos sistemas de bases de datos ofrecen soporte predeterminado para el envio de coelectr6nico des de las consultas y los disparadores de SQL,usando e1enfoque mencionado.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    16/

    8.6 Disparadores 263

    create trigger di s parador _des cub iert o after update on cuentareferencing new row asfila_nuevafor each rowwhen fila_nueva.saldo < 0begin atomicinsert into prestatario

    (select n om bre_ clie nte , n um ero c ue niafrom impos i torwhere jila n ueo a.n um ero c uen ta = im p o siio r. nu m er a c u en ta i,

    insert into pres iamo values(fila_nueva. numero _ c u en ta , f il a_ n u eva . nombre e uc ur sa l, - f il a_ nu ev a. sa ld o );

    update cuenia set saldo = 0where c ue nta .n um ero c uen ia =filanu eo a.nu mero cuen ta

    endFigura S.S Ejemplo de la sintaxis SQL:1999 para los disparadores.

    8.6.2 Los disparadores en SQLLos sistemas de bases de datos basados en SQL emplean mucho los disparadores, aunque antes eSQL:1999 no eran parte de la norma de SQL. Por desgracia, cada sistema de bases de datos implernentosu propia sintaxis para los disparadores, 10que produjo incompatibilidades. En la Figura 8.8 se describela sintaxis de SQL:1999 para los disparadores (que es parecida ala sintaxis del sistema de bases de datosDB2 de IBMy a la de Oracle).Esta definici6n de disparador especifica que el disparador se inicia despues de la ejecuci6n de cualquier

    actualizaci6n de la relaci6n cuenta . Cada instrucci6n de actualizaci6n SQL puede actualizar varias tupl ~de la relacion, y la clausula for each row del c6digo del disparador se itera luego de manera explicitapara cada fila actualizada. La clausula referencing new row as crea la variable fila_nueva (denomina iatransition variable), que almacena el valor de la fila actualizada despues de la actualizaci6n.La instrucci6n when especifica una condicion, en este caso fila_nueva.saldo < O . El sistema ejecuta e.

    resto del cuerpo del disparador s610 para las tuplas que satisfacen esa condici6n. La clausula beginatomic ... end sirve para reunir varias instrucciones de SQL en una sola instrucci6n compuesta. LG5dos instrucciones insert de la estructura begin ... end realizan las tareas espedficas de creaci6n .~las nuevas tuplas de las relaciones prestatario y presiamo para que representen el nuevo prestarno. L::.instrucci6n update sirve para volver a dejar a cero el saldo de la cuenta tras su valor negativo anterior.Elevento y las acciones del disparador pueden adoptar muchas formas: El e ve n t o del disparador puede ser insert 0 delete, en lugar de update.

    Por ejemplo, la acci6n ante el borrado de una cuenta puede ser comprobar si los titulares de .acuenta tienen otras cuentas y, si no las tienen, borrarlos de la relaci6n impos i ior . Se deja al lectcrla definici6n de este disparador como ejercicio (Ejerciciopractice 8.5).Como ejemplo adicional, si se inserta un nuevo imposi ior , la acci6n del disparador puede ser

    enviar una carta de bienvenida al impositor. Evidentemente, el disparador no puede prmoc.rdirectamente esta acci6n fuera de la base de datos pero, en vez de eso, sf que puede afiadir unanueva tupla a una relaci6n que almacene las direcciones a las que se deben enviar las cartas debienvenida. Un proceso diferente examinara esta relaci6n e imprimira las cartas que hay q eenviar.Muchos sistemas de bases de datos soportan gran variedad de eventos de disparadores, come

    puede ser el que un usuario (aplicaci6n) inicie una sesi6n en la base de datos (es decir, que abreuna conexion), el que se cierre el sistema 0 el que se realicen modificaciones en la configuraciondel sistema .

    Para las actualizaciones el disparador puede especificar las columnas cuya actualizaci6n prm-oca.su ejecuci6n. Por ejemplo, si la primer a linea del disparador de descubiertos se sustituyera por

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    17/

    264 Capitulo 8 Disefio y desarrollo de aplicaciones

    create trigger disparador j iescubier io after update of saido on cueniael disparador se ejecutaria s610cuando se actualizase saldo; las actualizaciones del resto de 10atributos no provocarian su ejecuci6n.

    La clausula referencing old row as se puede utilizar para crear una variable que almacene e.valor anterior de una fila actualizada 0 borrada. La clausula referencing new row as se puedeusar con las inserciones ademas de con las actualizaciones. Los disparadores se pueden activar antes (before) del evento (insert/ delete/update) en lugar dedespues (after) del evento.Estos disparadores pueden servir como restricciones adicionales que pueden impedir actua-lizaciones no validas. Por ejemplo, si no se desea permitir descubiertos, se puede crear un dis-parador before que compruebe si el nuevo saldo es negative y, en caso de serlo, retroceda latransacci6n. Aunque se podria haber usado con este prop6sito un disparador after, su uso hariaque primero se llevase a cabo la actualizaci6n y que luego se retrocediera la transacci6n.Como ejemplo adicional, sup6ngase que el valor del campo de numero telef6nico de una tu-pla insertada esta vacfo, 10que indica la ausencia de numero de telefono. Se puede definir undisparador que sustituya ese valor por un valor nulo. Se puede emplear la instrucci6n set pararealizar estas modificaciones.

    create trigger d is p a ra d o r h a c er n ul o before update on rreferencing new row as f i la_nuevafor each rowwhenf i la_nueva.numero_te le fono ="setf i la_Hueva.mimero_telefono = null

    En Lugar de llevar a cabo una acci6n por cada fila afectada, se puede realizar una sola acci6n paratoda la instrucci6n de SQLque ha causado la insercion, el borrado 0 la actualizaci6n. Para hacerlose usa la clausula for each statement en lugar de for each row.Las clausulas referencing old table as 0 referencing new table as se pueden emplear para ha-cer referencia a tablas temporales (denominadas t a bl as d e t ran si ci 6 n) que contengan todas las filaafectadas. Las tablas de transici6n no se pueden emplear con los disparadores before, pero sicolos disparadores after, independientemente de si son disparadores de instrucciones (statement)ode filas (row).Cada instrucci6n SQLse puede usar para llevar a cabo varias acciones con base en las tablasde transici6n.

    Los disparadores se pueden habilitar y deshabilitar; de manera predeterminada, al crearIos seha-bilitan, pero se pueden deshabilitar empleando alter trigger n om br e d is p ar ad o r disable (algunabases de datos utilizando una sintaxis alternativa, como disable trigger n om br e d is p ar ad o r) . Lodisparadores deshabilitados se pueden volver a habilitar. Los disparadores tambien se puedendescartar, 10que los elimina de manera permanente, usando la instrucci6n drop trigger Hombre_disparador .

    Volviendo al ejemplo de inventario del almacen, sup6ngase que se tienen las siguientes relaciones: e xis ie nc ia sip r od u cio , n iv e/ ). n iu elm in im o tp rc du cto , n iu el) , que denota la cantidad minima que se debe mantener de cada pro-ducto. nueoo ped i do i produc to , caniidad), que denota la cantidad de producto que se debe pedir cuando sunivel cae por debajo del minimo, p e did o stp ro d uc to , c an iid a d) , que denota la cantidad de producto que se debe pedir.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    18/3

    8.6 Disparadores 265

    Observese que seha tenido mucho cuidado a la hora de realizar pedidos s610cuando su cantidad caedesde un nivel superior al minima a otro inferior. Si s610se comprueba si el nuevo valor despues de laactualizaci6n esta por debajo del mfnimo, se puede realizar err6neamente un pedido cuando ya se harealizado uno. Sepuede usar el disparador mostrado en la Figura 8.9para volver a pedir elproducto.Muchos sistemas de bases de datos ofrecen implementaciones no normalizadas de los disparadores,

    o implementan s610parte de las caracterfsticas de los disparadores. Por ejemplo, muchos de los sistemasde bases de datos no implementan la clausula before, y usan lapalabra clave on en lugar de after. Puedeque no implementen la clausula referencing. En su lugar, puede que especifiquen las tablas de transici6nmediante las palabras clave inserted 0 deleted. La Figura 8.10 muestra la manera en que se escribinael disparador de los descubiertos de las cuentas en SQLServer de Microsoft. Consultese el manual delsistema de bases de datos que se este usando para obtener mas informaci6n sobre las caracteristicas delos disparadores que soporta.

    8.6.3 Cuando no deben emplearse los disparadoresExisten muchas aplicaciones para los disparadores, como las que se acaban de ver en elApartado 8.6.2,pero algunas se manejan mejor con tecnicas alternativas. Por ejemplo, en el pasado. los disefiadoresde sistemas empleaban los disparadores para realizar resumenes de datos. Se empleaban disparadoresbajo la insercion, borrado 0 actualizaci6n de una relaci6n emp leado que contenia los atributos sueldo ydepar tamento para mantener el sueldo total de cada departamento. Sin embargo, muchos sistemas debases de datos actuales soportan las vistas materializadas (vease el Apartado 3.9.1), que ofrecen unaforma mucho mas sencilla de realizar los resumenes de datos. Los disenadores tambien empleabanmucho los disparadores para las replicas de las bases de datos; utilizaban disparadores bajo la insercion,borrado 0 actualizaci6n de las relaciones para registrar las modificaciones en relaciones denominadascambio 0 delta. Un proceso diferente copiaba las modificaciones a la replica (copia) de la base de datos,y el sistema ejecutaba los cambios en la replica. Sin embargo, los sistemas de bases de datos modernosproporcionan caracteristicas predeterminadas para la replica de bases de datos, 10que hace que losdisparadores resulten innecesarios para las replicas en lamayor parte de los casos.De heche, muchas aplicaciones de los disparadores, incluyendo el ejemplo de los descubiertos, se

    pueden sustituir mediante el uso adecuado de los procedimientos almacenados. Por ejemplo, sup6nga-se que las actualizaciones del atributo saldo de cuenta s610se realizan mediante un procedimiento alma-cenado concreto. Ese procedimiento, a su vez, comprobara si el saldo es negativo y llevara a cabo lasacciones correspondientes al desencadenador del descubierto. Los programadores deben tener cuidadocon no actualizar directamente el valor de saldo, sino actualizarlo solamente mediante el procedimientoalmacenado; esto se puede garantizar si no se proporciona a la aplicaci6n (0 al usuario) autorizaci6n

    create trigger dieparadornueooped ido after update of cant idad on existenciasreferencing old row asfila~vieja, new row as f i la_nuevafor each rowwhenfi la_nueva.nivel (select nioelfrom nivel_minimowhere n iv e l_m f n imo . p rodu c to = f il a _v ie j a. p rodu c to )

    begininsert into ped idos

    (select producio, caniidadfrom nuevo_ped idowhere nuevo_pedido.produc to = f i la_vieja .produc to)

    endFigura 8.9 Ejemplo de disparador para hacer un nuevo pedido de un producto.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    19/3

    266 Capitulo 8 Disefio y desarrollo de aplicaciones

    create trigger disparador_descubier to on cuentafor updateasif inserted.saldo < 0begininsert into presiaiario

    (select nombreciiente, numero cueniafrom imposiior, insertedwhere inserted.numero_cuenta = impoeitor.numeracuentai

    insert into pres iamc values(inserted. numero c ue nta , in se rte d.n om b re _s uc ur sa l, - inserted.saldo)

    update cuenia set saldo = 0from cuenia, insertedwhere cuenia.numero cuenia = inserted.mimero cuenta

    endFigura 8.10 Ejemplo de disparador en la sintaxis de SQLServer de Microsoft.

    para actualizar el atributo saldo, pero se le proporciona autorizaci6n para ejecutar el procedimientomacenado asociado. Una encapsulaci6n parecida se puede usar para sustituir el disparador nueoo pemediante un procedimiento almacenado.Otro problema con los disparadores es la ejecucion no pretendida de la acci6n disparada cuand

    cargan datos de una copia de seguridad, 0 cuando las actualizaciones de la base de datos de un sitrepIican en un sitio de copia de seguridad. En esos cases, la acci6n ya seha ejecutado y, generalmeno se debe volver a ejecutar. Al cargar los datos, los disparadores se pueden deshabilitar de manexplicita. Para los sistemas de replica de copia de seguridad que puede que tengan que sustituisistema principal, hay que deshabilitar los disparadores en un principio y habilitarlos cuando el siticopia de seguridad sustituye al principal en el procesamiento. Como alternativa. algunos sistemabases de datos permiten que los disparadores se especifiquen como no para replica, 10 que garanque no se ejecuten en el sitio de copia de seguridad durante la replica de la base de datos. Otros sistede bases de datos ofrecen W1avariable del sistema que denota que la base de datos es W1areplica eque se estan repitiendo las acciones de la base de datos; el cuerpo del disparador debe examinarvariable y salir si es verdadera. Ambas soluciones eliminan la necesidad de habilitar y deshabilitarmanera explicita los disparadores.Los disparadores se deben escribir can sumo cuidado, dado que un error en un disparador detect

    en tiempo de ejecuci6n provoca el fallo de la instrucci6n de insercion, borrado 0 actualizaci6n que inel disparador. Ademas, la acci6n de un disparador puede activar otro disparador. En el peor de los caesto puede dar lugar a una cadena infinita de disparos. Por ejemplo, sup6ngase que un disparadorinserci6n sobre una relaci6n tiene una acci6n que provoca otra (nueva) inserci6n sobre lamisma relacLa acci6n de inserci6n dispara otra acci6n de insercion, y asi hasta el infinito. Ceneralmente, los sistede bases de datos limitan la longitud de las cadenas de disparadores (por ejemplo, a dieciseis 0treindos), y consideran que las cadenas de disparadores de mayor longitud son un error.Los disparadores se denominan a veces regias, 0 r eg la s ac ti uas , que son realmente definiciones

    vistas.

    8.7 Autorizaci6n en SQlSeha visto el conjunto basico de privilegios de SQLen el Apartado 4.3, incluidos los privilegios deinsert, select y update.Ademas de estas formas de privilegios para el acceso a los datos, se pueden conceder (concept

    mente) a los usuarios diferentes tipos de autorizaci6n para la modificaci6n del esquema de la basdatos:

    Autorizaci6n para crear nuevas relaciones.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    20/

    8.7 Autorizaci6nenSQL 26 7

    ABD--~U2---~U

    Figura 8.11 Grafo de concesi6n de autorizaciones . Autorizaci6n para anadir atributos a las relaciones 0para eliminar atributos de las relaciones . Autorizaci6n para descartar relaciones.

    La norma de SQLespecifica un mecanismo de autorizaci6n primitivo para el esquema de la base dedatos. S6lo el propietario del esquema puede llevar a cabo modificaciones del mismo. Por tanto, lasmodificaciones del esquema-como la creaci6n 0 eliminaci6n de relaciones, la adici6n 0 el descartede atributos de las relaciones y la adici6n 0 descarte de indices-s6lo puede ejecutarlas el propietariodel esquema. Varias implementaciones de las bases de datos tienen mecanismos de autorizaci6n maspotentes para los esquemas de las bases de datos, parecidos a los ya estudiados, pero esos mecanismosno estan normalizados.SQLtambien incluye un privilegio references que permite que los usuarios declaren claves externas

    al crear las relaciones. lnicialmente, puede parecer que no hay ninguna raz6n para impedir que losusuarios creen claves externas que hagan referencia a otras relaciones. Sin embargo, recuerdese que lasrestricciones de clave externa restring en las operaciones de borrado y de actualizaci6n de la relaci6n ala que se hace referencia. Sup6ngase que U1 crea una clave externa en la relaci6n r que hace referenciaal atributo nombre_sucursal de la relaci6n sucursal y luego inserta una tupla en r correspondiente a lasucursal de Navacerrada. Yano es posible borrar la sucursal de Navacerrada de la relaci6n sucursa l sinrnodificar tambien la relaci6n r.Por tanto, la definici6n de una clave externa por U1 restringe la actividadfutura de otros usuarios; en consecuencia, el privilegio references es necesario.Elprivilegio references sobre s tambien es necesario para crear restricciones check sobre una relaci6n

    r si alguna restricci6n tiene una subconsulta que hace referencia a la relaci6n s.SQLdefine el privilegio execute; este privilegio autoriza a los usuarios a ejecutar funciones 0pro-

    cedirnientos. Por tanto, s610los usuarios que tienen el privilegio execute sobre la funci6n f () puedenHamada (bien directamente, bien desde una consulta de SQL).SQLtambien incluye el privilegio usage, que autoriza a los usuarios a usar el dorninio especificado

    (recuerdese que los dominios se corresponden can el concepto de tipo de los lenguajes informaticos ypueden ser definidos por los usuarios).La forma de autoridad definitiva es la dada al administrador de Ia base de datos. El administrador

    de la base de datos puede autorizar nuevos usuarios, reestructurar la base de datos, etc. Esta forma deautorizaci6n es analoga a la de superusuario u operador de un sistema operativo.8.7.1 Concesi6n de privilegiosEl usuario al que se le ha concedido alguna forma de autorizaci6n puede estar autorizado a transmitiresa autorizaci6n a otros usuarios. Sin embargo, hay que tener cuidado con el modo en que se puedetransmitir esa autorizaci6n entre los usuarios para asegurar que lamisma pueda retirarse en el futuro.Considerese, a modo de ejemplo, la concesi6n de la autorizaci6n de actualizaci6n sobre la relaci6n

    pres tamo de labase de datos bancaria. Sup6ngase que, inicialmente, el administrador de labase de datosconcede la autorizaci6n de actualizaci6n sobre presiamo a los usuarios U1, U2 Y U3, que, a suvez, puedentransrnitirla a otros usuarios. La transmisi6n de la autorizaci6n de un usuario a otro puede representarse

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    21/

    268 Capitulo 8 Diserio y desarrollo de aplicaciones

    (a)ABD/

    U1 U2~ U3(b) (c)

    Figura 8.12 Intento de eludir la retirada de autorizaciones.

    mediante un grafo de autorizaci6n. Los nodos de este grafo son los usuarios. El grafo incluye un arccU, -) U j si el usuario Ui concede la autorizaci6n de actualizaci6n sobre pres iamo a U j. La raiz del grafes el administrador de la base de datos. En el grafo de ejemplo de la la Figura 8.11 se puede observarque tanto U1 como U2 conceden autorizaci6n al usuario U5; s610 U1 concede autorizaci6n a U4.Un usuario tiene autorizaci6n si y s6 10 si hay un camino desde la raiz del grato de.autorizaci6n(elnodo que representa al administrador de la base de datos) hasta el nodo que representa a ese usuario.Sup6ngase que el administrador de la base de datos decide revocar la autorizaci6n del usuario 0':Como U4 ha recibido la autorizaci6n de U1, tambien hay que revocar esa autorizaci6n. Sin embargoa U5 le concedieron la autorizaci6n tanto Ui como U2. Dado que el administrador de la base de datno ha revocado la autorizaci6n sobre presiamo a U2, U5 conserva la autorizaci6n de actualizaci6n sobrepres iamo. Si U2 revocara la autorizaci6n a Us, U5 perderfa esa autorizaci6n.Un par de usuarios taimados puede intentar eludir las reglas de retirada de autorizaciones conce-diendose autorizaci6n mutua mente, como se muestra en la Figura 8.12a. Si el administrador de la basede datos retira la autorizaci6n a U2, U2 la conserva mediante U3, como se muestra en la Figura 8.12b. _a continuaci6n se retira la autorizaci6n a U3, U3 parece conservarla mediante U2, como se muestra en '-Figura 8.12.c. Sin embargo, cuando el administrador retira la autorizaci6n a U3, los arcos de U3 a Uz :de U2 a U3 ya no forman parte de ningun camino que comience en el administrador de la base de datos,Se exige que todos los arcos de los grafos de autorizaci6n sean parte de algun camino que cornience erel adrninistrador de la base de datos. Los arcos entre U2 y U3 se han borrado y el grafo de autorizaci6::resultante queda como se muestra en la Figura 8.13.8.7.2 Concesi6n .de privilegios en SQLEn el Apartado 4.3 se ha vis to la sintaxis basica de SQL para la concesi6n y retirada de los privilegiosRecuerdese que la instrucci6n grant se usa para conceder autorizaciones. Su forma basica es:

    grant on to

    ABD/ uFigura 8.13 Grafo de autorizaci6n.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    22/

    S.7 Autorizaci6nenSQL 269

    La l is ta d e p r iv il eg i o s permite conceder varios privilegios en una sola instrucci6n. El concepto de roles setrata mas adelante, en elApartado 8.7.3.La siguiente instrucci6n grant concede a los usuarios U1, U2 YU :3 el privilegio select sobre la relaci6n

    cuenta:grant select on cuenta to U 1, U 2, U 3

    Sepuede conceder elprivilegio update sobre todos los atributos de la relaci6n 0s6lo sobre algunos. Siseincluye elprivilegio update en una sentencia grant, lalista de atributos sobre los que seva a concederla autorizaci6n de actualizaci6n aparece opcionalmente entre parentesis justo detras de la palabra claveupdate. Siseomite la lista de atributos, seconcede elprivilegio de actualizaci6n sobre todos los atributosde la relaci6n.Esta instrucci6n grant concede a los usuarios U 1, U 2 y U 3 autorizaci6n de actualizaci6n sobre el atri-

    buto impor te de la relaci6n pres iamo:grant update ( impor te) on pres iamo to U1, U2, U3

    Elprivilegio insert tambien puede especificar una lista de atributos; las inserciones que se hagan en larelaci6n s6lo deben especificar esos atributos, el sistema dara a los restantes atributos valores predeter-minados (si se han definido para cada atributo) 0 los definira como nulos. Elnombre de usuario publichace referencia a todos los usuarios actuales y futuros del sistema. Por tanto, los privilegios concedidosa public se conceden de manera implicita a todos los usuarios actuales y futuros. .El privilegio de SQLreferences se concede sobre atributos concretos de manera parecida a la del

    privilegio update. La siguiente instrucci6n grant permite que el usuario U1 cree relaciones que haganreferencia a la clave nombre_sucursal de la relaci6n eucursal como clave externa:grant references (nombre_sucursal) on sucursal to U J

    De manera predeterminada, los usuarios 0 roles a los que se les conceden privilegios no estan au-torizados a concederselos a otros usuarios 0 roles. Si se desea conceder un privilegio y permitir queel receptor se 10conceda a otros usuarios, hay que anadir la clausula with grant option a la instruc-ci6n grant correspondiente. Por ejemplo, si se desea conceder a U J el privilegio select sobre sucursal ypermitir que U1 les conceda a otros ese privilegio, hay que escribir

    grant select on sucursal to U1 with grant optionEl creador de un objeto (relaci6n/vista/rol) tiene todos los privilegios sobre ese objeto, incluido el

    privilegio de conceder privilegios a otros.

    8.7.3 RolesConsiderese un banco que tiene muchos cajeros. Cada cajero debe tener elmismo tipo de autorizaci6npara el mismo conjunto de relaciones. Cada vez que se contrata a un cajero nuevo hay que concederletodas esas autorizaciones una a una.Un esquema mejor seria especificar las autorizaciones que deben tener los cajeros e identificar por

    separado a los usuarios de la base de datos que son cajeros.El sistema puede usar estos dos fragmentosde informaci6n para deterrninar las autorizaciones de cada persona que sea cajera. Cuando se contratea una nueva persona como cajero, se le debe asignar un identificador de usuario e identificarlo comocajero. No es necesario volver a especificar cada uno de los perrnisos concedidos a los cajeros.El concepto de roles captura este esquema. En la base de datos se crea un conjunto de roles. Las

    autorizaciones se pueden conceder a los roles exactamente igual que se conceden alos usuarios. Seconcede un conjunto de roles (que puede estar vacio) que esta autorizado a desempefiar a cada usuariode labase de datos.En la base de datos bancaria entre los ejemplos de roles estan c a je r o, d i re c to r _ su c ur sa l, i n te r ven to r y

    adminis trador_del_s is tema.

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    23/

    270 Capitulo 8 Disefio y desarrollo de aplicaciones

    Una alternativa menos preferible seria crear el identificador de usuario cajero y permitir que cacajero se conectase a la base de datos usando ese identificador. EI problema con este esquema es qno seria posible identificar exactamente al cajero que ha realizado una determinada transacci6n, 10qpuede provocar problemas de seguridad. El uso de los roles tiene la ventaja de exigir a los usuarios qse conecten con su propio identificador de usuario.Cualquier autorizaci6n que se pueda conceder a los usuarios se puede conceder a los roles. Los ro

    se conceden a los usuarios igual que las autorizaciones. Y como otras autorizaciones, tambien sepuede conceder a los usuarios autorizaci6n para conceder un rol concreto a otros. Por tanto, se pueconceder a los directores de las sucursales autorizaci6n para conceder el rol cajero.En SQL:1999 los roles se pueden crear de la manera siguiente:

    create role cajeroSe pueden conceder privilegios a los roles igual que a los usuarios, como se muestra en esta instruccio

    grant select on cuentato cajero

    Se pueden conceder roles a los usuarios y a otros roles, como muestran estas instrucciones:grant cajero to Martincreate role directorgrant cajero to directorgrant director to Maria

    POl' tanto, los privilegios de los usuarios 0 roles consisten en: Todos los privilegios concedidos directamente al usuario 0 rol. Todos los privilegios concedidos a los roles que se han concedido al usuario 0 rol.

    Tengase en cuenta que puede haber cadenas de roles; por ejemplo, se puede conceder el rol empleaa todos los cajeros. A su vez, el rol cajero se concede a todos los directores. Por tanto, el rol director heretodos los privilegios concedidos a los roles empleado y caiero, ademas de los concedidos directamentedirector.Las acciones ejecutadas por las sesiones tienen todos los privilegios concedidos directamente usuaque las ha abierto, asi como todos los privilegios concedidos a los roles que se hayan concedido (direo indirectamente, a traves de otros roles) a ese usuario. Por tanto, si al usuario Martin se le ha concediel rol de director, las acciones ejecutadas por el usuario Martin tienen todos los privilegios concedidosdirector, ademas de los privilegios concedidos a cajero si se ha concedido el rol de cajero al rol de direcAdemas del concepto de usuario (actual) de la sesi6n, SQL tambien tiene el concepto del rol act

    asociado a la sesi6n. De manera predeterminada, el rol actual asociado can una sesi6n es nulo (exceen algunos casos especiales). El rol actual asociado con la sesi6n se puede definir ejecutando set rnombre_rol . El rol especificado debe haberse concedido al usuario, 0 la instrucci6n set role fallara.Cuando se conceden privilegios se tratan de manera predeterminada como si los hubiera concedi

    el usuario actual, es decir, el concedente es el usuario actual. Para conceder privilegios con el concedendefinido como el rol actual asociado con una sesi6n se puede afiadir la clausula granted by current_roa la instrucci6n grant, siempre y cuando el rol actual no sea nulo. EI motivo de que se especifique queconcedente de un privilegio es un rol concreto quedara claro mas adelante, cuando se estudie la retirade los privilegios.

    8.7.4 Retirada de los privilegiosPara retirar autorizaciones se usa la instrucci6n revoke. Adopta una forma casi identica a la de grant

    revoke on from [restrict I cascade]

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    24/

    8.7 Autorizaci6nen SQL 271

    Por tanto, para retirar los privilegios concedidos anteriormente hay que escribirrevoke select on sucursal from U1, U2, U3revoke update ( impor te) on pres iamo from U1,U2, U3revoke references (nombre_sucursal) on sucursal from U1

    Como se ha visto en elApartado 8.7.1, la retirada de privilegios de un usuario 0 rol puede provocar queotros usuarios 0 roles tambien pierdan esos privilegios. Este comportamiento se denomina r etira da e ncascada. En la mayor parte de los sistemas de bases de datos la retirada en cascada es el comportarnientopredeterminado; por tanto, se puede omitir la palabra clave cascade, como se ha hecho en los ejemplosanteriores. La instrucci6n revoke puede especificar tambien restrict:

    revoke select on sucursal from U1,U2, U3 restrictEn este caso, el sistema devuelve un error si hay retiradas en cascada y no lleva a cabo la acci6n deretirada. La instrucci6n revoke siguiente s610retira la opci6n grant, no el privilegio select propiamentedicho:

    revoke grant option for select on sucursal from U1La retirada en caseada es inapropiada en muchas situaciones. Sup6ngase que Marfa tiene el rol de

    director, concede el rol de cajero a Martin y luego se le retira el rol de directora a Marfa (quizas porquehaya dejado la empresa); Martin sigue trabajando para la empresa y deberia conservar su rol de cajero.Para abordar esta situaci6n SQL:1999 permite que los roles, en vez de los usuarios, concedan privi-

    legios. Sup6ngase que la concesi6n del rol de cajero (u otros privilegios) a Martin se realiza con el con-cedente configurado con el rol de director (usando la clausula granted by current_role que se ha vistoantes, con el rol actual definido como director), en lugar de que el concedente sea la usuaria Marfa. Portanto, la retirada de roles 0privilegios (inc1uido el rol de director) a Marfa no tiene como consecuencia laretirada de los privilegios que tenia el concedente configurado con elrol de director, aunque Marfa fueraIa usuaria que ejecutara la concesi6n; por tanto, Martin conserva el rol de cajero, incluso tras la retiradade los privilegios a Marfa.8.7.5 Autorizaci6n en vistas, funciones y procedimientosEn el Capitulo 3 se introdujo el concepto de vista como medio de ofrecer al usuario un modelo persona-lizado de la base de datos. Las vistas pueden ocultar datos que el usuario no necesite ver. La capacidadde las vistas de ocultar datos sirve tanto para simplificar el uso del sistema como para mejorar la seguri-dad. Las vistas sirnplifican el uso del sistema porque restringen la atenci6n de los usuarios a los datos deinteres. Aunque se puede negar a un usuario el acceso directo a una relaci6n, se le puede perrnitir a eseusuario el acceso a parte de esa relaci6n mediante una vista. Por tanto, una combinaci6n de seguridaden elnivel relacional y de seguridad en el nivel de las vistas limita el acceso de los usuarios precisamentea los datos que necesitan.En el ejemplo bancario, considerese un empleado que necesite conocer el nombre de todos los clientes

    que tienen concedido un prestamo en cada sucursal. Este empleado no esta autorizado aver informa-ci6n relativa a los prestamos concretos que pueda tener cada cliente. Por tanto, se debe denegar a eseempleado el acceso directo a la relaci6n presiamo. Pero, si tiene que tener acceso a la informaci6n quenecesita, se le debe conceder acceso a la vista presiama cliente, que s610consta de los nombres de losclientes y de las sucursales en las que tienen concedido algun prestamo. Esta vista se puede definir enSQL de la manera siguiente:

    create view prestamo ciiente as(select nombre _ su c ur sa l, n ombre _ cl ie n tefrom p r es ta ta ri o , p r es iamowhere prestaiario.mimeropreetamo = preetamo.numero preetamoi

  • 5/16/2018 Capitulo 8 - Dise o y desarrollo de aplicaciones

    25/

    272 Capitulo 8 Disefio y desarrollo de aplicaciones

    Sup6ngase que el empleado formula la siguiente consulta de SQL:select *from p re st am o c li en ie

    Evidentemente, el empleado esta autorizado aver el resultado de esta consulta. Sin embargo, cuando elprocesador de consultas la traduce en una consulta a las relaciones reales de la base de datos, produceuna consulta sobre prestaiario y sobre pres iamo. Por tanto, el sistema debe comprobar la autorizaci6n dela consulta del empleado antes de comenzar a procesarla.El usuario que crea una vista no recibe necesariamente todos los privilegios sobre esa vista. S610recibe

    los privilegios que no le dan ninguna autorizaci6n adicional respecto de las que ya tenia. Por ejernplo, nose le puede dar la autorizaci6n update a un usuario sobre una vista si no tiene esa autorizacion sobre lasrelaciones usadas para crear esa vista. Si un usuario crea una vista sobre la que no se le puede concederninguna autorizacion. el sistema denegara la solicitud de creacion de esa vista. En el ejemplo de la vistapres tama clienie, el creador de la vista debe tener la autorizaci6n read tanto sobre la relaci6n prestaianocomo sobre la relaci6n presiamo.El privilegio execute se puede conceder sobre una funcion 0 sobre un procedimiento y perrnite que el

    usuario los ejecute. De manera predeterrninada, al igual que con las vistas, las funciones y los privilegiotienen todos los privilegios que tenia su creador. En efecto, la funci6n 0 el procedirniento se ejecutancomo si los invocara el usuario que los creo. El usuario actu