Autenticação de usuário em sistema - qual é o ideal?

7 respostas
diego_qmota

Boa tarde a todos do fórum! Uma pergunta boba, mas que me deixou encucado :shock:

Qual é o ideal para autenticar um usuário em um sistema, em termos de segurança, e que procedimento é o mais adotado:

- Cadastrar cada usuário do sistema diretamente como usuário do banco de dados? E desta forma, validar seu acesso se o mesmo conseguir efetuar login no banco.
O controle de acesso seria estabelicido pelo próprio banco de dados. Regras adicionais poderiam ser programadas no aplicativo, sem prejuízo do controle do BD.
A desvantagem é que o usuário, se conhecer o caminho para acessar o banco e tiver bons conhecimentos técnicos, poderia ele mesmo realizar a conexão pelo banco e extrair as informações que quiser.
Por exemplo:
Quando o usuário teste criar seu login no sistema, faço a consulta pelo aplicativo: “CREATE USER teste …”. O login dele, será feito usando o controle de acesso do próprio BD.

- Cadastrar cada usuário em uma tabela, própria para isso, e fazer a validação do acesso através de um USER genérico no banco de dados? Neste caso, o sistema estabeleceria a conexão com o banco de dados, procuraria o login em uma tabela de usuários e compararia a senha, para ver se está correta.
Este procedimento teria como desvantagem o seguinte: o nível de acesso às operações eu teria que controlar pelo programa, e não daria para estabelecer regras pelo bd, sem ter que efetuar duas conexões.
Por exemplo:
Quando o usuário teste logar no sistema, o aplicativo conecta ao banco como ‘usuario’, faz o login, e faz a consulta à tabela USUARIOS, se encontrar o login, compara a senha fornecida, para ver se está correta.
Se estiver, libera o acesso ao aplicativo.

7 Respostas

Giulliano

leitura recomendada

http://java.sun.com/javaee/5/docs/tutorial/doc/bnbxe.html

mario.fts

Segunda opção. A manutenção de permisoes é muito mais simples, vc pode definir permissões por funcionalidade, e não por tabela de banco, pode alterar essas permissões a todo momento, sem precisar acender velas pretas enquanto envia o email com as alterações pro DBA, e não tem essa falha de segurança, que vc mesmo já citou.

o que vc mencionou como desvantagem do segundo método, eu na verdarde vejo como vantagem. vc pode definir diversos roles e dar esses perfils a seus usuários, conforme a necessidade, além de poder criar roles diferentes para cada necessidade específica sua.

Lenin666

E ae Diego, blz?!

Então carinha, minha experiência na área é a seguinte:

Se o sistema é de médio acesso, para muitos acessos, o pessoal autentica pelo banco mesmo.

Agora se é um sistema que não é tão acessado ou não tem tantos usuarios cadastrados, o pessoal tem adotado criar Profile.

Eu a um tempo a traz fiz uma pequena manutenção em um sistema que tinha Spring Security, ele era bem legal, mas não tinham muitos usuários acesando ao mesmo tempo.

Bom, a minha experiência é essa, caso alguém mais queira relatar a sua, também vou prestar atenção nas respostas pq isso é um tema bem legal…

Abs();

ctdaa

Olá. Minha opinião é a seguinte: existem aqui dois conceitos que geralmente se confundem AUTENTICAÇÃO e AUTORIZAÇÃO. Resumindo temos que autenticação é o procedimento de verificar se um determinado usuário é válido dentro do contexto do aplicativo (sistema) em questão, enquanto autorização é (após autenticado) saber quais as responsabilidades (papéis ou permissões) que este usuário possui.
Tendo estes conceitos separados com certeza ficará mais fácil decidir pela melhor forma de implementação.
Minha experiência após vários anos de implantação de sistemas, não só no ambiente java/banco relacional, é que geralmente a “autenticação” é definida pelos administradores do ambiente (empresa/cliente) como um padrão adotados por eles e que seu sistema deve seguir.
Exemplo no caso de uma aplicação de uso restrito, ou seja, onde os usuários são conhecidos, se você vier com um sistema novo em que os usuários deverão ser cadastrados em um repositório exclusivo do seu sistema… os administradores vão torcer o nariz e perguntar: “mas não dá para usar o cadastro da empresa que já existe…” ou “meus usuários já estão definidos na rede” ou “o login dos usuários são os mesmos que tem acesso ao servidor” … etc.
Uma vez definido o processo de “autenticação”, a definição de “autorizações” destes usuários, o que eles podem fazer no seu sistema… poderá ser implementada da melhor forma que seu sistema puder fazer. Ou seja com os critérios próprios. Apesar de ser possível uma implementação corporativa usando um repositório LDAP ou algo similar.
Concluindo… seria bom que o seu sistema permitisse a configuração de autenticação e autorização a gosto do freguês.

pedroroxd

ctdaa:
Olá. Minha opinião é a seguinte: existem aqui dois conceitos que geralmente se confundem AUTENTICAÇÃO e AUTORIZAÇÃO. Resumindo temos que autenticação é o procedimento de verificar se um determinado usuário é válido dentro do contexto do aplicativo (sistema) em questão, enquanto autorização é (após autenticado) saber quais as responsabilidades (papéis ou permissões) que este usuário possui.
Tendo estes conceitos separados com certeza ficará mais fácil decidir pela melhor forma de implementação.
Minha experiência após vários anos de implantação de sistemas, não só no ambiente java/banco relacional, é que geralmente a “autenticação” é definida pelos administradores do ambiente (empresa/cliente) como um padrão adotados por eles e que seu sistema deve seguir.
Exemplo no caso de uma aplicação de uso restrito, ou seja, onde os usuários são conhecidos, se você vier com um sistema novo em que os usuários deverão ser cadastrados em um repositório exclusivo do seu sistema… os administradores vão torcer o nariz e perguntar: “mas não dá para usar o cadastro da empresa que já existe…” ou “meus usuários já estão definidos na rede” ou “o login dos usuários são os mesmos que tem acesso ao servidor” … etc.
Uma vez definido o processo de “autenticação”, a definição de “autorizações” destes usuários, o que eles podem fazer no seu sistema… poderá ser implementada da melhor forma que seu sistema puder fazer. Ou seja com os critérios próprios. Apesar de ser possível uma implementação corporativa usando um repositório LDAP ou algo similar.
Concluindo… seria bom que o seu sistema permitisse a configuração de autenticação e autorização a gosto do freguês.

Deu até sono de ler…

ctdaa

Isto porque eu fiz um resumo, heim… se você pegar os livros de J2EE tem um capítulo inteiro para falar de autenticação e outro capítulo para falar da autorização. Poderia colocar umas figurinhas para ilustar… huahuahauha

diego_qmota

ctdaa:
Olá. Minha opinião é a seguinte: existem aqui dois conceitos que geralmente se confundem AUTENTICAÇÃO e AUTORIZAÇÃO. Resumindo temos que autenticação é o procedimento de verificar se um determinado usuário é válido dentro do contexto do aplicativo (sistema) em questão, enquanto autorização é (após autenticado) saber quais as responsabilidades (papéis ou permissões) que este usuário possui.
Tendo estes conceitos separados com certeza ficará mais fácil decidir pela melhor forma de implementação.
Minha experiência após vários anos de implantação de sistemas, não só no ambiente java/banco relacional, é que geralmente a “autenticação” é definida pelos administradores do ambiente (empresa/cliente) como um padrão adotados por eles e que seu sistema deve seguir.
Exemplo no caso de uma aplicação de uso restrito, ou seja, onde os usuários são conhecidos, se você vier com um sistema novo em que os usuários deverão ser cadastrados em um repositório exclusivo do seu sistema… os administradores vão torcer o nariz e perguntar: “mas não dá para usar o cadastro da empresa que já existe…” ou “meus usuários já estão definidos na rede” ou “o login dos usuários são os mesmos que tem acesso ao servidor” … etc.
Uma vez definido o processo de “autenticação”, a definição de “autorizações” destes usuários, o que eles podem fazer no seu sistema… poderá ser implementada da melhor forma que seu sistema puder fazer. Ou seja com os critérios próprios. Apesar de ser possível uma implementação corporativa usando um repositório LDAP ou algo similar.
Concluindo… seria bom que o seu sistema permitisse a configuração de autenticação e autorização a gosto do freguês.

Essa abordagem é bastante interessante, ctdaa. Eu estou usando ambos no sistema, mas com dúvidas quanto a segurança do primeiro:
AUTENTICAÇÃO: Então, neste caso, para a autenticação, eu usaria a que estivesse disponível no ambiente que o sistema opera. Se não houvesse uma, teria que utilizar a mais adequada e fácil para um dba manipular correto?
No meu caso, não há autenticação própria no ambiente do sistema. Nesta parte de autenticação, que eu fiquei em dúvida quanto a segurança, para saber se poderia cadastrar os usuários como usuários do BD diretamente (CREATE USER…)
AUTORIZAÇÃO: A parte de autorização, eu definiria por critérios próprios do programa, e acredito que a única forma possível de fazê-lo, é usando uma tabela com a definição dos perfis dos usuários (não consegui inserir colunas no tabela de users própria do banco para definir os perfis…ehehehe) - que o sistema reconhecerá para conceder autorizações a partes do sistema.

Criado 14 de dezembro de 2009
Ultima resposta 15 de dez. de 2009
Respostas 7
Participantes 6