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

6tdlim6h  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(3)|浏览(402)

使用PostgreSQL URL连接字符串,格式为:

postgresql://user:secret@localhost

我如何处理字符串中的特殊字符(例如,$),以便在连接到postgres数据库时它能够正常工作?
我尝试了简单的URL编码,例如,“test$”变成了“test%24”…但这似乎是一个问题,因为我得到了一个“致命的:密码验证失败”错误。

oewdyzsn

oewdyzsn1#

请参见文档中的连接URI。
你的问题中有几点似乎不太对:

  • postgres只从9.2版本开始支持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'

如预期失败:密码错误。

pnwntuvh

pnwntuvh2#

也许你的输入shell有不同的编码,$不是%24。在https://www.urlencoder.org/上查看
提示:如果你使用alter user "username" password 'p$ass''word'来设置/更改密码,单引号必须用另一个单引号来屏蔽。

qyswt5oh

qyswt5oh3#

在处理URI方案中的保留字符时,必须理解它们在特定上下文中的特殊含义。如果URI方案要求将保留字符用于其他目的,则必须对该字符进行百分比编码。
对保留字符进行百分比编码涉及将其转换为ASCII中相应的字节值,然后将该值表示为一对十六进制数字。然后这些数字前面加上百分号(“%”),并在URI中使用,而不是保留字符。
例如,假设保留字符是“!并且URI方案要求其用于特定目的。如果要包含字符“!“,则需要对它进行百分比编码。的百分比编码表示形式“!”将是“%21”。

如果您的密码是ABCD@123,则postgres连接url如下所示,

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

相关问题