PostgreSQL && Java - problema na autenticação do usuário

9 respostas
J

Olá pessoal, tô aprendendo a conectar uma aplicação java a um banco do PostgreSQL, no entanto, apareceu uma pedra no meu caminho que tá difícil de retirar. O problema é o seguinte:

Ao executar a aplicação é gerado o erro:

org.postgresql.util.PSQLException: Um erro de conexão ocorreu: org.postgresql.util.PSQLException: FATAL: IDENT authentication failed for user “root”

Os dados que uso para conectar são:

url = “jdbc:postgresql://localhost:5432/meubd”
usuario = “root”
senha = “senha”

Utilizo o PostgreSQL7.4.2 e o JDBC driver = pg74.215.jdbc3.jar no Kurumin 4.0

No shell o Postgre confirma que o dono do banco é o root, mas não é o que acontece quando tento executar minha aplicação. Será que alguém sabe por que na aplicação não se reconhece o usuário? Ficaria muito grata se alguém pudesse me ajudar… :roll:

9 Respostas

M

Você configurou o PostgreSQL para aceitar conexão via rede ?

Na instalaçao padrão esta feature bem desabilitada.

Se você já fez isso então provavelmente é problema de permissão (grant).

Marcus

Rafael_Steil

Alem do questionado pelo marcus, qual eh o codigo que vc esta usanod para conectar?

Rafael

A

veja qual usuario vc tem cadastrado no banco … por padrao tem o usuario postgres sem nehuma senha configurada.

J

Pois é, andrelcvc, também tentei conectar com o usuário “postgres”, com senha = “”, mas o mesmo erro se repetiu

J

teste

J

Oi Rafael Steil, esse é o código que tô usando pra conectar

//Conexaob.java

import java.sql.;
import javax.swing.
;

public class Conexaob {

private Connection con;
private ResultSet rs;

public Conexaob() {

String url = jdbc:postgresql://localhost:5432/meubd;

String username = “usuario”;

String senha = “senha”;

try {

Class.forName(“org.postgresql.Driver”);

con = DriverManager.getConnection(url, username, senha);

}

catch (ClassNotFoundException cnfex) {

JOptionPane.showMessageDialog(null,“Falha na conexão do driver”,“Erro”,JOptionPane.ERROR_MESSAGE);

cnfex.printStackTrace();

System.exit(1); //termina o programa

}

catch (SQLException sqlex) {

JOptionPane.showMessageDialog(null,“Incapaz de conectar”,“Erro”,JOptionPane.ERROR_MESSAGE);

sqlex.printStackTrace();

}
pegaTabela();

}

private void pegaTabela() {
Statement stm;

try {
	String query = "select * from indicador";
	stm = con.createStatement();
	rs = stm.executeQuery(query);
	mostraDados(rs);
	stm.close();		
}
catch(SQLException sqlex) {
	JOptionPane.showMessageDialog(null,"Não sei que erro é esse","Erro",JOptionPane.ERROR_MESSAGE);
	sqlex.printStackTrace();
}
catch(NullPointerException e) {
	JOptionPane.showMessageDialog(null,"Agora é esse tal de java.lang.NullPointerException\n Vê se pode!","Erro",JOptionPane.ERROR_MESSAGE);
}

}

private void mostraDados(ResultSet rs) throws SQLException {

//posiciona para o primeiro registro

boolean maisRegis = rs.next();
// se não houver registros, exibe uma mensagem
if(!maisRegis) {
	JOptionPane.showMessageDialog(null,"Não há registros","Informação",JOptionPane.WARNING_MESSAGE);
}
while(maisRegis){
	System.out.println(rs.getInt("codigo"));
	System.out.println(rs.getString("nome"));
	System.out.println(rs.getString("descricao"));
}

}

public void finalizar() {

try {

rs.close();

con.close();

System.out.println();

JOptionPane.showMessageDialog(null,Conexão fechada,Informação,JOptionPane.INFORMATION_MESSAGE);

}

catch (SQLException sqlex) {

JOptionPane.showMessageDialog(null,Incapaz de disconectar,Informação,JOptionPane.ERROR_MESSAGE);

sqlex.printStackTrace();

}

catch(NullPointerException e) {

JOptionPane.showMessageDialog(null,Olha  o java.lang.NullPointerException\n novamente!,Erro,JOptionPane.ERROR_MESSAGE);

}

}

public static void main(String args[]) {

Conexaob app = new Conexaob();
app.finalizar();
System.exit(0);

}
}

maresp

:arrow: Reinicie o postmaster com a opção -i (enable TCP/IP connections);
:arrow: Se estiver conectando remotamente edite o arquivo pg_hba.conf incluindo seu IP.

J

Oi pessoal!
Pelas dicas que vcs me deram dei uma navegada e acho que já sei qual é o meu problema. Eu não configurei as autenticações de usuários no arquivo de configuração “pg_hba.conf” que está localizado no diretório “/usr/local/pgsql/data/”. Lá devo criar um registro como segue o exemplo abaixo:
local banco_de_dados usuário método_de_autenticação [opção_de_autenticação]

Vou testar e retornar pra informar se deu certo ou não.

Mais informações podem ser encontradas nos links:
http://www.javalinux.com.br/pg74/client-authentication-problems.html
http://www.javalinux.com.br/pg74/client-authentication.html#AUTH-PG-HBA-CONF
:smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

J

Verifiquei o arquivo pg_hba.conf, e não havia nada de errado com ele, o mesmo permitia que qualquer usuário utilizasse qualquer banco, com o método de autenticação ident sameuser. Então desisti de usar o PostgreSQL 7. 4. Talvez não tenha dado certo porque ele ja veio pré compilado.
Baixei, compilei e instalei o PostgreSQL 8.0.1, e agora deu certo, o único problema é saber inicializar o postmaster, já tentei os comandos abaixo, mas é retornado um, erro dizendo que o usuário não tem permissão para inicializar o postmaster:

$ postmaster -D /usr/local/pgsql/data
$ postmaster -D /usr/local/pgsql/data >logfile 2>&1 &
pg_ctl start -l logfile
:roll:

Criado 19 de março de 2005
Ultima resposta 31 de mar. de 2005
Respostas 9
Participantes 5