libpg-java 是否支持无密码登录?

l0b*_*0b0 3 password java postgresql

以下命令运行良好,即不要求输入密码,不打印警告或错误,仅提供 DB 提示:

$ psql -U dbuser dbname
psql (8.4.10)
Type "help" for help.

dbname=# 
Run Code Online (Sandbox Code Playgroud)

当尝试使用SchemaSpy(以同一主机用户身份运行)从此数据库生成 ERD 时,它不起作用:

$ java -jar ~/schemaSpy.jar -dp /usr/share/java/postgresql.jar -t pgsql \
-host localhost -db dbname -u dbuser -o ~/db

Using database properties:
  [/[...]/schemaSpy.jar]/net/sourceforge/schemaspy/dbTypes/pgsql.properties

Failed to connect to database URL [jdbc:postgresql://localhost/dbname]

org.postgresql.util.PSQLException: The server requested password-based
authentication, but no password was provided.
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用空白密码 ( -p ''),它会打印:

org.postgresql.util.PSQLException: FATAL: password authentication failed for
user "dbuser"
Run Code Online (Sandbox Code Playgroud)

如何使用没有密码的数据库用户在 PostgreSQL 数据库上运行 SchemaSpy?

我尝试将pg_hba.conf设置更改为完全允许,但它仍然不起作用:

$ sudo grep ^local /etc/postgresql/*/main/pg_hba.conf
local   all         postgres                          ident
local   all         all                               trust
Run Code Online (Sandbox Code Playgroud)

l0b*_*0b0 8

发现有关类似问题的pgAdmin III的答案是:这两个方案(与psql建立TCP / IP连接,而不是Unix套接字连接,因此在相关线路/etc/postgresql/*/main/pg_hba.conf一个,这导致提示输入密码,即使密码为空.

host    all         all         127.0.0.1/32          md5
Run Code Online (Sandbox Code Playgroud)

要解决此问题,您必须信任来自 localhost 的连接,例如使用以下行:

host    all         all         127.0.0.1/32          trust
Run Code Online (Sandbox Code Playgroud)

重新加载配置:

sudo service postgresql reload
Run Code Online (Sandbox Code Playgroud)

现在 SchemaSpy 和 pgAdmin 都应该能够连接。