Sé diferente, intégrate Mca051 Programando Aplicaciones Web con Bases de Datos y Perl Autor: Orlando Gutiérrez Fecha: 01/01/2010 Prohibida la reproducción total o parcial, derechos reservados, Instituto Gala de Venezuela 1
ÍNDICE Lección1 Arquitectura de Bases de Datos en WEB... 3 Lección2 Configurando usuarios para la WEB... 3 Lección3 Operación de Bases de Datos en WEB... 3 Lección4 Pasos para consultar una Bases de Datos en WEB... 4 Lección5 Estableciendo y cerrando una conexión... 4 Lección6 Consultando la Base de Datos... 4 Lección7 Manipulando los datos de la consulta... 4 Lección8 Mostrando los resultados de la consulta al usuario final... 5 Lección9 API DBI... 5 Lección11 Módulo de PERL con PostgreSQL... 7 Lección12 Comandos acceso a Bases de Datos embebidos en scripts PERL... 7 Lección13 Seguridad en bases de datos WEB... 7 Lección14 Modelo de abstracción de datos... 7 Lección15 Implementando autenticación combinando PERL y Bases de Datos... 7 Lección16 Control de acceso... 8 Lección17 Conceptos de autenticación básica... 8 Lección18 Autenticación básica en PERL... 8 Lección19 Autenticación en Apache con Base de Datos... 8 Lección20 Transacciones seguras con PHP y Base de Datos... 9 Lección21 Encriptación en PERL... 9 Lección22 PERL y Bases de Datos en proyectos de gran escala... 10 Lección23 Desarrollo multi-capa, separando la lógica de negocios del contenido de la página Web... 10 Lección24 Manejando errores generados por las Bases de datos desde PERL... 10 Lección25 Ejemplos de aplicaciones... 11 Prohibida la reproducción total o parcial, derechos reservados, Instituto Gala de Venezuela 2
LECCIÓN1 ARQUITECTURA DE BASES DE DATOS EN WEB ARQUITECTURA CLIENTE SERVIDOR ARQUITECTURA WEB CON PERL + BD LECCIÓN2 CONFIGURANDO USUARIOS PARA LA WEB CONFIGURANDO USUARIOS PARA WEB PROGRAMÁTICAMENTE A TRAVÉS DE COMANDOS GRANT Y REVOKE PERMISOLOGÍA DIRECTA EN MYSQL O POSTGRESQL COMMANDO DE CONEXIÓN CON USUARIO, PASSWORD Y BASE DE DATOS COMANDOS GRANT Y REVOKE GRANT privilegios [columnas] ON elemento TO usuario [WITH GRANT OPTION] REVOKE privilegios [(columnas)] ON elemento FROM usuario TIPOS DE PRIVILEGIOS SELECT (TABLAS Y COLUMNAS) INSERT (TABLAS Y COLUMNAS) UPDATE (TABLAS Y COLUMNAS) DELETE (TABLAS) INDEX (TABLAS) ALTER (TABLAS) CREATE (BASES DE DATOS Y TABLAS) DROP (BASES DE DATOS Y TABLAS) EJEMPLO DE GRANT Y REVOKE GRANT ALL ON * TO ADMIN WITH GRANT OPTION REVOKE ALL ON * FROM ADMIN UN USUARIO WEB PRIVILEGIOS DE SELECT, INSERT, UPDATE, DELETE SOBRE UNA BASE DE DATOS GRANT SELECT, INSERT, UPDATE, DELETE ON SISTORDCOMPRA.* TO E022 LECCIÓN3 OPERACIÓN DE BASES DE DATOS EN WEB OPERACIONES DE BASES DE DATOS EN WEB INSERTANDO, INSERT COMMAND INSERT INTO tabla [(cola, colb, )] VALUES (vala, valb, ) SELECCIONANDO, SELECT COMMAND ACTUALIZANDO, UPDATE COMMAND ELIMINANDO, DELETE COMMAND Prohibida la reproducción total o parcial, derechos reservados, Instituto Gala de Venezuela 3
LECCIÓN4 PASOS PARA CONSULTAR UNA BASES DE DATOS EN WEB CONSULTA BASES DE DATOS EN WEB PROCESAR LOS DATOS DE LA CONSULTA (EVITAR ERRORES U OPERACIONES SOSPECHOSAS) CONEXIÓN BASE DE DATOS EJECUCIÓN COMANDOS ( QUERIES ) PROCESAMIENTO DEL RESULTADO (ESTILO CURSOR) MOSTRAR LOS RESULTADOS DE LA CONSULTA AL USUARIO LECCIÓN5 ESTABLECIENDO Y CERRANDO UNA CONEXIÓN CONEXIONES EN PERL EL ACCESO A LAS BASES DE DATOS SE REALIZA A TRAVÉS DE MÓDULOS (DBI) EL ACCESO A LAS BASES DE DATOS SE LOGRA A TRAVÉS DE MÉTODOS DISPONIBLES EN EL MODULO EL MÓDULO OFRECE UN CONJUNTO DE MÉTODOS (EJEMPLO connect disconnect ) OBJETOS PARA MANEJADORES DE B.D ENCAPSULAN UNA CONEXION DE BASE DE DATOS POR CONVENCIÓN SE DECLARAN COMO $dbh DBH ES LA NOMENCLATURA DE DATA BASE HANDLER CONNECT DISCONNECT METODO prepare CON UN COMANDO SQL DEVUELVE UN OBJETO UTILIZADO PARA EJECUTAR LOS COMANDOS LECCIÓN6 CONSULTANDO LA BASE DE DATOS CONSULTANDO LA BASE DE DATOS SE REALIZA A TRAVÉS DE LOS OBJETOS STATEMENT, DEVUELTO POR EL MÉTODO prepare $sth = $dbh->prepare ( SELECT * FROM gala ) EL COMANDO execute, EJECUTA EL COMANDO $sth->execute() LOS OBJETOS STH SON CURSORES, OFRECEN CURSORES STH ES LA ABREVIATURA DE Statement Handler LECCIÓN7 MANIPULANDO LOS DATOS DE LA CONSULTA CURSORES CONCEPTO DE CURSOR DE BASE DE DATOS LOS OBJETOS STE SON CURSORES @reg=$sth->fetchrow_array() DEVUELVE EN UN ARREGLO EL PRIMER REGISTRO DE LA CONSULTA Y AVANZA AL SIGUIENTE LOS OTROS MÉTODOS DISPONIBLES SON fetchrow_arrayref fetchrow_hashref Prohibida la reproducción total o parcial, derechos reservados, Instituto Gala de Venezuela 4
PROCESO DE OBTENCIÓN DE DATOS 1) PREPARACIÓN : MÉTODO prepare CON EL COMANDO SQL. OBJETO $dbh $sth = $dbh->prepare( SELECT * FROM gala ); 2) EJECUCUCIÓN ; MÉTODO execute DEL OBJETO $sts $sth -> execute(); 3) PROCESAMIENTO DE RECURSOS ESTILO CURSOR while($arr = $sth->fetchrow_array()) {..} 4) LIBERACIÓN DE RECURSOS CON EL MÉTODO finish. $sth -> finish(); LECCIÓN8 MOSTRANDO LOS RESULTADOS DE LA CONSULTA AL USUARIO FINAL MOSTRANDO RESULTADOS UNA VEZ ALMACENADOS EN VARIABLES PERL, IGUAL A CUALQUIER SCRIPT RECORDAR FORMATEO COMBINAR TEXTO HTML CON RESULTADOS DE CONSULTAS O COMANDOS DE BASE DE DATOS DENTRO DE PERL LECCIÓN9 API DBI API DBI DBI DATA BASE INTERFACE ES UN API PARA TRABAJAR CON BASE DE DATOS ES UN MÓDULO DE PERL OFRECE UN CONJUNTO DE FUNCIONES, CONVENCIONES Y VARIABLES API STANDARD PARA UNIFICAR LAS INTERFACES DE BASES DE DATOS EN PERL INDEPENDIENTE DEL MANEJADOR DE BASE DE DATOS (APLICA PARA MYSQL Y POSTGRESQL, EL DRIVER INSTALADO ES EL QUE HACE LA DIFERENCIA ESPECIFICACIONES APIDB http://ruby-dbi.rubyforge.org/dbi_spec.html DOS MÓDULOS : DBD y DBI MÓDULO DBD CONSTANTE API_VERSION FUNCIONES DEL MÓDULO DBI DBI.connect DBI.available_drivers DBI.data_sources( driver ) DBI.disconnect_all( driver=nil ) DBI.trace(mode=nil, output=nil) CLASE DBI::HANDLE Class DBI::Handle Prohibida la reproducción total o parcial, derechos reservados, Instituto Gala de Venezuela 5
CLASE ABSTRACTA BASE PARA LAS CLASES DriverHandle, DatabaseHandle, StatementHandle. SE OBTIENE CON EL MÉTODO connect de DBI ES EL CORE DE LA INTEGRACIÓN CON BD EN PERL CLASE DBI::DATABASEHANDLE connected? (PROPIEDADM EL RESTO SON MÉTODOS) disconnect() prepare( stmt ) execute( stmt, *bindvars ) do( stmt, *bindvars ) POR LO GENERAL SE EJECUTAN LOS COMANDOS QUE NO SON SELECT CON ESTA INSTRUCCIÓN select_one( stmt, *bindvars) select_all( stmt, *bindvars) tables columns( table ) ping quote( value ) commit rollback transaction CLASE DBI::DATABASESTATEMENTHANDLE bind_param( param, value, attribs=nil ) execute( *bindvars ) finish cancel column_names column_info rows fetchable? fetch each { row ablock } fetch_array fetch_hash fetch_many( cnt ) fetch_all fetch_scroll( direction, offset=1 ) Lección10 Módulo de PERL con MySQL DBD DBD DATA BASE DRIVER SE COMBINA CON EL DBI ES EL QUE REALIZA LA CONEXIÓN FÍSICA CON LA BD EL DBI ES LÓGICO DE DEBE DISPONER DEL DRIVE PARTICULAR PARA CADA MANEJADOR. EL DRIVER SI ES E PERL DEBE SOPORTAR DBI DRIVER DE PERL CON MYSQL (DBD::mysql) IMPLEMENTACIÓN DEL API DBI DESCARGABLE DE LA PÁGINA DE MYSQL LA CLASE ES DBD::mysql EXISTEN OTRAS OPCIONES EN LA PÁGINA DE MYSQL http://dev.mysql.com/downloads/dbi.html Prohibida la reproducción total o parcial, derechos reservados, Instituto Gala de Venezuela 6
LECCIÓN11 MÓDULO DE PERL CON POSTGRESQL DRIVER DE PERL CON POSTGRESQL (DBD::Pg) DOCUMENTACIÓN http://search.cpan.org/dist/dbd-pg/pg.pmurl ULTIMA VERSIÓN DBD-Pg-2.7.2.tar.gz DESCARGAS http://www.postgresql.org/download/ LECCIÓN12 COMANDOS ACCESO A BASES DE DATOS EMBEBIDOS EN SCRIPTS PERL COMANDOS EMBEBIDOS UNA VEZ IMPORTADO EL MODULO APIDB E INSTANCIADO EL OBJETO, SE PUEDE EJECUTAR CUALQUIER FUNCIÓN DE LA BASE DE DATOS COMO CUALQUIER OTRA FUNCIÓN DE PERL ESTILO PROGRAMACIÓN DE CURSORES LECCIÓN13 SEGURIDAD EN BASES DE DATOS WEB SEGURIDAD EN BASES DE DATOS WEB USUARIOS WEB, NO DEBERÍAN TENER PERMISOLOGÍA GRANT SELECT PARA TABLAS DE CATÁLOGOS INSERT PARA TABLAS DE ÓRDENES DE COMPRAS VALIDAR TODOS LOS DATOS ANTES DE EJECUTAR LOS COMANDOS DE BASE DE DATOS SSL CUANDO SE TRANSMITAN PASSWORDS LECCIÓN14 MODELO DE ABSTRACCIÓN DE DATOS MODELO DE ABSTRACCIÓN DE DATOS SEPARACIÓN CAPA DE DATOS DE LA LÓGICA DEL NEGOCIO Y DE LA PRESENTACIÓN FUNCIONES (API) QUE ENCAPSULAN EN MANEJADOR CAMBIOS INMEDIATOS AL CAMBIAR LA BASE DE DATOS PROGRAMADORES WEB NO DEBERÍAN CONOCER TECNOLOGÍA ASOCIADA CAPA DE DATOS DETALLES DE MANEJADOR SOPORTE MÚLTIPLES MANEJADORES VS. TECNOLOGÍA ODBC PERL SOPORTA LA MAYORÍA DE LOS MANEJADORES COMERCIALES LECCIÓN15 IMPLEMENTANDO AUTENTICACIÓN COMBINANDO PERL Y BASES DE DATOS AUTENTICACIÓN PERL + BASES DE DATOS IDENTIFICANDO LOS VISITANTES A LAS PÁGINAS WEB IMPLEMENTANDO EL CONTROL DE ACCESO DIFERENCIAS ENTRE AUTENTICACIÓN Y AUTORIZACIÓN AUTENTICACIÓN BÁSICA AUTENTICACIÓN EN EL SERVIDOR WEB AUTENTICACIÓN PERSONALIZADA IDENTIFICANDO VISITANTES REGISTRANDO INFORMACIÓN DEL USUARIO COOKIES (LADO DEL CLIENTE) SESSIONES EN UNA BASE DE DATOS EN EL SERVIDOR WEB Prohibida la reproducción total o parcial, derechos reservados, Instituto Gala de Venezuela 7
LECCIÓN16 CONTROL DE ACCESO CONTROL DE ACCESO, SENCILLO HTML CAMPOS USERNAME, PASSWORD TAGS HTML CAMPOS PASSWORD <input type = password > CÓDIGO PERL HARD-CODE CONTROL DE ACCCESO, BASE DE DATOS CAMPOS USERNAME, PASSWORD ALMACENAMIENTO EN BASE DE DATOS ALMACENAMIENTO ENCRIPTADO INSERT INTO usuarios VALUES ( usuario, password( clave )) FUNCIONES CIFRADO (ENCRIPTAMIENTO) LIBRERÍA PERL LECCIÓN17 CONCEPTOS DE AUTENTICACIÓN BÁSICA AUTENTICACIÓN BÁSICA OFRECIDA POR HTTP SÓLO SE SOLICITA UNA VEZ Y MIENTRAS EL NAVEGADOR SE ENCUENTRE ACTIVO FUNCIONA. NO LA SOLICITA PÁGINA POR PÁGINA ESTOS MECANISMOS PUEDEN SER LEVANTADOS DIRECTAMENTE EN EL SERVIDOR O A TRAVÉS DE PERL (INTERFAZ CGI) IMPLEMENTACIÓN AUTENTICACIÓN BÁSICA OFRECIDA POR HTTP HTTP 1.1, AUTENTICACIÓN DIGEST AUTHENTICATION DIGEST, MD5 (SOPORTADO POR MUCHOS SERVIDORES, PERO NO POR NAVEGADORES) LECCIÓN18 AUTENTICACIÓN BÁSICA EN PERL AUTENTICACIÓN BÁSICA EN PERL EXISTEN MÓDULOS PARA IMPLEMANTAR MD5 CON PERL http://sourceforge.net/projects/perl-md5- login/ LIBRERÍAS DE PERL MIME::Base64; Crypt::OpenSSL::DSA; Digest::SHA1 qw(sha1); UN CONJUNTO DE LIBERÍAS Y MÓDULOS SE ENCUENTRA DISPONBIBLE EN http://www.perl.com/cpan/modules/by-category/14_security_and_encryption/authen/ AUTENTICACIÓN DIGEST EN PERL LECCIÓN19 AUTENTICACIÓN EN APACHE CON BASE DE DATOS AUTENTICACIÓN BÁSICA APACHE FUERA DE PERL DEPENDIENTE DEL SERVIDOR WEB ARCHIVOS.htaccess COMANDO htpasswd Prohibida la reproducción total o parcial, derechos reservados, Instituto Gala de Venezuela 8
LECCIÓN20 TRANSACCIONES SEGURAS CON PHP Y BASE DE DATOS TRANSACCIONES WEB TRANSACCIONES SEGURAS SSL (SECURITY SOCKET LAYERS) FIRMAS DIGITALES (DSL) ENCRIPTACIÓN EN PERL ENCRIPTACIÓN EN BASES DE DATOS SEGURIDAD EN WEB LECCIÓN21 ENCRIPTACIÓN EN PERL SERVICIOS DE CIFRADO (ENCRIPTACIÓN) EN PERL HMAC MD5 SHA UN CONJUNTO DE LIBERÍAS Y MÓDULOS SE ENCUENTRA DISPONBIBLE EN http://www.perl.com/cpan/modules/ by- category/14_security_and_encryption/authen HMAC EN PERL hmac -- Keyed-Hashing for Message Authentication Implementa el algoritmo HMAC descrito por RFC 2104. MODULO Digest::SHA1 INTERFAZ Perl AL ALORITMO SHA-1 MÉTODOS: new() reset() clone() add() addfile() add_bits() digest() hexdigest() b64digest() MD5 EN PERL md5 -- MD5 message digest algorithm Implementa la interfaz RSA al algoritmo de procesamiento de mensajes MD5 (Internet RFC 1321) MODULO Digest:MD1 INTERFAZ Perl AL ALORITMO MD5 MÉTODOS: new() reset() clone() add() addfile() add_bits() digest() hexdigest() b64digest() SHA-1 EN PERL sha -- SHA-1 message digest algorithm Implementa la interfaz NIST al algoritmo de hashing seguro SHA-1 (Internet RFC 1321) MODULO Digest::SHA1 INTERFAZ Perl AL ALORITMO SHA-1 MÉTODOS: new() reset() Prohibida la reproducción total o parcial, derechos reservados, Instituto Gala de Venezuela 9
clone() add() addfile() add_bits() digest() hexdigest() b64digest() LECCIÓN22 PERL Y BASES DE DATOS EN PROYECTOS DE GRAN ESCALA PROYECTOS GRAN ESCALA DISEÑO MODULAR SOFTWARE MULTI-CAPAS DESARROLLO ORIENTADO POR OBJETOS CAPA DE DATOS (FACHADA CON UN DBMS) CAPA DE LÓGICA (MODULOS PERL, UNA FACHADA DE INTERFAZ ÚNICA) CAPA DE PRESENTACIÓN, DISEÑO GRÁFICO EN HTML PASOS DESARROLLO, METODOLOGÍA APLICAR PRINCIPIOS DE INGENIERÍA DE SOFTWARE REALIZAR LA PLANIFICACIÓN DEL PROYECTO Y EL CONTROL DEL MISMO REUTILIZACIÓN DEL CÓDIGO ESCRITURA DE CÓDIGO MANTENIBLE IMPLEMENTAR CONTROL DE VERSIONES ESCOGER UN AMBIENTE DE DESARROLLO DOCUMENTAR EL PROYECTO DESARROLLAR PROTOTÍPICO E INCREMENTAL SEPARAR AL MENOS EN TRES CAPAS OPTIMIZAR EL CÓDIGO IDE s PARA PERL IDE PARA ECLIPSE http://e-p-i-c.sourceforge.net/ EDITOR DE TEXTOS PARA PERL http://sourceforge.net/projects/kpad/ IDE PARA WINDOWS http://sourceforge.net/projects/open-perl-ide Perl IDE and Editor for Windows http://www.perl-express.com/ LECCIÓN23 DESARROLLO MULTI-CAPA, SEPARANDO LA LÓGICA DE NEGOCIOS DEL CONTENIDO DE LA PÁGINA WEB EVOLUCIÓN ( STAND-ALONE ) EVOLUCIÓN ( CLIENT-SERVER ) EVOLUCIÓN ( THREE-TIER ) EVOLUCIÓN ( MULTI-TIER ) LECCIÓN24 MANEJANDO ERRORES GENERADOS POR LAS BASES DE DATOS DESDE PERL EXCEPCIONES DEL API DBI DE PERL SON CLASES Prohibida la reproducción total o parcial, derechos reservados, Instituto Gala de Venezuela 10
Warning < RuntimeError Error < RuntimeError InterfaceError < Error NotImplementedError < InterfaceError DatabaseError < Error EXCEPCIONES DEL API DBI, BASE DE DATOS SON CLASES Warning < RuntimeError Error < RuntimeError InterfaceError < Error NotImplementedError < InterfaceError DatabaseError < Error LECCIÓN25 EJEMPLOS DE APLICACIONES EJEMPLOS APLICACIONES CARRO DE COMPRAS (E-COMMERCE) ADMINISTRADOR DE CONTENIDOS PAQUETE DE E-MAIL EN WEB CONSTRUYENDO FOROS EN WEB Prohibida la reproducción total o parcial, derechos reservados, Instituto Gala de Venezuela 11