ASP.NET Core 6 – SqlConnectionStringBuilder не читает переменную средыC#

Место общения программистов C#
Ответить
Anonymous
 ASP.NET Core 6 – SqlConnectionStringBuilder не читает переменную среды

Сообщение Anonymous »


Я использую SqlConnectionStringBuilder для создания строки подключения. Это связано с тем, что я храню пароли к базе данных в secrets.json для локальной разработки и в переменных среды на серверах под IIS -> Имя веб-сайта -> Редактор конфигурации, Раздел: system.webServer /aspNetCore, Откуда: ApplicationHost.config .

Я сделал это в ASP.NET Core 3.1 без проблем. В настоящее время я работаю над сайтом, который был запущен в ASP.NET 5 и обновлен до ASP.NET Core 6. Я использую локальную базу данных для локальной разработки, поэтому в этом случае нет необходимости вводить пароль базы данных в секретах . .json (хотя я до сих пор использую его для других секретов).

Всякий раз, когда я пытаюсь запустить свой веб-сайт, в журналах Windows появляется сообщение об ошибке:

System.Data.SqlClient.SqlException (0x80131904): не удалось войти в систему для пользователя «Имя пользователя».

Еще одна запись в журнале прямо перед ней:

Не удалось войти в систему для пользователя «Имя пользователя». Причина: Пароль не соответствует указанному логину. [КЛИЕНТ: IP-адрес сервера]

Если я жестко впишу пароль в строку подключения в appsettings, веб-сайт заработает без проблем. Я даже могу получить пароль базы данных из переменных среды и отобразить его на странице, чтобы знать, что веб-сайт может получить к ним доступ. Однако если я вставлю переменные среды в строку подключения, это каким-то образом внесет неверный пароль или не будет работать каким-либо другим образом.

Я потратил несколько дней на эту проблему и не могу понять. Пользователь SQL Server настроен как администратор и также имеет права dbowner для базы данных.

Мой код в startup.cs выглядит так:

частная строка _csSqlDb = null; А затем внутри public void ConfigurationServices

var csBuilder = новый SqlConnectionStringBuilder( Configuration.GetConnectionString("SqlDb")); // Разработка использует локальную базу данных, поэтому пароля нет если (!Environment.IsDevelopment()) { csBuilder.Password = Конфигурация["DbPassword"]; //используем с .NET Core 3.1 и всё работает //csBuilder.Password = System.Environment.GetEnvironmentVariable("DbPassword"); } _csSqlDb = csBuilder.ConnectionString; Services.AddDbContext(параметры => options.UseSqlServer(_csSqlDb)); Вот строки подключения, которые я использую.

Локальная разработка (использует аутентификацию Windows для localdb):

"ConnectionStrings": { "SqlDb": "Источник данных=(localdb)\\MSSQLLocalDB;Начальный каталог=Имя базы данных;Встроенная безопасность=True;Время ожидания соединения=60;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" } Промежуточный сервер (использует проверку подлинности SQL Server для SQL Server Express 2019):

"ConnectionStrings": { "SqlDb": "Источник данных=IPAddress\\SQLExpress;Начальный каталог=DBName;Постоянная информация о безопасности=True;Trusted_Connection=False;Идентификатор пользователя=Имя пользователя" } Если у кого-нибудь есть какие-либо идеи или идеи относительно того, в чем может быть проблема, я был бы очень признателен. Эта проблема возникает на моем локальном сервере Windows Server 2019 Standard с SQL Server 2019 Express, а также на рабочем сервере под управлением Windows Server 2019 Standard с SQL Server 2017 Web Edition.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»