Como converter um dicionario em buffer?

classic Classic list List threaded Threaded
21 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Como converter um dicionario em buffer?

John Evan Dizaro-2
Estou montado um intermediador que irá executar todos as solicitações de
acesso ao postgres
e retornar o resultado. O problema é que não sem como retornar resultado o
qual é um dicionário, uma vêz que
no instante após o  executar do sql e retornar via socket para o solicitante
tenho a seguinte mensagem:
TypeError: send() argument 1 must be string or buffer, not dict


--
John Evan Dizaro


[As partes desta mensagem que não continham texto foram removidas]

Reply | Threaded
Open this post in threaded view
|

Re: Como converter um dicionario em buffer?

Felipe Mobus
qual biblioteca você está usando para conectar com o postgres?

2011/8/12 John Evan Dizaro <[hidden email]>

> **
>
>
> Estou montado um intermediador que irá executar todos as solicitações de
> acesso ao postgres
> e retornar o resultado. O problema é que não sem como retornar resultado o
> qual é um dicionário, uma vêz que
> no instante após o executar do sql e retornar via socket para o solicitante
> tenho a seguinte mensagem:
> TypeError: send() argument 1 must be string or buffer, not dict
>
> --
> John Evan Dizaro
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



--
Felipe Mobus
http://fmobus.wait4.org


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
    [hidden email]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Reply | Threaded
Open this post in threaded view
|

Re: Como converter um dicionario em buffer?

Leonel Freire
In reply to this post by John Evan Dizaro-2
Não sei exatamente o que faz sua aplicação, mas, de maneira genérica,
podemos serializar objetos em strings usando o módulo *pickle*.
http://docs.python.org/library/pickle.html

Ex.:
import pickle

a = dict(a=1, b=2, c=3)

s = pickle.dumps(a)
d = pickle.loads(s)

Só dá uma olhada na questão segurança e o que pode ou não ser serializado.


Em 12 de agosto de 2011 13:46, John Evan Dizaro <[hidden email]>escreveu:

> **
>
>
> Estou montado um intermediador que irá executar todos as solicitações de
> acesso ao postgres
> e retornar o resultado. O problema é que não sem como retornar resultado o
> qual é um dicionário, uma vêz que
> no instante após o executar do sql e retornar via socket para o solicitante
> tenho a seguinte mensagem:
> TypeError: send() argument 1 must be string or buffer, not dict
>
> --
> John Evan Dizaro
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



--
Atenciosamente,

Leonel Freire
Diretor de Tecnologia
--
Construir Sites
Fone e fax: +55 83 3252-1378
http://www.construirsites.com.br
Soluções completas em serviços de Internet


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
    [hidden email]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Reply | Threaded
Open this post in threaded view
|

Re: Como converter um dicionario em buffer?

Joelmir Ribacki
In reply to this post by Felipe Mobus
  Olá John

Sockets, até onde conheço somente transporta string.
Já tentei fazer isso em um projeto que utilizar comunicação com sockets,
acabei utilizando comunicação com strings.

Se estou errado me corrijam.

--
Joelmir Ribacki


Em 12/8/2011 14:01, Felipe Mobus escreveu:

> qual biblioteca você está usando para conectar com o postgres?
>
> 2011/8/12 John Evan Dizaro<[hidden email]>
>
>> **
>>
>>
>> Estou montado um intermediador que irá executar todos as solicitações de
>> acesso ao postgres
>> e retornar o resultado. O problema é que não sem como retornar resultado o
>> qual é um dicionário, uma vêz que
>> no instante após o executar do sql e retornar via socket para o solicitante
>> tenho a seguinte mensagem:
>> TypeError: send() argument 1 must be string or buffer, not dict
>>
>> --
>> John Evan Dizaro
>>
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>>
>>
>
>


--
Joelmir Ribacki

Reply | Threaded
Open this post in threaded view
|

Re: Como converter um dicionario em buffer?

John Evan Dizaro-2
In reply to this post by Felipe Mobus
Estou usandop o psycopg2

Em 12 de agosto de 2011 14:01, Felipe Mobus <[hidden email]> escreveu:

> qual biblioteca você está usando para conectar com o postgres?
>
> 2011/8/12 John Evan Dizaro <[hidden email]>
>
> > **
> >
> >
> > Estou montado um intermediador que irá executar todos as solicitações de
> > acesso ao postgres
> > e retornar o resultado. O problema é que não sem como retornar resultado
> o
> > qual é um dicionário, uma vêz que
> > no instante após o executar do sql e retornar via socket para o
> solicitante
> > tenho a seguinte mensagem:
> > TypeError: send() argument 1 must be string or buffer, not dict
> >
> > --
> > John Evan Dizaro
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
>
>
> --
> Felipe Mobus
> http://fmobus.wait4.org
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
> Links do Yahoo! Grupos
>
>
>


--
John Evan Dizaro


[As partes desta mensagem que não continham texto foram removidas]

Reply | Threaded
Open this post in threaded view
|

Re: Como converter um dicionario em buffer?

Felipe Mobus
você poderia serializar utilizando o picle como sugeriram acima, ou mesmo
para json.

2011/8/12 John Evan Dizaro <[hidden email]>

> **
>
>
> Estou usandop o psycopg2
>
> Em 12 de agosto de 2011 14:01, Felipe Mobus <[hidden email]> escreveu:
>
>
> > qual biblioteca você está usando para conectar com o postgres?
> >
> > 2011/8/12 John Evan Dizaro <[hidden email]>
> >
> > > **
> > >
> > >
> > > Estou montado um intermediador que irá executar todos as solicitações
> de
> > > acesso ao postgres
> > > e retornar o resultado. O problema é que não sem como retornar
> resultado
> > o
> > > qual é um dicionário, uma vêz que
> > > no instante após o executar do sql e retornar via socket para o
> > solicitante
> > > tenho a seguinte mensagem:
> > > TypeError: send() argument 1 must be string or buffer, not dict
> > >
> > > --
> > > John Evan Dizaro
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> >
> >
> >
> > --
>
> > Felipe Mobus
> > http://fmobus.wait4.org
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
> > ------------------------------------
>
> >
> > Python-Brasil
> > http://www.python.org.br/wiki/AntesDePerguntar
> > Links do Yahoo! Grupos
>
> >
> >
> >
>
> --
> John Evan Dizaro
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



--
Felipe Mobus
http://fmobus.wait4.org


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
    [hidden email]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Reply | Threaded
Open this post in threaded view
|

Re: Como converter um dicionario em buffer?

John Evan Dizaro-2
Pelo que observei na documentação o pickle usa gravação   .
O volume de dados é muito grande e muito intensso o que dificulta usar este
metodo.

O que estou tentando fazer é  algo para pegar os dados soliciados pelo
sistema no postgres.
Daí  ninguem mais pode acessar o banco de dados (medidas de segurança)
somente atraveś do sistema que estou fazendo.
Ficou mais claro?

Em 12 de agosto de 2011 14:49, Felipe Mobus <[hidden email]> escreveu:

> você poderia serializar utilizando o picle como sugeriram acima, ou mesmo
> para json.
>
> 2011/8/12 John Evan Dizaro <[hidden email]>
>
> > **
> >
> >
> > Estou usandop o psycopg2
> >
> > Em 12 de agosto de 2011 14:01, Felipe Mobus <[hidden email]> escreveu:
> >
> >
> > > qual biblioteca você está usando para conectar com o postgres?
> > >
> > > 2011/8/12 John Evan Dizaro <[hidden email]>
> > >
> > > > **
> > > >
> > > >
> > > > Estou montado um intermediador que irá executar todos as solicitações
> > de
> > > > acesso ao postgres
> > > > e retornar o resultado. O problema é que não sem como retornar
> > resultado
> > > o
> > > > qual é um dicionário, uma vêz que
> > > > no instante após o executar do sql e retornar via socket para o
> > > solicitante
> > > > tenho a seguinte mensagem:
> > > > TypeError: send() argument 1 must be string or buffer, not dict
> > > >
> > > > --
> > > > John Evan Dizaro
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > > >
> > > >
> > >
> > >
> > >
> > > --
> >
> > > Felipe Mobus
> > > http://fmobus.wait4.org
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> > > ------------------------------------
> >
> > >
> > > Python-Brasil
> > > http://www.python.org.br/wiki/AntesDePerguntar
> > > Links do Yahoo! Grupos
> >
> > >
> > >
> > >
> >
> > --
> > John Evan Dizaro
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
>
>
> --
> Felipe Mobus
> http://fmobus.wait4.org
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
> Links do Yahoo! Grupos
>
>
>


--
John Evan Dizaro


[As partes desta mensagem que não continham texto foram removidas]

Reply | Threaded
Open this post in threaded view
|

Re: Como converter um dicionario em buffer?

Pedro Werneck-2
2011/8/12 John Evan Dizaro <[hidden email]>
>
> Pelo que observei na documentação o pickle usa gravação .
> O volume de dados é muito grande e muito intensso o que dificulta usar este
> metodo.


É possível fazer pickle para strings sim, sem precisar gravar:

Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cPickle
>>> d = {'lero': ['foo', 'bar']}
>>> s = cPickle.dumps(d)
>>> print s
(dp1
S'lero'
p2
(lp3
S'foo'
p4
aS'bar'
p5
as.
>>> e = cPickle.loads(s)
>>> print e
{'lero': ['foo', 'bar']}
>>> e == d
True
>>>



---
Pedro Werneck
Reply | Threaded
Open this post in threaded view
|

Re: Como converter um dicionario em buffer?

Alex-648
In reply to this post by John Evan Dizaro-2


Sei que já deram uma boa solução: cPickle. Por isso pensei de um modo diferente.
 A função "eval", avalia expressões( na forma de strings) simples em Python e as transforma em seus respectivos objetos. A função "str", por sua vez, converte um tipo de dado para uma string.
 Usando essas duas funções da seguinte forma
 buffer = str( {1:2, 2:1, 'valor':100} )
 buffer será eviado via socket
 Ao ser recebido, chame:  eval( buffer )
 teremos novamente um dicionário.

ex.: eval( str( {1:2, 2:1, 'valor':100} ) )  = {1:2, 2:1, 'valor':100}
converte um dicionário em uma string, depois uma string em um dicionário.


--- Em [hidden email], John Evan Dizaro <johndizaro@...> escreveu

>
> Estou montado um intermediador que irá executar todos as solicitações de
> acesso ao postgres
> e retornar o resultado. O problema é que não sem como retornar resultado o
> qual é um dicionário, uma vêz que
> no instante após o  executar do sql e retornar via socket para o solicitante
> tenho a seguinte mensagem:
> TypeError: send() argument 1 must be string or buffer, not dict
>
>
> --
> John Evan Dizaro
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>


Reply | Threaded
Open this post in threaded view
|

Re: Re: Como converter um dicionario em buffer?

Leonardo Santagada
2011/8/13 Alex <[hidden email]>:
> Sei que já deram uma boa solução: cPickle. Por isso pensei de um modo diferente.

A pergunta que fica é, porque? É
beeeeeeeeeeeeeeeeeeeeeeeeeeeeemmmmmmmmmm mais lento e mais complicado.


--
Leonardo Santagada
Reply | Threaded
Open this post in threaded view
|

Re: Re: Como converter um dicionario em buffer?

Rodrigo Hübner
A utilização de "eval" em qualquer linguagem de programação é caixão para
desempenho!
A diferença tão grande de desempenho apontada pelo Leonardo é por que *pickle
*já oferece em sua descrição de dados toda a hierarquia de objetos e usando
*eval* é necessário interpretar todos os dados novamente. Por sua vez,
cPickle é a versão otimizada do módulo pickle [1].

[1]
http://docs.python.org/library/pickle.html#relationship-to-other-python-modules

Rodrigo Hübner


2011/8/13 Leonardo Santagada <[hidden email]>

> **
>
>
> 2011/8/13 Alex <[hidden email]>:
>
> > Sei que já deram uma boa solução: cPickle. Por isso pensei de um modo
> diferente.
>
> A pergunta que fica é, porque? É
> beeeeeeeeeeeeeeeeeeeeeeeeeeeeemmmmmmmmmm mais lento e mais complicado.
>
> --
> Leonardo Santagada
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
    [hidden email]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Reply | Threaded
Open this post in threaded view
|

Re: Re: Como converter um dicionario em buffer?

Allison Vollmann
In reply to this post by Alex-648
A função eval avalia expressões, logo você abre uma brecha de segurança para executar qualquer expressão python armazenada naquele campo.

O certo seria serializar (pickle, csv whatever) ou usar um tipo de campo Array na coluna do postgres.



________________________________
De: Alex <[hidden email]>
Para: [hidden email]
Enviadas: Sábado, 13 de Agosto de 2011 0:42
Assunto: [python-brasil] Re: Como converter um dicionario em buffer?


 


Sei que já deram uma boa solução: cPickle. Por isso pensei de um modo diferente.
A função "eval", avalia expressões( na forma de strings) simples em Python e as transforma em seus respectivos objetos. A função "str", por sua vez, converte um tipo de dado para uma string.
Usando essas duas funções da seguinte forma
buffer = str( {1:2, 2:1, 'valor':100} )
buffer será eviado via socket
Ao ser recebido, chame:  eval( buffer )
teremos novamente um dicionário.

ex.: eval( str( {1:2, 2:1, 'valor':100} ) )  = {1:2, 2:1, 'valor':100}
converte um dicionário em uma string, depois uma string em um dicionário.

--- Em [hidden email], John Evan Dizaro <johndizaro@...> escreveu

>
> Estou montado um intermediador que irá executar todos as solicitações de
> acesso ao postgres
> e retornar o resultado. O problema é que não sem como retornar resultado o
> qual é um dicionário, uma vêz que
> no instante após o  executar do sql e retornar via socket para o solicitante
> tenho a seguinte mensagem:
> TypeError: send() argument 1 must be string or buffer, not dict
>
>
> --
> John Evan Dizaro
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>


 

[As partes desta mensagem que não continham texto foram removidas]

Reply | Threaded
Open this post in threaded view
|

Re: Re: Como converter um dicionario em buffer?

Leonardo Santagada
2011/8/13 Allison Vollmann <[hidden email]>:
> A função eval avalia expressões, logo você abre uma brecha de segurança para executar qualquer expressão python armazenada naquele campo.

o mesmo acontece com o pickle. Existem vários motivos porque eval
nesse caso é uma péssima ideia, mas segurança não é um deles (ao menos
não em comapração com o pickle).


> O certo seria serializar (pickle, csv whatever) ou usar um tipo de campo Array na coluna do postgres.



--
Leonardo Santagada
Reply | Threaded
Open this post in threaded view
|

Re: Como converter um dicionario em buffer?

Alex-648


Compreendo que segurança é muito importante. Por isso fica a pergunta, Python é seguro ? Digo isso porque com uma linha de codigo, derrubei um sistema de segurança de um programa. Foi usando a função "del".  Deletei uma função importante, e o programa não mais precisa de chave serial para funcionar. Se fosse com um programa binário o correto seria o programa travar. Python não, tratou o erro e continuou a execuçao.
 Python para mim é uma linguagem fenomenal. Acredito que tudo depende da forma como é feito. Se o programa cujo a função foi deletada tivesse analizado se aquela funçao ainda existia, ai sim, imediatamente ele teria fechado

--- Em [hidden email], Leonardo Santagada <santagada@...> escreveu

>
> 2011/8/13 Allison Vollmann <allisonvoll@...>:
> > A função eval avalia expressões, logo você abre uma brecha de segurança para executar qualquer expressão python armazenada naquele campo.
>
> o mesmo acontece com o pickle. Existem vários motivos porque eval
> nesse caso é uma péssima ideia, mas segurança não é um deles (ao menos
> não em comapração com o pickle).
>
>
> > O certo seria serializar (pickle, csv whatever) ou usar um tipo de campo Array na coluna do postgres.
>
>
>
> --
> Leonardo Santagada
>


Reply | Threaded
Open this post in threaded view
|

Re: Re: Como converter um dicionario em buffer?

Felipe Mobus
O que você fez de deletar uma função é bem factível provavelmente em
qualquer linguagem, se você já estiver tendo acesso ao código objeto do
programa que está rodando e algum conhecimento de mais baixo nível sobre o
formato deste código objeto. Além disso, o python levanta sim uma exceção,
como podemos ver em https://gist.github.com/1144076. É bem provável que o
sistema em questão ignorava essa exceção explicitamente. Se a história dos
cracks de software nos mostraram alguma coisa, é que mecanismos de DRM
dificilmente param um atacante mais dedicado.

No entanto, o problema de segurança levantado por outros comentários nesta
thread não tem absolutamente nada a ver com isso. A preocupação é que,
quando se utiliza a função eval com argumentos fornecidos por terceiros,
você está permitindo que estes terceiros rodem qualquer tipo de código no
seu ambiente de execução - mesmo que eles não controlem o código-objeto.
Basicamente é quase o mesmo que uma injeção de SQL. Digamos que eu tenha um
código assim:

meu_dict = eval(request.POST['dados_fornecidos_pelo_usuário'])

Se o usuário submeteu algo como {'abc':123}, tudo sussa, vai sair um
dicionário bonitinho do jeito que deus quer. No entanto, se o usuário
suspeitar que este eval existe, ele pode tentar enviar alguma expressão
maliciosa em vez de um dict; ele poderia tentar enviar um os.popen("rm -Rf
*") e aí você se ferrou.

A moral da estória é: não use eval, de maneira alguma, a menos que 100% do
string passado como argumento esteja sob seu controle. No caso original da
thread: o pickle é bem mais indicado, por ser mais eficiente e menos
vulnerável à ataques.




2011/8/13 Alex <[hidden email]>

> **
>
>
>
>
> Compreendo que segurança é muito importante. Por isso fica a pergunta,
> Python é seguro ? Digo isso porque com uma linha de codigo, derrubei um
> sistema de segurança de um programa. Foi usando a função "del". Deletei uma
> função importante, e o programa não mais precisa de chave serial para
> funcionar. Se fosse com um programa binário o correto seria o programa
> travar. Python não, tratou o erro e continuou a execuçao.
> Python para mim é uma linguagem fenomenal. Acredito que tudo depende da
> forma como é feito. Se o programa cujo a função foi deletada tivesse
> analizado se aquela funçao ainda existia, ai sim, imediatamente ele teria
> fechado
>
> --- Em [hidden email], Leonardo Santagada <santagada@...>
> escreveu
> >
> > 2011/8/13 Allison Vollmann <allisonvoll@...>:
>
> > > A função eval avalia expressões, logo você abre uma brecha de segurança
> para executar qualquer expressão python armazenada naquele campo.
> >
> > o mesmo acontece com o pickle. Existem vários motivos porque eval
> > nesse caso é uma péssima ideia, mas segurança não é um deles (ao menos
> > não em comapração com o pickle).
> >
> >
> > > O certo seria serializar (pickle, csv whatever) ou usar um tipo de
> campo Array na coluna do postgres.
> >
> >
> >
> > --
> > Leonardo Santagada
> >
>
>  
>



--
Felipe Mobus
http://fmobus.wait4.org


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
    [hidden email]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Reply | Threaded
Open this post in threaded view
|

Re: Re: Como converter um dicionario em buffer?

Leonardo Santagada
2011/8/13 Felipe Mobus <[hidden email]>:
> thread: o pickle é bem mais indicado, por ser mais eficiente e menos
> vulnerável à ataques.

E o que eu disse é que em segurança o pickle é tão seguro quanto o
eval. Dá pra fazer qualquer coisa num sistema que carrega um pickle
que tu pode mexer. Se o que se quer é segurança eu recomendaria json
para serialização.

--
Leonardo Santagada
Reply | Threaded
Open this post in threaded view
|

Re: Re: Como converter um dicionario em buffer?

John Evan Dizaro-2
In reply to this post by Rodrigo Hübner
Respondendo a perguntas de Leonardo Santagada:
Isto tudo por questões de segutança uma vêz que o maior problema é
justamente o pessoal interno de uma empresa.
Então tenho que fechar o acesso ao banco de dados  evitando o  acessarem
 informaçõe confidenciais.
Quanto ao seu ponto de vista eu concordo vai ficar bem mais lento:

1- PEDIDO DE INFORMAÇÕES:
Usuario-> INTERMEDIADOR ->acesso ao postgres

2- DEVOLUÇÃO DOS DADOS PEDIDOS PELO USUARIO
postgres-> Intermediador-> usuario

Realmente  será uma grande perda de performance.

Mas necessario.

Em 13 de agosto de 2011 11:44, Rodrigo Hübner <[hidden email]> escreveu:

> A utilização de "eval" em qualquer linguagem de programação é caixão para
> desempenho!
> A diferença tão grande de desempenho apontada pelo Leonardo é por que
> *pickle
> *já oferece em sua descrição de dados toda a hierarquia de objetos e usando
> *eval* é necessário interpretar todos os dados novamente. Por sua vez,
> cPickle é a versão otimizada do módulo pickle [1].
>
> [1]
>
> http://docs.python.org/library/pickle.html#relationship-to-other-python-modules
>
> Rodrigo Hübner
>
>
> 2011/8/13 Leonardo Santagada <[hidden email]>
>
> > **
> >
> >
> > 2011/8/13 Alex <[hidden email]>:
> >
> > > Sei que já deram uma boa solução: cPickle. Por isso pensei de um modo
> > diferente.
> >
> > A pergunta que fica é, porque? É
> > beeeeeeeeeeeeeeeeeeeeeeeeeeeeemmmmmmmmmm mais lento e mais complicado.
> >
> > --
> > Leonardo Santagada
> >
> >
> >
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
> Links do Yahoo! Grupos
>
>
>


--
John Evan Dizaro


[As partes desta mensagem que não continham texto foram removidas]

Reply | Threaded
Open this post in threaded view
|

Re: Re: Como converter um dicionario em buffer?

Roger Demetrescu
2011/8/15 John Evan Dizaro <[hidden email]>:
> Respondendo a perguntas de Leonardo Santagada:
> Isto tudo por questões de segutança uma vêz que o maior problema é
> justamente o pessoal interno de uma empresa.
> Então tenho que fechar o acesso ao banco de dados  evitando o  acessarem
>  informaçõe confidenciais.

John, você chegou a cogitar o uso de mecanismos de segurança do
próprio banco de dados ?
Estou me referindo a usar roles [1] e/ou updatable views [2]. Se não
quiser/puder usar views atualizáveis,
você pode exigir a execução de stored procedures para
incluir/editar/excluir registros.

Acho que vale a pena dar uma investigada....

Abraços


[1] - http://www.postgresql.org/docs/9.0/static/user-manag.html
[2] - http://www.postgresql.org/docs/9.0/static/sql-createview.html
Reply | Threaded
Open this post in threaded view
|

Re: Re: Como converter um dicionario em buffer?

Carlos Ribeiro
In reply to this post by John Evan Dizaro-2
2011/8/15 John Evan Dizaro <[hidden email]>

> Respondendo a perguntas de Leonardo Santagada:
> Isto tudo por questões de segutança uma vêz que o maior problema é
> justamente o pessoal interno de uma empresa.
> Então tenho que fechar o acesso ao banco de dados  evitando o  acessarem
>  informaçõe confidenciais.
> Quanto ao seu ponto de vista eu concordo vai ficar bem mais lento:
>
> 1- PEDIDO DE INFORMAÇÕES:
> Usuario-> INTERMEDIADOR ->acesso ao postgres
>
> 2- DEVOLUÇÃO DOS DADOS PEDIDOS PELO USUARIO
> postgres-> Intermediador-> usuario
>
> Realmente  será uma grande perda de performance.
>
> Mas necessario.
>

Sugiro que você pense "arquiteturalmente" no problema, de forma mais ampla.

Bons sistemas de bancos de dados (e o Postgresql se encaixa nisso) possuem
um sistema bem sofisticado de segurança, que permite definir acesso de forma
extremamente granular. É possível definir quem pode acessar cada uma das
tabelas, e com qual nível de acesso. Dependendo de outros fatores, isso pode
praticamente eliminar a necessidade de um intermediário para controlar os
acessos. A única razão para definir um intermediário neste caso é a
possibilidade de alguém quebrar uma senha, ou fazer um ataque de Denial of
Service contra o servidor. Note que o primeiro caso pode ser mitigado
configurando acesso limitado por IP: por exemplo, o administrador só pode se
conectar de um determinado IP (localhost, por exemplo), e os perfis com
acesso aos dados só podem se conectar de outro IP (ex: servidor de
aplicação). O processo é tão granular e customizável quanto você queira.

Um recurso interessante neste sentido é criar "views" para os usuários. Você
pode criar uma view que representa uma determinada query, que fica sendo
"read only", o que protege os dados. Veja na documentação do Postgresql:
http://www.postgresql.org/docs/8.2/interactive/sql-createview.html

Se você quiser ainda mais controle, pode criar "read only replicas". É uma
cópia do BD sincronizada com o BD principal mas que não pode ser modificada.
É 100% seguro contra modificação, e você ainda pode usar os mesmos recursos
acima para limitar o que pode ser visto para cada usuário.

Se você não conseguir resolver seu problema de segurança usando os recursos
do banco, pense em um intermediário na forma de um serviço REST padronizado,
que possa ser consumido como "webservices". Utilize um formato conhecido
(preferencialmente JSON, mas poderia ser XML, há quem prefira...) para
entregar os dados. Isso resolve o seu problema e ainda te dá a possibilidade
de criar um serviço altamente extensível, com uma API que pode ser usada por
terceiros. Note que apesar de ser aparentemente seguro, você passa a ter que
se preocupar com a proteção da sua API contra exploração; ela tem que
implementar um processo de autenticação (pode ser um hash, ou outro sistema
qualquer) mas isso é sua responsabilidade.

E se nada disso atender suas necessidades, você ainda pode utilizar um
framework de RPC padrão que possa expor objetos remotos. Assim você não
precisa se preocupar com o formato de pickle, pois a comunicação remota é
100% transparente para você. Alguns anos atrás eu usei o Pyro (Python Remote
Objects), não sei se ainda é a melhor opção, mas me atendeu bem. Deve ter
coisa mais atualizada por aí.

--
Carlos Ribeiro
Consultoria em Projetos
twitter: http://twitter.com/carribeiro
blog: http://rascunhosrotos.blogspot.com
mail: [hidden email]


[As partes desta mensagem que não continham texto foram removidas]

Reply | Threaded
Open this post in threaded view
|

Re: Re: Como converter um dicionario em buffer?

Shander Lyrio-3
Em 15/08/2011 13:15, Carlos Ribeiro escreveu:
> Bons sistemas de bancos de dados (e o Postgresql se encaixa nisso) possuem
> um sistema bem sofisticado de segurança, que permite definir acesso de forma
> extremamente granular. É possível definir quem pode acessar cada uma das
> tabelas, e com qual nível de acesso. Dependendo de outros fatores, isso pode

        O controle de acesso do PostgreSQL pode chegar até mesmo à colunas. As
permissões são INSERT, SELECT, UPDATE e REFERENCES, ou ainda uma
combinação destes para cada coluna de cada tabela.

        Abraços

--
Shander Lyrio
http://about.me/shander
12