Feeds:
Posts
Comentários

Antes de mais nada…

Boa tarde pessoal,

Um amigo me alertou e é verdade, antes de mais nada preciso avisar aos visitantes que não sabem, que o Lunar ERP ainda não foi concluído, pois está sendo desenvolvido internamente, e após a primeira versão, seus fontes e binários serão publicados, bem como aberto ao público em geral via SVN ou GIT (vai depender do que o code.google.com ou sourceforge.net me disponibilizarem na data do lançamento).

É claro que após o lançamento da primeira versão, nem todos os módulos mencionados existirão, afinal, é um trabalho a ser realizado ao longo do tempo. Precisamos então começar uma varredura de bugs e correção dos mesmos, mas nada que vocês colaboradores já não conheçam.

Faltou ainda informar que a licença de todo o ERP é na General Public License 2 (GPLv2), ou seja, que é 100% gratuito e tem código fonte disponível para quem quiser usar, distribuir e modificar para atender às necessidades próprias.

Temos um compromisso, temos uma missão. Entregar um excelente ERP brasileiro para nosso querido país e continuar seu desenvolvimento, aprimorando-o, polindo-o, …, *-o.

Bom dia!

Explicar como funciona um sistema comercial não é nada legal e nem divertido, pois a sua forma de funcionamento sempre está amarrada às regras de negócio que a empresa adota.

Então começar falando como é a baixa de um título, a emissão de duplicatas ou como a repimboca da parafuseta tributa o ICMS de cada produto e blá blá blá não é o alvo deste post. Irá ser demonstrado como é possível moldar a regra de negócio como se quer, mas isso posteriormente.

Hoje vamos iniciar uma série de posts falando da tecnologia interna utilizada no Lunar ERP, numa linguagem não muito técnica e procurando ser a mais clara possível, perdoem-me se assim não for.

1) CONEXÃO COM O BANCO DE DADOS

O que vemos por aí, comumente, é que a maioria dos sistemas comerciais (notavelmente os proprietários), conectam no banco de dados como super usuário, isto é, como administrador deste mesmo banco.

Como estamos oferencendo um sistema Open Source para que qualquer empresa possa utilizar, temos que quebrar esse conceito existente em diversos lugares de que a aplicação cliente é super usuário. Imagina o dono de uma empresa com o seguinte pensamento: “O sistema tem código fonte aberto, será que outras pessoas observando-o podem comprometer os dados do meu banco?”. No atual sistema de conexão implementado pela maioria, sim.

No sistema proposto pelo Lunar ERP (e que vários outros utilizam, não é nada novo aqui), não. Então conseguiremos assim fazer com que a segurança esteja do lado certo -> do servidor.

Ora, na forma atual de conexão da maioria dos sistemas, onde o super usuário fica no cliente, implementam assim, no mínimo, duas coisas:

  • Facilidade para se desenvolver o sistema, pois o desenvolvedor não precisa se preocupar com GRANT’s e REVOKE’s;
    Neste modo, o sistema tem seu próprio método de permissões. Ele conecta no banco como super usuário, e verifica as credenciais do usuário Fulano e senha Ciclano dentro de uma tabela interna.
  • Risco de algum bug no software ou uma pessoa com capacidade em observar o binário e pegar a senha de conexão de super usuário.
    Um bug no software poderia transformar um DELETE de um item em algo bem mais amplo podendo apagar uma tabela inteira por exemplo. Ou ainda mais grave se o desenvolvedor não se preocupou e facilitou um SQL injection sem intenção. No caso da pessoa em pegar a senha dentro do binário, nem se comenta, essa parte é a mais fácil de todas e a mais perigosa.

No Lunar ERP, cada usuário tem um nome e senha cadastrado no banco de dados, e o servidor mediante procedures e triggers) cuida das permissões emitindo GRANT e REVOKE aonde for necessário e de acordo com o que cada usuário é permitido.

No entanto, para que um usuário não se conecte diretamente ao banco com seu login e senha (para evitar os fuçadores), a senha armazenada neste mesmo é uma mesclagem da senha mestra com o hash de retorno apos o login pedindo permissao de entrada. Sei que ficou bagunçado, mas no esquema a seguir, fica mais fácil de se entender:

  • Conecta no banco com o usuario lunar e senha ******  (sempre usando SSL)
    Esse usuario lunar tem apenas acesso a algumas funções e mais nada, não é super usuário, e serve justamente para facilitar o login.
  • Executa a função doLogin(Fulano, Ciclano) -> retorna hash
    Esta função verifica nas permissões se o usuário pode logar e outras dependências. Se para ele for possível, retorna a senha hash (um md5) que o cliente usará para logar, ou ainda, se precisar de um número de cartão de acesso, similar ao encontrado nos bancos, a função retornará o pedido do valor X no cartão e a função chamada será a doLoginCartao(Fulano, Ciclano, Número), sendo este número a resposta do primeiro pedido.
  • Assume senha = md5(senha_mestra + hash)
    A senha mestra fica compilada dentro do binário, e serve só como um grau a mais de proteção para evitar que o usuário conecte-se diretamente de forma não assistida
  • Reconecta no banco agora como usuário Fulano e com o resultado da senha
    Vale lembrar que a hash nunca será a mesma após cada conexão, pois o sistema tem um tempo de vida para cada uma gerada (isso é configurável) e cria uma nova quando for necessário

Depois disso o sistema procede com as verificações de permissões e etc.

O mais importante aqui não foi falar da conexão em si, e sim frisar que a segurança fica é do lado do servidor, isto é, não podemos deixar de forma alguma que se existam super usuários do lado do cliente e nem formas fáceis para ele se conectar sem ser pelo sistema. Claro, este método está longe de ser perfeito e adequado, mas irá evoluindo com o tempo.

Este foi o processo de conexão. No próximo post explicarei mais detalhes sobre outros aspectos do sistema, no caso, sobre o sistema interno de permissões.

Obrigado :)

Bom dia caros leitores!

É com grande entusiasmo que irei expor aqui todo os progressos e atividades dos projetos Open Source que estarei desenvolvendo ao longo do percurso, não só por mim, mas também com a colaboração da comunidade *nix em geral para dar gás e força aos projetos, tornando-os cada vez melhores e eficazes :)

Vou tornar público aqui, nos próximos posts, algumas screenshots do projeto que vêm me tirando o sono por noites afora: o Lunar ERP, isto é, uma aplicação gerencial nível enterprise para o meio corporativo e comercial.

Esta aplicação está sendo escrita em C++ com Qt4, funcionando em no mínimo 4 plataformas diferentes (*nix, Windows, MacOS X e Mobile -> esta última, em várias), com código fonte aberto, gratuita e sem limites de uso! A aplicação internamente trabalha com threads, SQL sem travar a GUI, suporte total a integração com outros sistemas, uso do banco de dados da forma correta (multi usuário no banco, nada de super usuário), módulos externos e o conceito de painéis de trabalho.

As prioridades são: flexibilidade, eficiência, estabilidade, usabilidade e que seja muito completo. Hoje o idioma padrão é o Português Brasileiro, podendo ser traduzida para outros idiomas pelo Qt4 Linguist.

O banco de dados padrão é o saudoso PostgreSQL (mínimo 8.3), que abarca muito bem as necessidades da aplicação e com performance muito satisfatória! (na verdade sou fã do postgre)

Dentre os módulos tradicionais encontrados em outros ERP’s, teremos toda a parte de logística (WMS e Frota/Roteirização), CRM, Pesquisa de Preços, Frente de Loja, criação de Encartes (panfletos e propagandas -> mídia) e diversas aplicações para a plataforma móvel compreendendo as arquiteturas que o Qt4 suporta: Symbian S60, Windows Mobile/CE, etc..

O módulo que mais gosto, no entanto, é o NM (Network Manager), que serve para controlar toda a uma rede ou várias em filiais de um ponto central, possuindo controlador de banda, controle patrimonial de equipamentos, administração de equipamentos que possuam acesso SSH/Telnet via templates (AP5131/WS5xxx -> Motorola, IBM 2210, VanGuards, e outros), controle de squid/dhcp/iptables e outras coisinhas mais.

Hoje está sendo construído um framework interno usando estritamente o Qt4 para que mantenha-se o padrão visual e de código dentro do Lunar ERP.

A intenção é atingir desde aquela pequena lojinha com 1 computador até as grandes empresas com várias filiais e vários computadores.

Bem, já falei demais, aguardem novos posts!

Obrigado!