2014-01-12 6 views
10

Ich versuche, eine Verbindung zu einer Postgresql-Datenbank von Java mit dem JDBC Driver herzustellen und möchte zur Authentifizierung verwenden.Unterstützt der Postgresql JDBC-Treiber die Pgpass-Authentifizierung?

Mein Postgresql-Server ist ordnungsgemäß für die Kennwortauthentifizierung eingerichtet und ich habe eine lokale .pgpass Datei; Ich kann unter Verwendung psql Verbindung herstellen, ohne das Kennwort des Benutzers zur Verfügung stellen zu müssen. Allerdings, wenn ich versuche, eine Verbindung in Java zu öffnen, bekomme ich folgende Fehlermeldung:

org.postgresql.util.PSQLException: The server requested password-based authentication, but no password was provided. 

ich den folgenden Code verwenden:

String url = "jdbc:postgresql://localhost/test"; 
Properties props = new Properties(); 
props.setProperty("user","my_user"); 
Connection conn = DriverManager.getConnection(url, props); 

Meine Frage ist dann: funktioniert die Postgres JDBC-Treiber-Unterstützung pgpass?

Der einzige Hinweis, den ich finden konnte, ist in SO und scheint darauf hinzuweisen, dass since the driver does not use libpq, then it cannot use pgpass. Ich kann jedoch nirgendwo eine Autoritatsantwort finden.

Antwort

9

Nein, PgJDBC liest nicht .pgpass.

$ cd projects/pgjdbc 
$ git grep pgpass 
$ 

Ihr Java-Programm müßte öffnen und analysieren .pgpass dann für die Verbindung geeignete Anpassung zu tun.

Wenn Sie eine Klasse schreiben .pgpass zu lesen und zu analysieren und es für einen bestimmten Satz von Verbindungsparametern zu entsprechen, fügen Sie es für die Aufnahme in den Fahrern PgJDBC einreichen, wo es org.postgresql.util unter dem Paket gehen würde.

Vielleicht finden Sie es einfacher, stattdessen den JDBC-Treiber direkt zu ändern, das Kennwort gesucht wird, wenn keine in den Verbindungsparameter angegeben wird, wenn der JDBC-Treiber bereits die JDBC-URL in Host analysiert hat, Port usw.

Verwandte Themen