Azure Postgres:主机“0.0.0.0”、用户“用户名”、数据库“订单”、SSL 上没有 pg_hba.conf 条目

Posted

技术标签:

【中文标题】Azure Postgres:主机“0.0.0.0”、用户“用户名”、数据库“订单”、SSL 上没有 pg_hba.conf 条目【英文标题】:Azure Postgres: no pg_hba.conf entry for host "0.0.0.0", user "UserName", database "orders", SSL on 【发布时间】:2018-04-05 14:57:11 【问题描述】:

我有一个正在开发中的 Azure 网站,它连接到一个新的 Azure Postgresql 数据库。

这个错误似乎是从周末开始的。周五我最后一次尝试它工作正常。我的 Azure 站点计划的 IP 地址似乎发生了变化,我编辑了 Azure Postgres 防火墙规则。

真正奇怪的部分是“0.0.0.0”主机。 Web 服务器如何看起来像数据库的 IP 地址“0.0.0.0”?我也确实在防火墙中添加了“0.0.0.0”,但这没有任何效果。我当然不能直接在 Azure 上编辑 pg_hba.conf 文件。

此外,在我的开发计算机上运行时它工作正常。我尝试重新部署我的网站,没有任何乐趣。

这是完整的堆栈跟踪:

[PostgresException (0x80004005): 28000: no pg_hba.conf entry for host "0.0.0.0", user "UserName", database "orders", SSL on]
Npgsql.NpgsqlConnector.DoReadMessage(DataRowLoadingMode dataRowLoadingMode, Boolean isPrependedMessage) +310
Npgsql.NpgsqlConnector.ReadMessageWithPrepended(DataRowLoadingMode dataRowLoadingMode) +195
Npgsql.NpgsqlConnector.HandleAuthentication(String username, NpgsqlTimeout timeout) +57
Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout) +299
Npgsql.ConnectorPool.Allocate(NpgsqlConnection conn, NpgsqlTimeout timeout) +573
Npgsql.NpgsqlConnection.OpenInternal() +366
Npgsql.NpgsqlConnection.Open() +4
System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +120
System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) +160
System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) +108
MapHazardsPro4.Functs.GetUserTable() in C:\inetpub\wwwroot\maphazardspro_q3_2017\Functs.vb:539
MapHazardsPro4.Global.Application_Start(Object sender, EventArgs e) in C:\inetpub\wwwroot\maphazardspro_q3_2017\Global.asax.vb:49

[HttpException (0x80004005): 28000: no pg_hba.conf entry for host "0.0.0.0", user "UserName", database "orders", SSL on]

System.Web.HttpApplicationFactory. EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +10104513
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +173
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296

[HttpException (0x80004005): 28000: no pg_hba.conf entry for host "0.0.0.0", user "UserName", database "orders", SSL on]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +10085804
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +95
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。添加防火墙规则 0.0.0.0 - 255.255.255.255

【讨论】:

做到了!谢谢。但我不确定这是最好的解决方案。这基本上消除了所有位置访问控制(这可能不是正确的术语) 我正在使用不同的 IP 范围,试图稍微收紧一点,无论我尝试什么,它都能继续工作,即使我完全删除了规则。因此,我重新发布了该网站,以确保应用程序已重置,并且由于原始错误而下降。所以有些东西被缓存在网络服务器上。我希望这能提供更多关于问题原因的线索。 如果您转到 Web 应用程序的“属性”部分,它将为您提供应用程序的虚拟 IP 地址和出站 IP 地址。将这些添加到防火墙规则中。【参考方案2】:

我通过以下方式解决了它:

1:关闭 psql 防火墙规则中的所有端口 2:尝试连接(当然会失败) 3:从 Azure 控制台,打开您的最后一个 postgres 服务器日志文件。

在这里你应该这样说:

2017-11-17 08:12:03 UTC-5a0e99d3.713c-LOG:  connection received: host=xxx.xxx.xxx.xxx port=0
2017-11-17 08:12:04 UTC-5a0e99d3.713c-FATAL:  no pg_hba.conf entry for host "0.0.0.0", user "smile", database "smiledb", SSL on

现在您可以为您在日志中看到的 xxx.xxx.xxx.xxx 地址创建一个规则,并且一切正常... 希望对您有所帮助!

【讨论】:

永远,永远不要向任何 IP 地址打开您的数据库!请微软,试着让你的 RDS 像 aws 一样工作!!! 当我运行 SELECT * FROM pg_hba_file_rules();在我的一个 azure postgres 实例中,我得到了 500 行规则,其中许多是针对网络而不是针对 ips 的,它对数千个 ips 开放 :( Go Microsoft !!!!【参考方案3】:

您可以为运行应用程序节点的 VNet 设置 VNet 规则

此 VNet 必须有一个带有 服务端点 Microsoft.SQL 的子网。

对于 Postgres 数据库也是如此。这是某种所有 SQL 数据库服务端点。 使用服务端点设置 VNet 后,您可以在 Azure 门户 Postgres 视图的连接安全部分添加此 VNet,您的应用程序节点将能够与 Postgres 对话。

https://docs.microsoft.com/en-us/azure/postgresql/howto-manage-vnet-using-portal

我认为这里的关键问题是了解 VNet 中的服务端点。

【讨论】:

以上是关于Azure Postgres:主机“0.0.0.0”、用户“用户名”、数据库“订单”、SSL 上没有 pg_hba.conf 条目的主要内容,如果未能解决你的问题,请参考以下文章

错误:在 Azure 服务器上监听 EACCES 0.0.0.0:80 节点(Windows 服务器 2012 r2)

Postgres PgAdmin 3:服务器不听 - 尝试了一切

postgresql 配置局域网内访问

postgresql 配置局域网内访问

PostgreSQL远程连接配置管理/账号密码分配(解决:致命错误: 用户 "postgres" Ident 认证失败)

Linux Docker Postgresql