![](/img/trans.png)
[英]psql: FATAL: password authentication failed for user error while trying to access psql
[英]Problem with PostgresSQL password authentication failed for user when trying to access or fetch data from database?
嘗試從 postgressql 獲取數據時遇到問題。 我正在玩微服務架構,使用 .NET Core 5.0 和 postgressql 作為我的數據庫解決方案。
我正在嘗試使用 docker 個容器來容器化我的應用程序。 一切正常,直到我嘗試通過 API 獲取一些數據。
我收到這種類型的錯誤:
Npgsql.PostgresException (0x80004005): 28P01: password authentication failed for user "admin"
at Npgsql.NpgsqlConnector.<ReadMessage>g__ReadMessageLong|194_0(NpgsqlConnector connector, Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)
at Npgsql.NpgsqlConnector.AuthenticateMD5(String username, Byte[] salt, Boolean async, CancellationToken cancellationToken)
at Npgsql.NpgsqlConnector.Authenticate(String username, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.ConnectorPool.OpenNewConnector(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.ConnectorPool.<>c__DisplayClass38_0.<<Rent>g__RentAsync|0>d.MoveNext()
--- End of stack trace from previous location ---
at Npgsql.NpgsqlConnection.<>c__DisplayClass41_0.<<Open>g__OpenAsync|0>d.MoveNext()
--- End of stack trace from previous location ---
at Dapper.SqlMapper.QueryRowAsync[T](IDbConnection cnn, Row row, Type effectiveType, CommandDefinition command) in /_/Dapper/SqlMapper.Async.cs:line 472
從后端的角度來看,我嘗試通過產品名稱獲取數據的情況非常簡單:
public async Task<Coupon> GetDiscount(string productName)
{
using var connection = new NpgsqlConnection
(_configuration.GetValue<string>("DatabaseSettings:ConnectionString"));
var coupon = await connection.QueryFirstOrDefaultAsync<Coupon>
("SELECT * FROM Coupon WHERE ProductName = @ProductName", new { ProductName = productName });
if (coupon == null)
return new Coupon
{ ProductName = "No Discount", Amount = 0, Description = "No Discount Desc" };
return coupon;
}
我的 appsettings.json 文件,或者更准確地說,指向 postgressql 的連接字符串是這樣的:
"DatabaseSettings": {
"ConnectionString": "Server=localhost;Port=5432;Database=DiscountDb;User Id=admin;Password=admin1234;"
},
在 docker 中編寫覆蓋 yml 文件我有:
discountdb:
container_name: discountdb
environment:
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=admin1234
- POSTGRES_DB=DiscountDb
restart: always
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data/
正如我所見,在我的 portainer 中我可以看到 discountdb 已啟動並正在運行
我錯過了一些東西,我不知道是什么。
檢查您的計算機上是否正在運行 PostgreSQL 實例,然后停止服務,它會使用相同的教程正常工作 lm 並停止我本地安裝的 postgressql 服務
在容器中運行應用程序時,您可能需要更新連接字符串。 我假設您無法訪問數據庫。
您正在根據appsettings.json
從應用程序內引用localhost ,除非您已覆蓋連接字符串。 容器中的 localhost 是它自己的上下文。
因此,您的連接字符串如下所示。
"Server=localhost;Port=5432;Database=DiscountDb;User Id=admin;Password=admin1234;"
但它可能看起來像這樣(來自 docker 組合的 docker 網絡將解析名稱):
"Server=discountdb;Port=5432;Database=DiscountDb;User Id=admin;Password=admin1234;"
因此,在您的pgadmin
服務下的 docker 撰寫文件中,如果您還沒有環境部分,您可以添加一個環境部分,以覆蓋連接字符串。
environment:
- DatabaseSettings:ConnectionString="Server=discountdb;Port=5432;Database=DiscountDb;User Id=admin;Password=admin1234;"
可能應該沒有"
覆蓋。
看起來您在計算機的 5432 端口上本地運行了另一個 PostgreSQL 實例。 所以你調用這個服務器而不是你的容器化服務器。 另一方面,Portainer 在您的 docker-compose 網絡中運行,並按預期調用容器化服務。 您可以嘗試在 docker-compose 文件中設置不同的端口。
我遇到了同樣的問題,我花了超過 1 周的時間試圖尋找解決方案。 我認為我們遵循相同的教程,因為當我閱讀您的代碼時,這與我的完全一樣。 好吧,我只是更改了文件“appsettings.json”
"服務器=您的 PC 名稱;端口=5432;數據庫=DiscountDb;用戶 ID=admin;密碼=admin1234;"
不要使用 localhost 替換您的 PC 名稱。
我首先在 appsettings.json 中為我找到了解決方案,添加服務器名稱(可能是 postgres 數據庫容器名稱)和 Host=localhost:
"DatabaseSettings": {
"ConnectionString": "Server=discountdb;Port=5432;Host=localhost;Database=DiscountDb;User Id=admin;Password=admin1234;"
},
然后你需要檢查是否有任何服務器在運行端口 5432 通常如果你的計算機中安裝了 Postgres 默認端口是 5432 所以你需要停止它。
如果您使用的是 windows,則要殺死的命令:
taskkill /PID <port value> /F
然后再次運行應用程序。
在我的例子中,我已經從我自己的本地機器上刪除了 PostgreSQL Db,因為我建議我在添加本地 PostgreSQL Db 時配置了另一個密碼。 我現在用的是Docker,沒必要用local Db。
只需刪除,重新安裝,然后嘗試再次運行 Postgresql。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.