用户“app”的 PostgreSQL 密码验证失败

问题描述 投票:0回答:0

我有一个 .NET 7 应用程序,它使用 NPGSQL (v7.0.2) 连接到在 Docker 中运行的 PostgreSQL 数据库 (v15.2)。图片是直接从https://hub.docker.com/_/postgres拉取的。 .NET 应用程序未在容器中运行。

容器开始于:

docker run --name db -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres

使用

psql -U postgres -h localhost
登录按预期工作。 容器启动后,我在容器内创建一个数据库和用户:

CREATE DATABASE mydb WITH TEMPLATE template0;
CREATE ROLE app WITH LOGIN PASSWORD 'password';
GRANT CONNECT ON DATABASE mydb TO app;
GRANT USAGE ON SCHEMA public TO app;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO app;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO app;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO app;
.NET appsettings.json 中的

Config 是:

  {
    "Host": "localhost",
    "Database": "mydb",
    "Username": "app",
    "Password": "password"
  }

当我运行 .NET 应用程序时,日志显示:

Severity: FATAL
    SqlState: 28P01
    MessageText: password authentication failed for user "app"
    File: auth.c
    Line: 326
    Routine: auth_failed

PostgreSQL 容器日志显示:

FATAL:  password authentication failed for user "app"
DETAIL:  Connection matched pg_hba.conf line 100: "host all all all scram-sha-256"

我可以用

psql -U app -h localhost -d mydb

登录

我尝试启动指定不同身份验证方法的容器:

docker run ... -e POSTGRES_INITDB_ARGS=--auth=scram-sha-256
docker run ... -e POSTGRES_INITDB_ARGS=--auth=md5
docker run ... -e POSTGRES_INITDB_ARGS=--auth=password

我还尝试将 pg_hba.config 中的匹配行更改为:

host all all all md5
host all all all password

如果我更改 .NET 配置以使用 postgres 用户,它会起作用。

{
   "Host": "localhost",
   "Database": "mydb",
   "Username": "postres",
   "Password": ""
}

作为参考,这里是容器中的 pg_hba.conf (/var/lib/postgresql/data/pg_hba.conf)

# 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

host all all all scram-sha-256

任何帮助表示赞赏。

.net postgresql docker npgsql
© www.soinside.com 2019 - 2024. All rights reserved.