Мне пришла в голову блестящая идея сгенерировать безопасный пароль с помощью менеджера паролей KeePass и передать его моему администратору баз данных.
Теперь я построил свою строку подключения 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;
Пароль содержит как минимум следующие символы, а также прописные/строчные/цифры
/"|&@]<#
Ошибка: ArgumentException: Format of the initialization string does not conform to specification starting at index 151.
В индексе 151 я вижу точку с запятой после имени пользователя (которое я назвал someuser
в отредактированном примере, но содержит только строчные буквы и цифру). Столбец 151 баллов кода VS прямо перед последовательностью ;Password=
Вопросы:
[Изменить]: примечание о двойных кавычках, которые всегда должны быть экранированы в строках C#. Я спрятал строку подключения на вкладке конфигурации приложения Azure. Это означает, что двойная кавычка вряд ли будет повторно экранирована. Я считаю, что EF Core в настоящее время правильно читается double-quote
Собственно экранирование указано здесь: строки подключения
Простой тест показывает, что для вашего пароля достаточно добавить одинарные кавычки:
var csBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder();
csBuilder.Password = "/\"|&@]<#";
var cs = csBuilder.ConnectionString;
Console.WriteLine(cs);
Password='/"|&@]<#'
Я исправил проблему, повторно сгенерировав пароль без
double-quote
, но мне все еще любопытно, как сбежать на будущее.