如果在 keyvault 中使用管理员密码创建,则无法 psql 连接 azure postgres 服务器

Cannot psql-connect azure postgres server if created with admin-password in keyvault

我一直在尝试使用密钥保管库中的管理员密码创建 azure postgres 服务器。使用通过命令 az keyvault secret show 获得的秘密我总是无法从我的电脑连接服务器。当使用在创建命令中存储为密钥保管库机密的相同文本字符串时,从我的 PC 连接时我没有任何问题。

jaana@Azure:~$ az postgres server create --location westeurope --resource-group my-rg  --name fortunate-postgres-server  --admin-user adminU  --admin-password changeMe+1 --sku-name B_Gen5_1
jaana@Azure:~$ secret=$(az keyvault secret show --name "AdminPassWord" --vault-name unfortunate-kv --query "value"
jaana@Azure:~$ echo $secret
"changeMe+1"
jaana@Azure:~$ az postgres server create --location westeurope --resource-group my-rg  --name unfortunate-postgres-server  --admin-user adminU  --admin-password $secret --sku-name B_Gen5_1

在我的电脑中:

$ psql "host=fortunate-postgres-server.postgres.database.azure.com port=5432 dbname=postgres user=adminU@fortunate-postgres-server password=changeMe+1 sslmode=require"
psql (9.2.2, server 9.6.21)
WARNING: psql version 9.2, server version 9.6.
         Some psql features might not work.
WARNING: Console code page (850) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
SSL connection (cipher: ECDHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

postgres=> \q

$ psql "host=unfortunate-postgres-server.postgres.database.azure.com port=5432 dbname=postgres user=adminU@unfortunate-postgres-server password=changeMe+1 sslmode=require"
psql: FATAL:  password authentication failed for user "adminU"

这怎么可能?

只需将 -o tsv 添加到命令 az keyvault secret show 中即可解决问题

只需在@Jaana 的回答中添加解释即可。

在这种情况下,有一个双引号的问题,如果你使用 az keyvault secret show 没有 -o tsv 参数,它会输出带双引号的值,然后当你引用变量时 az postgres server create,它会传递带双引号的值。

解决问题,-o tsv是解决方案,输出保证不带引号。

在此处查看详细信息 - https://docs.microsoft.com/en-us/cli/azure/format-output-azure-cli#tsv-output-format