NodeJS Prisma:用户`user`被拒绝访问数据库`db.public`

5q4ezhmt  于 2023-05-28  发布在  Node.js
关注(0)|答案(2)|浏览(216)

我得到了

Error: P1010: User `blog_user` was denied access on the database `blog_db.public`

当我第一次尝试在运行于Fedora上的本地PostgreSQL数据库中迁移Prisma模式时。
下面是我的.env文件中的DATABASE_URL

DATABASE_URL=postgresql://blog_user:blog_pswd@localhost:5432/blog_db

下面是我使用\l得到的输出。

Name    |   Owner   | Encoding |   Collate   |    Ctype    | ICU Locale | Locale Provider |    Access privileges    
-----------+-----------+----------+-------------+-------------+------------+-----------------+-------------------------
 blog_db   | blog_user | UTF8     | en_US.UTF-8 | en_US.UTF-8 |            | libc            | =Tc/blog_user          +
           |           |          |             |             |            |                 | blog_user=CTc/blog_user

下面是我的pg_hba.conf文件。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

以下是我已经尝试过的查询。

GRANT CONNECT ON DATABASE blog_db TO blog_user;
ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO blog_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO blog_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO blog_user;
GRANT ALL PRIVILEGES ON DATABASE blog_db TO blog_user;
GRANT pg_write_all_data TO blog_user;
GRANT pg_read_all_data TO blog_user;
lfapxunr

lfapxunr1#

我在Github上发现了这个问题。经过多次尝试,这篇评论为我解决了这个问题:https://github.com/prisma/prisma/issues/4571#issuecomment-1220760128
基本上,我在我的.env文件中定义了影子数据库URL。像这样:

datasource db {
  provider          = "postgresql"
  url               = env("DATABASE_URL")
  shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
}

另外,我的用户名和数据库名中有一些“-”,也用“_”替换了它。我不知道这是否也造成了一些问题。

w8rqjzmb

w8rqjzmb2#

METHODident更改为md5,以获得IPv6解决了这个问题。
我的pg_hba.conf文件:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

相关问题