如何处理 Postgresql URL 连接字符串密码中的特殊字符?

问题描述 投票:0回答:4

使用以下格式的 Postgresql URL 连接字符串:

postgresql://user:secret@localhost

如何处理该字符串中的特殊字符(例如,$),以便它在连接到我的 postgres 数据库时真正起作用?

我尝试过简单地对其进行 URL 编码,例如,“test$”变为“test%24”...但这似乎是一个问题,因为在尝试使用时出现“致命:密码身份验证失败”错误它。

postgresql url connection-string postgresql-9.1
4个回答
53
投票

请参阅文档中的连接 URI

您的问题中有几处似乎不太正确:

    自版本
  • 9.2

    起,postgres 仅支持

    URI,因此对于 
    9.1
    客户端来说根本不应该工作。或者您使用的客户端本身实现连接 URI。

  • 支持百分号编码。每个文档:

    百分比编码可用于包含具有特殊含义的符号 在任何 URI 部分中。

  • 对于美元字符来说甚至不需要百分比编码。

尝试过9.3:

sql> alter user daniel password 'p$ass';

$ psql 'postgresql://daniel:p$ass@localhost/test'

有效

$ psql 'postgresql://daniel:p%24ass@localhost'

有效

psql 'postgresql://daniel:pass@localhost/test'

如预期失败:密码错误。


7
投票

也许您的输入 shell 有不同的编码,并且

$
不是
%24
。 在 https://www.urlencoder.org/

上查看

提示: 如果您使用

alter user "username" password 'p$ass''word'
设置/更改密码, 单引号必须用另一个单引号屏蔽。


3
投票

处理 URI 方案中的保留字符时,必须了解它们在特定上下文中的特殊含义。如果 URI 方案强制使用保留字符用于不同目的,则有必要对该字符进行百分比编码。

对保留字符进行百分比编码涉及将其转换为相应的 ASCII 字节值,然后将该值表示为一对十六进制数字。这些数字前面带有百分号 (“%”),并在 URI 中使用,而不是保留字符。

例如,假设保留字符是“!”并且 URI 方案需要其用于特定目的。如果你想包含字符“!”在出于不同目的的 URI 中,您需要对其进行百分比编码。 “!”的百分比编码表示形式将是“%21”。

如果您的密码是 ABCD@123 那么 postgres 连接 URL 如下所示,

postgresql://username:ABCD%40123@host:port/database

0
投票

您可以在浏览器控制台中使用 encodeURI:

对此类网址进行编码

例如获取 pg_dump 命令:

var pghost = encodeURI(`${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}`);
var pgdump = `pg_dump --dbname=postgresql://${pghost}`;

console.log(pgdump);
© www.soinside.com 2019 - 2024. All rights reserved.