Usuario Banco(mysq)

10 respostas
rodrigo_rosalin

Estou utilizando mysql e gostaria de saber se existe algum problema em usar o mesmo usuário de banco para acessá-lo de vários pontos do sistema.

Tenho um servidor de banco de dados e todos outros hosts da rede o acessam.
Preciso criar para cada usuário do sistema um usuário do banco?
Ou posso utilizar somente um usuário do banco para todos os usuários do sistema?

Obrigado

10 Respostas

J

Opa,

Geralmente um sistema tem um único usuário para acessar. Por questões de segurança, cada sistema que usa o SGBD deve ter um usuário diferente.

São coisas diferentes: usuário do seu sistema e usuário do banco de dados. Usuários do seu sistema, é seu sistema que vai controlar. Usuário do banco de dados é utilizado apenas para realizar as transações da sua aplicação com o banco.

Abraço.

K_F

Meu amigo, também sou iniciante.
O que geralmente faço é ter apenas um usuário do banco, que fica em minha classe de conexão.
Limito o acesso através de usuários do sistema. Não sei se é a melhor forma.

Espero ter ajudado! :wink:

rodrigo_rosalin

Eu já tenho controlado os usuários do sistemas.
A questão não é como implementar, mas sim qual a melhor maneira de controlar isso.

Para cada usuário do sistema eu estava criando um usuário do banco.

Estou usando Hibernate, e quando o usuário erra na senha ou nome de Usuario ele entra em um timeout e fica tentando conexão com banco (isso é muito demorado).
Isso acontecia na loggin do sistema.

J

Isso significa que se o usuário resolver usar um cliente para mysql e conectar na sua base poderá fazer modificações nela ( alterar entidades, se tiver permissões) inserir, remover registros sem passar pelas regras de negócio.

Isso é meio perigoso.

peczenyj

se vc fizer 2 conexões no banco com o mesmo usuario serão conexões independentes e uma não vai afetar a outra.

é claro que, se eu estiver atualizando um registro e outra pessoa estiver fazendo o mesmo num exato momento, o banco de dados não resolve automagicamente: vc vai ter que se preocupar nesse ponto, para isso existem os frameworks ORM como Hibernate que podem ser configurados de forma otimista ou pessimista :wink:

ibispo

Eu creio q a maneira q utilizo hj pra mim é mto pratica e funcional.

No BD eu tenho apenas um usuario (root) ou outro qualquer com uma SUPER SENHA.

Essa senha é colocada na conexao com o BD senao nao funciona.

Dentro do BD eu tenho a tabela de usuarios onde posso controlar acessos (estrutura de acessos modular) e outras coisas mais:

Observações:

Imagine se o BD der pau, vc, tendo backup, podemos restaurar tudo, sem se esquecer que a definicao do usuario deve vir junto. Alias por falar em restaurar BD MySQL é um sofrimento, pois no meu BD eu tenho views, triggers, procedures e functions que nao se recuperam. Eu tenho que ter um script a parte dessas estruturas e recupera-las depois. :x

Em outras tabelas do sistema eu posso vincular atraves das FOREIGN KEYS os usuarios responsaveis. Como fazer isso se os usuarios sao da tabela mysql.users?

Dentre outras coisas, enfim, é isso.

rodrigo_rosalin

joaomiguel:
Isso significa que se o usuário resolver usar um cliente para mysql e conectar na sua base poderá fazer modificações nela ( alterar entidades, se tiver permissões) inserir, remover registros sem passar pelas regras de negócio.

Isso é meio perigoso.

Eu não estava fazendo um trabalho sujo assim.
Se o usuário fosse administrador do sistema ele tinha todos os privilégios no banco, mas se fosse outro tipo de usuário os privilégios eram limitados.

J

Sim, eu entendi… na minha opninião não é a maneira correta de se fazer. Usuário do banco não foi feito para este propósito.

Mas me diga, qual sua intenção fazendo a conexão assim?

rodrigo_rosalin

peczenyj:
se vc fizer 2 conexões no banco com o mesmo usuario serão conexões independentes e uma não vai afetar a outra.

é claro que, se eu estiver atualizando um registro e outra pessoa estiver fazendo o mesmo num exato momento, o banco de dados não resolve automagicamente: vc vai ter que se preocupar nesse ponto, para isso existem os frameworks ORM como Hibernate que podem ser configurados de forma otimista ou pessimista ;-)

Isso pode acontecer somente se for em um mesmo registro?? eu já não terei problema.
Ou em qualquer operação simultânea no banco em diferentes registros?

Mais uma pergunta:
Existe algum timeout que o Hibernate usa pra ficar tentando conecção com o Banco?
Estou encontrando problema com isso.
Pois na primeira inicialização do sistema uma janela é aberta pedindo que as configurações do banco sejam feitas.

try
{
   Configuration cfg = new Configuration().configure().setProperty(Environment.URL,bd).setProperty(Environment.USER,   user).setProperty(Environment.PASS, SSN);
   sessionFactory = cfg.buildSessionFactory();  

 }
catch(Throwable e)
{
   ...
}

O problema é quando acontece do usuario entrar com alguma informação errada. Alguma exception pode ser gerada? Essa demora é normal?

rodrigo_rosalin

Consegui chegar a uma solução.

  • Quanto a demora, resolvi com thread.

  • A primeira vez que dou um openSession no programa, se a conexão com o banco não estiver feita eu capturo um RuntimeException pois openSession retoran null neste caso.

Obrigado a todos

Criado 5 de fevereiro de 2009
Ultima resposta 5 de fev. de 2009
Respostas 10
Participantes 5