Я использую jdbc для соединения с postgresql базой данных в JAVA-приложении (на самом деле, приложение записано в Groovy). У меня есть postgresql, настроенный для использования 'доверительного' метода аутентификации. Действительно ли возможно открыть соединение JDBC, не указывая пароль? Когда я пытаюсь использовать нормального конструктора с пустым паролем, он перестал работать с
Exception in thread "Thread-2" org.postgresql.util.PSQLException: FATAL: password authentication failed for user "myuser"
Даже при том, что из командной строки это хорошо работает
psql -U myuser mydatabase
Welcome to psql 8.3.5, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
Да, вы можете.
Обратите внимание, что драйвер Postres JDBC всегда использует IP сокеты (host
в pg_hba.conf
), даже если база данных находится на локальной машине, тогда psql
может использовать локальные сокеты (local
в pg_hba.conf
). Поэтому, если psql
работает с trust
аутентификацией, а JDBC - нет, вам, вероятно, следует настроить trust
аутентификацию для IP-сокетов, см. документацию.
Уже отвечали, но:
Когда вы подключаетесь с помощью клиентской программы psql
и не указываете хост (-h
), по умолчанию используется локальный сокет (по крайней мере, в Linux). В JDBC вместо этого используется TCP/IP сокет. Затем, чтобы проверить проблему с соединением, вы должны вызвать psql с теми же настройками, которые вы используете в JDBC, включая хост.
Например
psql -U myuser -h 127.0.0.1 mydatabase # uses TCP/IP
Что не то же самое, что
psql -U myuser mydatabase # uses local socket (non TCP/IP)