由没有密码的用户连接到 Postgres DB

Posted

技术标签:

【中文标题】由没有密码的用户连接到 Postgres DB【英文标题】:Connect to Postgres DB by a user which has no password 【发布时间】:2020-10-28 00:06:57 【问题描述】:

我通过以下方式创建了一个用户:

sudo -u postgres psql -c "CREATE USER sample;"

然后创建了一个数据库:

sudo -u postgres psql -c "CREATE DATABASE practice OWNER sample;"

现在我正在尝试通过以下 sn-p 连接到该数据库:

dsn := url.URL
        User:     url.UserPassword("sample", ""),
        Scheme:   "postgres",
        Host:     fmt.Sprintf("%s", "localhost"),
        Path:     "practice",
        RawQuery: (&url.Values"sslmode": []string"disable").Encode(),

db, err := gorm.Open(
        "postgres",
        dsn.String(),
)
if err != nil 
        log.Fatal(err)

但是输出是:

2020/07/07 16:43:44 pq: password authentication failed for user "sample"

如何使用没有密码的用户连接数据库?

【问题讨论】:

【参考方案1】:

要么为用户分配一个密码然后使用它,要么更改您的 pg_hba.conf 文件以便 some other method of authentication 用于该用户/dbname/connection-method/host(然后重新启动您的服务器以使更改生效)。

sudo -u postgres psql -c "ALTER USER sample password 'yahkeixuom5R';"

【讨论】:

我可以使用 Python 和 SQLAlchemy 通过postgresql://sample:@/practice 连接到 db,而我没有更改 pg_hba.conf 中的任何内容。所以我不明白为什么无法连接。您对通过psql 与没有密码的用户连接有什么想法吗? @shayanrokrok 您的应用指定了“localhost”,它使用 pg_hba 中的“主机”行,而 @/ 使用的是 unix 域套接字,它使用 pg_hba 中的“本地”行。他们显然指定了不同的东西。 你说的太对了。正确的 URL 是:postgresql://sample:@localhost/practice

以上是关于由没有密码的用户连接到 Postgres DB的主要内容,如果未能解决你的问题,请参考以下文章

致命:连接到 postgres 时用户“postgres”的密码验证失败

pg Admin 4 - 尝试连接到 PostgreSQL 13 服务器时“postgres”用户的密码

org.postgresql.util.PSQLException:致命:从 Spring Boot 连接到 postgres 时用户“postgres”的密码验证失败

使用域用户(AD 用户)连接到没有密码的 SQL Server

从 Tableau Desktop 到 postgres 的 SSH 隧道 - 用户名和密码无效

Django - Oracle,如何使用为用户提供的用户/密码连接到只读数据库