ASP.NET Core 6 – SqlConnectionStringBuilder не читает переменную среды ⇐ C#
-
Anonymous
ASP.NET Core 6 – SqlConnectionStringBuilder не читает переменную среды
Я использую 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.
Я использую 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.
Мобильная версия