postgresql RDS while connection error:no pg_hba.conf entry for host

vnjpjtjt  于 12个月前  发布在  PostgreSQL
关注(0)|答案(4)|浏览(249)

我需要帮助,因为我在连接到RDS上的托管Postgres数据库时遇到问题。我遇到以下错误消息:“no pg_hba.conf entry for host '16.151.149.51',user 'analytics',database 'database',no encryption”我已确认加密功能正常,我还将IP添加到安全组中。我应该采取什么步骤来解决此问题?

cld4siwp

cld4siwp1#

如果您使用Engine 15或更高版本:
在RDS中设置数据库时,使用postgres15的默认参数组(default.postgres15)。但是,我们需要更改'rds.force_ssl'参数,该参数在default.postgres15组中不可编辑。为此,我们将为postgres15创建一个新的参数组,该参数组允许我们进行编辑。
一旦创建了新的参数组,我们将选择它并找到'rds.force_ssl'参数。我们将其值从1更改为0(默认值为1)。
然后,在数据库配置选项卡中,我们将“DB示例参数组”从默认组切换到新组。
完成这些更改后,我们将重新启动数据库并尝试再次连接。这应该可以工作。

0ve6wy6x

0ve6wy6x2#

new Pool({
        user: "",
        password: "",
        host: "",
        database: "",
        port: "",
        ssl: {
            rejectUnauthorized: false
        }
})

字符串
对于节点Postgres

bvuwiixz

bvuwiixz3#

好吧,OP可能已经解决了这个问题,但对于其他遇到这个问题的人来说:确保您下载了AWS RDS CA证书,并仔细检查您的凭据是否正确。在我的情况下,我使用的Terraform模块默认设置为true,它很好地悄悄地丢弃了我提供的密码并自行设置它。
但基本上,对于不知情的人来说,使用SSL连接的步骤是:
1.创建可公开访问的RDS(例如TF中的publicly_accessible = true)或至少对您的VPC主机开放,并具有适当的入口规则,例如:

ingress {
    from_port   = 5432
    to_port     = 5432
    protocol    = "tcp"
    description = "PostgreSQL access for VPC and local machine"
    cidr_blocks = [
      module.vpc.vpc_cidr_block,
      "1.1.1.1/32"
    ]
  }

字符串
1.然后在您的ec2-instance / client中,下载所需的根CA https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html Global是最简单的,例如:curl -O https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
1.创建.postgresql文件夹,只要Postgres想要它,并将证书作为root.crt移动到那里,例如:mv global-bundle.pem /root/.postgresql/root.crt
1.使用正确的连接字符串与SSL强制连接,例如:psql postgresql://<your user>:<your pass>@postgres-1-project.z4dadjt5qxpn.us-east-1.rds.amazonaws.com:5432/<your db>?sslmode=verify-full
1.你应该连接到你的RDS。如果它说FATAL: password authentication failed for user再次检查你的凭据。SSL应该工作(或至少抱怨的东西),如果你有它设置为verify-full

5gfr0r5j

5gfr0r5j4#

Nikhil P K的答案中提取,这个CDK代码将关闭Postgres 15+的SSL:

const engine = DatabaseInstanceEngine.postgres({
      version: PostgresEngineVersion.VER_15,
    });

    const parameterGroup = new ParameterGroup(
      this,
      "parameter-group",
      {
        engine,
        parameters: {
          "rds.force_ssl": "0",
        },
      }
    );

    this.database = new DatabaseInstance(this, "database", {
      engine,
      parameterGroup,
      // ...the rest of the setup
    });

字符串

相关问题