SQL Azure 连接字符串中的密码转义

Password escapes in SQL Azure connection string

我有个绝妙的主意,就是使用 KeePass 密码管理器生成安全密码并将其提供给我的 DBA。

现在我构建了我的 Azure SQL 连接字符串如下

Server=tcp:something.database.windows.net,1433;Initial Catalog=SomeDbName;Persist Security Info=False;User ID=someuser;Password=[read later];MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

密码包含至少以下字符,以及upper/lowercase/digits

/"|&@]<#

错误是:ArgumentException: Format of the initialization string does not conform to specification starting at index 151.

在索引 151 处,我可以看到用户名后的分号(我在编辑示例中将其命名为 someuser,但仅包含小写字母和数字)。 VS Code 指向 ;Password= 序列

之前的第 151 列

问题:

[编辑]:关于双引号的说明,在 C# 字符串中必须始终对双引号进行转义。我将连接字符串埋在 Azure App 配置选项卡下。这意味着双引号不太可能被重新转义。我相信 EF Core 目前可以正确读取 double-quote

这里实际指定了转义:connection-strings

简单测试一下,你的密码,加上单引号就可以了:

var csBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder();
csBuilder.Password = "/\"|&@]<#";

var cs = csBuilder.ConnectionString;
Console.WriteLine(cs);
Password='/"|&@]<#'