G A L A
Programando Aplicaciones Web con Bases de Datos y Perl
1
Sé diferente, intégrate…
Autor: Orlando Gutiérrez
Fecha: 01/01/2010
Mca051
Programando Aplicaciones Web con
Bases de Datos y Perl
G A L A
Programando Aplicaciones Web con Bases de Datos y Perl
Í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
G A L A
Programando Aplicaciones Web con Bases de Datos y Perl
3
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
G A L A
Programando Aplicaciones Web con Bases de Datos y Perl
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
G A L A
Programando Aplicaciones Web con Bases de Datos y Perl
5
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
G A L A
Programando Aplicaciones Web con Bases de Datos y Perl
• 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
G A L A
Programando Aplicaciones Web con Bases de Datos y Perl
7
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
G A L A
Programando Aplicaciones Web con Bases de Datos y Perl
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
G A L A
Programando Aplicaciones Web con Bases de Datos y Perl
9
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()
G A L A
Programando Aplicaciones Web con Bases de Datos y Perl
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
G A L A
Programando Aplicaciones Web con Bases de Datos y Perl
11
• Warning < RuntimeError • Error < RuntimeError • InterfaceError < Error • NotImplementedError < InterfaceError • DatabaseError < ErrorEXCEPCIONES 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