Power BI Desktop 出现 Npgsql 3.0.3 错误

Npgsql 3.0.3 error with Power BI Desktop

我在连接到需要 SSL 的 AWS Postgres 数据库时收到以下错误。我最近从 npgsql 2.3.2(有问题)升级到无法连接的 3.0.3。如有任何建议,我们将不胜感激。

DataSource.Error: TlsClientStream.ClientAlertException: CertificateUnknown: Server certificate was not accepted. Chain status: A certificate chain could not be built to a trusted root authority. . at TlsClientStream.TlsClientStream.ParseCertificateMessage(Byte[] buf, Int32& pos) at TlsClientStream.TlsClientStream.TraverseHandshakeMessages() at TlsClientStream.TlsClientStream.GetInitialHandshakeMessages(Boolean allowApplicationData) at TlsClientStream.TlsClientStream.PerformInitialHandshake(String hostName, X509CertificateCollection clientCertificates, RemoteCertificateValidationCallback remoteCertificateValidationCallback, Boolean checkCertificateRevocation) Details: DataSourceKind=PostgreSQL

Npgsql 2.x 默认不对服务器证书进行验证,因此接受了自签名证书。新的默认设置是执行验证,这可能就是连接失败的原因。指定信任服务器证书连接字符串参数以恢复以前的行为。

您可以在 Npgsql security doc page, note also that this change is mentioned in our migration notes 上阅读更多内容。

我在将 PowerBI 连接到本地托管的 PostgreSQL 服务器时遇到了同样的问题,如果您能获得正确的信息,这个问题很容易解决。如果信任服务器的证书,最近的 Npgsql 版本将仅通过 SSL 连接。作为 Windows 应用程序,PowerBI 使用 windows 证书存储来决定信任什么。如果您可以获得 PostgreSQL 服务器的 SSL 证书(或用于签署该服务器的 CA 证书),然后告诉 Windows 信任该证书,PowerBI 也会信任它。

在 PostgreSQL 服务器的配置文件夹中有一个 postgresql.conf 文件,在其中搜索 ssl 设置,其中有一个包含 ssl 证书的位置。注意不是包含私钥的密钥文件,只有包含 public 密钥的证书文件。将它或其内容复制到机器 运行 PowerBI 并使用 运行 导入 |毫米卡 |添加插件...证书(Google)

导入证书后查看服务器名称,并使用相同的服务器名称从 PowerBI 连接(因此证书与连接匹配)。这为我解决了问题。如果 PostgreSQL 配置为坚持 SSL 连接,您可能也必须对 ODBC 连接执行相同的操作。

这不是最好的方法,但对我有用,因为如果您出于安全原因不需要加密。

转到数据库服务器上的 Postgres 配置文件,然后从

ssl = 真

ssl = 假

然后打开您的 power bi 桌面文件-> 选项和设置-> 数据源设置-> 然后在全局中您将保存您的连接按编辑权限并取消选中 "ENCRYPT CONNECTIONS"

然后就可以了

警告:如果您的数据库对 PUBLIC 开放,则不推荐这样做。

此致,

达夫利克

来自 npgsql 的文档给出的解决方案是将连接字符串中 'false' 的默认 信任服务器证书 更改为 'true'。 不幸的是,Excel (AFAIK) 和 Power BI 都不允许您编辑连接字符串。因此,如果您无法从数据库管理员那里获取 SSL 证书(如 中所建议),或者 SSL 证书的服务器名称与您连接的名称不同(在我的例子中是 IP 地址),则能做的不多。

我可以看到两种解决方法。来自 npgsql 的 Shay & co(顺便说一句,他们做得很好)为用户提供了一些方法来更改 connection string parameters 的默认设置。或者 Microsoft 允许用户在 Power BI 的连接对话框中发送关键字(和 Excel)。

我能够通过在我的机器上安装 Amazon RDS public 证书来解决这个问题。一旦我这样做了,我就能够连接了。

我遵循的步骤:

  1. 下载 AWS RDS public 证书 1
  2. 从下载的 .pem 文件创建一个 .crt 文件。示例说明 这里 2
  3. 在机器上安装证书(.crt 文件)。 3
  4. 连接!