Rodrigo Fuentealba escribió:
> El 24/09/07, Alvaro Herrera <[EMAIL PROTECTED]> escribió:
> > Ricardo Mun~oz A. escribió:
> > > cierto. pero depende del modelo y la aplicacion si es que en algun momento
> > > se puede producir un conflicto... por algo los mismos desarrolladores de
> > > Slony-I indican que sirve cuando todos los nodos estan disponibles todo el
> > > tiempo...
> >
> 
> Estás poniendo a Slony-I para que se adapte a tu modelo, cuando en
> realidad es al revés, debes adaptar tu modelo para que funcione con
> esta solución. Por eso es que Álvaro hablaba de tablas heredadas; por
> lo que entiendo, y como se me ocurre usarla, es hacer una tabla
> maestra en cada zona que "extienda" a la tabla de datos total,
> utilizando la característica de orientación a objetos de PostgreSQL, y
> a esa tabla que extiende la pones como maestra en la aplicación. ¿Es
> así, Álvaro?

Sí, básicamente de eso se trata.

> > Lo que yo intentaria
> > hacer seria tener copias esclavas de la base de dato en cada una de las
> > sucursales, de solo lectura (con Slony-I); y que las escrituras vayan a
> > la base de datos central.  De este modo no se notaria la lentitud del
> > enlace en las consultas de solo lectura (puesto que son locales a la
> > sucursal), y se requeriria contactar al central solamente para las
> > escrituras.
> 
> Mira, este plugin lo estamos arreglando y usando para un sitio Web en
> el cual tenemos ese inconveniente a nivel nacional, y no ha tenido
> mayor problema hasta ahora (aunque es alfa!):
> 
> http://trac.symfony-project.com/trac/wiki/sfPropelLoadbalancerPlugin

Otra forma de hacer esto sin necesidad de modificar la aplicación es
usando pgpool o pgBouncer.

> > De esa forma, te ahorras todo el problema de la resolucion de conflictos
> > y de replicacion multimaestro.  El inconveniente es que cuando se caiga
> > la conexion sucursal-servidor, no podrias escribir (pero ojo, que eso
> > sucede en casi todos los sistemas multimaestro, incluso los
> > comerciales).
> 
> Inclusive aquí debes apelar a las leyes de la física y no aceptar a
> personas que se crean Criss Angel, para que aparezcan al mismo tiempo
> en dos sucursales distintas solicitando la misma información. Entrete
> caso, :-s

Eso generalmente no es problema cuando se trata solamente de leer
información.  Si hay que escribir, recuerda que las escrituras van
directo a la base de datos maestra, asi que dos escrituras que entran en
conflicto serian detectadas facilmente.

-- 
Alvaro Herrera                          Developer, http://www.PostgreSQL.org/
"La victoria es para quien se atreve a estar solo"
From [EMAIL PROTECTED]  Mon Sep 24 16:59:06 2007
From: [EMAIL PROTECTED] (Aldrin Gonzalo Martoq Ahumada)
Date: Mon Sep 24 17:01:35 2007
Subject: Evitar sql injection y xss
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

On 9/24/07, Ricardo Mun~oz A. <[EMAIL PROTECTED]> wrote:
> Raul Perez wrote:
> > Tengo mysql 5 y phpp 5 en un servidor con centos
> > La pregunta es que codigo han implementado ustedes para
> > asegurar sus aplicaciones en php para evitar injection de sql y xss
> migrar a CakePHP y usar las herramientas que provee, mas info en [1]... ;)
> en todo caso, en el mismo Cake la validacion de "SQL injection" viene
> "de fabrica"... por ejemplo en el metodo findAll(), y en todos los otros
> metodos que sirven para que el framework traiga datos desde la BD, se
> puede hacer esto:
> ...
> $condiciones = array('nombres' => "LIKE %$nombres%", 'otro_campo' => "<>
> $valor", etc.);
> $this->set('clientes', $this->Cliente->findAll($condiciones));
> ...
> entonces, en findAll() el framework va armar el correspondiente SELECT y
> validara automaticamente todas las condiciones en el arreglo
> $condiciones evitando SQL injection, independientemente del motor de BD
> que uses con el framework.
> [1] http://www.scribd.com/doc/5546/CakePHP-tutorial-no-3-from-IBM

arghhhh! Que codigo mas horrible.

No hay algo como JDBC (Java) o DB-API (Python) para PHP ???

Basicamente, algun framework que implementa el siguiente pseudocodigo:

$args[0] = "valor de fi";
$args[1] = "valor de 'teta";
$rowlist = query("select value from foo where phi=?0 and tetha=?1", $args)
foreach ($rowlist as $row) {
  print $row['value']."\n";
}



-- 
Aldrin Martoq
From [EMAIL PROTECTED]  Mon Sep 24 17:10:36 2007
From: [EMAIL PROTECTED] (Alvaro Herrera)
Date: Mon Sep 24 17:13:08 2007
Subject: Evitar sql injection y xss
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

Aldrin Gonzalo Martoq Ahumada escribió:

> No hay algo como JDBC (Java) o DB-API (Python) para PHP ???
> 
> Basicamente, algun framework que implementa el siguiente pseudocodigo:
> 
> $args[0] = "valor de fi";
> $args[1] = "valor de 'teta";
> $rowlist = query("select value from foo where phi=?0 and tetha=?1", $args)
> foreach ($rowlist as $row) {
>   print $row['value']."\n";
> }

Sí hay, pero no todo el mundo lo usa :-) (de ahí que aparecen los "SQL
injection" a cada rato)

-- 
Alvaro Herrera                         http://www.flickr.com/photos/alvherre/
"People get annoyed when you try to debug them."  (Larry Wall)
From [EMAIL PROTECTED]  Mon Sep 24 17:39:52 2007
From: [EMAIL PROTECTED] (Ricardo Mun~oz A.)
Date: Mon Sep 24 17:42:57 2007
Subject: desarrollo deaAplicacion grande
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]><[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]><[EMAIL PROTECTED]><3cd5f0920709     [EMAIL 
PROTECTED]>
        <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

Alvaro Herrera wrote:
> Rodrigo Fuentealba escribió:
>   
>> El 24/09/07, Alvaro Herrera <[EMAIL PROTECTED]> escribió:
>>     
>>> Ricardo Mun~oz A. escribió:
>>>       
>>>> cierto. pero depende del modelo y la aplicacion si es que en algun momento
>>>> se puede producir un conflicto... por algo los mismos desarrolladores de
>>>> Slony-I indican que sirve cuando todos los nodos estan disponibles todo el
>>>> tiempo...
>>>>         
>> Estás poniendo a Slony-I para que se adapte a tu modelo, cuando en
>> realidad es al revés, debes adaptar tu modelo para que funcione con
>> esta solución. Por eso es que Álvaro hablaba de tablas heredadas; por
>> lo que entiendo, y como se me ocurre usarla, es hacer una tabla
>> maestra en cada zona que "extienda" a la tabla de datos total,
>> utilizando la característica de orientación a objetos de PostgreSQL, y
>> a esa tabla que extiende la pones como maestra en la aplicación. ¿Es
>> así, Álvaro?
>>     
>
> Sí, básicamente de eso se trata.
>   

yo tambien entendi lo mismo, y por eso dije "depende del modelo si se 
produce un conflicto". en ningun momento dije que Slony-I se deberia 
adaptar al modelo, sino todo lo contrario.

>>> Lo que yo intentaria
>>> hacer seria tener copias esclavas de la base de dato en cada una de las
>>> sucursales, de solo lectura (con Slony-I); y que las escrituras vayan a
>>> la base de datos central.  De este modo no se notaria la lentitud del
>>> enlace en las consultas de solo lectura (puesto que son locales a la
>>> sucursal), y se requeriria contactar al central solamente para las
>>> escrituras.
>>>       
>> Mira, este plugin lo estamos arreglando y usando para un sitio Web en
>> el cual tenemos ese inconveniente a nivel nacional, y no ha tenido
>> mayor problema hasta ahora (aunque es alfa!):
>>
>> http://trac.symfony-project.com/trac/wiki/sfPropelLoadbalancerPlugin
>>     
>
> Otra forma de hacer esto sin necesidad de modificar la aplicación es
> usando pgpool o pgBouncer.
>   

creo que el plugin que menciona Rodrigo le permite a sus aplicaciones 
hechas en Symfony escribir (UPDATE, DELETE) siempre en el mismo nodo 
(maestro) y las operaciones SELECT hacerlas en cualquiera de los nodos 
esclavos disponibles. una tecnica bastante comun de balanceo de carga y 
muy facil de implementar tambien en CakePHP... ;)

pgpool y/o pgBouncer creo que no permiten hacer lo mismo... aunque 
pgpool-II se ve interesante... ;)

-- 
Ricardo Mun~oz A.
Usuario Linux #182825 (counter.li.org)
From [EMAIL PROTECTED]  Mon Sep 24 17:50:06 2007
From: [EMAIL PROTECTED] (Ricardo Mun~oz A.)
Date: Mon Sep 24 17:53:11 2007
Subject: Evitar sql injection y xss
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

Aldrin Gonzalo Martoq Ahumada wrote:
> On 9/24/07, Ricardo Mun~oz A. <[EMAIL PROTECTED]> wrote:
>   
>> Raul Perez wrote:
>>     
>>> Tengo mysql 5 y phpp 5 en un servidor con centos
>>> La pregunta es que codigo han implementado ustedes para
>>> asegurar sus aplicaciones en php para evitar injection de sql y xss
>>>       
>> migrar a CakePHP y usar las herramientas que provee, mas info en [1]... ;)
>> en todo caso, en el mismo Cake la validacion de "SQL injection" viene
>> "de fabrica"... por ejemplo en el metodo findAll(), y en todos los otros
>> metodos que sirven para que el framework traiga datos desde la BD, se
>> puede hacer esto:
>> ...
>> $condiciones = array('nombres' => "LIKE %$nombres%", 'otro_campo' => "<>
>> $valor", etc.);
>> $this->set('clientes', $this->Cliente->findAll($condiciones));
>> ...
>> entonces, en findAll() el framework va armar el correspondiente SELECT y
>> validara automaticamente todas las condiciones en el arreglo
>> $condiciones evitando SQL injection, independientemente del motor de BD
>> que uses con el framework.
>> [1] http://www.scribd.com/doc/5546/CakePHP-tutorial-no-3-from-IBM
>>     
>
> arghhhh! Que codigo mas horrible.
>
> No hay algo como JDBC (Java) o DB-API (Python) para PHP ???
>
> Basicamente, algun framework que implementa el siguiente pseudocodigo:
>
> $args[0] = "valor de fi";
> $args[1] = "valor de 'teta";
> $rowlist = query("select value from foo where phi=?0 and tetha=?1", $args)
> foreach ($rowlist as $row) {
>   print $row['value']."\n";
> }
>   

ADOdb para PHP permite hacer lo que mencionas.

que tiene de feo el codigo de CakePHP? es solo tu gusto personal o 
tienes algo concreto que aportar?

-- 
Ricardo Mun~oz A.
Usuario Linux #182825 (counter.li.org)
From [EMAIL PROTECTED]  Mon Sep 24 17:53:23 2007
From: [EMAIL PROTECTED] (Horst H. von Brand)
Date: Mon Sep 24 17:55:49 2007
Subject: desarrollo deaAplicacion grande
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

Alvaro Herrera <[EMAIL PROTECTED]> wrote:
1> Ricardo Mun~oz A. escribió:
> > Alvaro Herrera wrote:
> 
> >>> "Slony-I is a system intended for data centers and backup sites, where 
> >>> the normal mode of operation is that all nodes are available all the 
> >>> time, and where all nodes can be secured. If you have nodes that are 
> >>> likely to regularly drop onto and off of the network, or have nodes that 
> >>> cannot be kept secure, Slony-I is probably not the ideal replication 
> >>> solution for you."
> >>
> >> Esto no es lo mismo que tener conexiones de baja velocidad.  Por lo
> >> demas, qué tan problematico sea depende del volumen de transacciones que
> >> tengas.
> >
> > cierto. en el peor de los casos (si se corta el enlace entre la of.central 
> > y las sucursales) hay algo que se puede hacer a nivel de RDBMS?
> 
> Bueno, lo que hace Slony-I es dejar una cola de operaciones en el
> maestro, que se va vaciando a medida que los esclavos las reciben y
> aplican.  Si se cae la conexion, la cola empieza a crecer hasta que la
> conexion vuelve.
> 
> En realidad ese es el modelo de operacion normal de Slony-I: todas las
> operaciones pasan siempre por una cola.  Lo que pasa en condiciones
> normales es que la cola se transmite en forma "instantanea".

Cuidado con el teorema CAP (para una discusion de sistemas distribuidos ver
p.ej. <http://www.ccs.neu.edu/groups/IEEE/ind-acad/brewer/sld001.htm>). Si,
hay una demostracion rigurosa (en un modelo bastante simple y realista) del
teorema de marras.
-- 
Dr. Horst H. von Brand                   User #22616 counter.li.org
Departamento de Informatica                    Fono: +56 32 2654431
Universidad Tecnica Federico Santa Maria             +56 32 2654239
Casilla 110-V, Valparaiso, Chile               Fax:  +56 32 2797513

Responder a