知識庫 / Spring / Spring Boot RSS 訂閱

PSQLException:密碼驗證失敗

Persistence,Spring Boot
HongKong
4
11:04 AM · Dec 06 ,2025

1. 簡介

當配置我們的 Spring Boot 項目中使用 PostgreSQL 數據庫的數據源時,一個常見的陷阱是提供錯誤的數據庫連接密碼,甚至忘記提供用户密碼。

這可能導致我們在啓動項目並連接到數據庫時遇到錯誤。在本教程中,我們將學習如何避免 PSQLException 錯誤。

2. 數據源配置

讓我們研究兩種最常見的配置數據源和數據庫連接在 Spring Boot 中的技術,即使用 application.properties 文件或 application.yml 文件。只能使用其中一種方法。

2.1. application.properties</h3

現在,我們創建並配置 application.properties文件,其中包含用於建立連接的最小所需字段

spring.datasource.url=jdbc:postgresql://localhost:5432/tutorials
spring.datasource.username=postgres
spring.datasource.password=
spring.jpa.generate-ddl=true

應用程序在啓動時通過添加屬性 spring.jpa.generate-ddl 創建表。

我們不會在文件中包含密碼,嘗試通過在 Windows 命令行啓動我們的應用程序,並查看結果

mvn spring-boot:run

我們注意到由於未提供密碼導致認證出現錯誤

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

這種類型的消息可能會在我們使用 PostgreSQL 的新版本時略有延遲,並且我們可能會看到基於 SCRAM 認證 的錯誤:

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

2.2. application.yml

在繼續之前,我們必須評論 application.properties 文件的內容,或者從解決方案中刪除該文件,以避免與 application.yml 文件衝突。

讓我們創建並配置 application.yml 文件,使用之前所做的那樣,添加所需的最小字段:

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/tutorials
    username: postgres 
    password: 
  jpa:
    generate-ddl: true
<p>我們已添加了 <em >generate-ddl</em> 屬性,用於在啓動時創建表。</p>
<p><strong >通過</strong><strong >未在文件中完成密碼並嘗試從命令提示符啓動我們的應用程序,我們注意到之前遇到的相同錯誤:</p>
org.postgresql.util.PSQLException: The server requested password-based authentication, but no password was provided.

此外,在這種情況下,錯誤信息可能會略有不同,顯示 基於 SCRAM 的身份驗證 錯誤,如果我們在使用較新的 PostgreSQL 數據庫時。

2.3. 提供密碼

無論我們選擇使用哪種配置,只要我們正確地將密碼輸入到請求的參數中,服務器就會成功啓動。

否則,將會顯示一條特定的錯誤消息:

org.postgresql.util.PSQLException: FATAL: password authentication failed for user "postgres"

現在,讓我們使用正確的密碼成功建立與數據庫的連接,並確保應用程序正常啓動:

2024-07-19T00:03:33.429+03:00 INFO 18708 --- [ restartedMain] com.baeldung.boot.Application : Started Application in 0.484 seconds 
2024-07-19T00:03:33.179+03:00  INFO 18708 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-9 - Starting...
2024-07-19T00:03:33.246+03:00  INFO 18708 --- [  restartedMain] com.zaxxer.hikari.pool.HikariPool        : HikariPool-9 - Added connection org.postgresql.jdbc.PgConnection@76116e4a
2024-07-19T00:03:33.247+03:00  INFO 18708 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-9 - Start completed.

3. 數據庫密碼重置

或者,如果忘記或選擇重置數據庫用户或默認用户的密碼,我們還提供更改或重置密碼的選項。

現在,讓我們深入瞭解如何重置默認用户 postgres 的 PostgreSQL 密碼。

3.1. 重置默認用户密碼

首先,確定 PostgreSQL 安裝位置的 data 目錄,如果是在 Windows 上,理想情況下應位於 “C:\Program Files\PostgreSQL\16\data”。

然後,通過複製文件到不同的位置或將其重命名為 pg_hba.conf.backup,備份 pg_hba.conf 文件。 在 data 目錄下打開命令提示符,並運行以下命令:

copy "pg_hba.conf" "pg_hba.conf.backup"

其次,編輯 pg_dba.conf文件,並將所有本地連接從 scram-sha-256更改為 trust,這樣我們就可以在不使用密碼的情況下登錄到 PostgreSQL 數據庫服務器。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

首先,使用 Windows 上的“服務”功能重啓 PostgreSQL 服務器。 另一種方法是在命令提示符中以管理員身份運行以下命令:

pg_ctl -D "C:\Program Files\PostgreSQL\16\data" restart

隨後,我們使用諸如 psqlpgAdmin 等工具連接到 PostgreSQL 數據庫服務器。

在 PostgreSQL 安裝文件夾下 bin 目錄中打開命令提示符,並輸入以下 psql 命令:

psql -U postgres

我們已登錄數據庫,因為 PostgreSQL 不需要密碼。下面我們通過執行以下命令更改用户 postgres 的密碼:

ALTER USER postgres WITH PASSWORD 'new_password';

最後,我們如前所述,恢復 pg_dba.conf文件並重啓 PostgreSQL 數據庫服務器。現在,我們可以使用配置文件的新密碼連接到 PostgreSQL 數據庫。

3.2. 為任何其他用户重置密碼

通過使用 psql (在 Windows 上),我們會在 PostgreSQL 安裝的 bin 目錄下的命令提示符中打開一個命令行,並執行以下命令:

psql -U postgres

我們隨後提供 postgres 用户的密碼以及登錄權限。

作為超級用户 postgres 登錄後,請更改您想要更改密碼的用户密碼:

ALTER USER user_name WITH PASSWORD 'new_password';

4. 結論

在本文中,我們探討了在 Spring Boot 應用程序中配置數據源時常見的連接問題,以及解決該問題的方法。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.