Как стать автором
Обновить

Комментарии 5

Методов зашифровать это безобразие не нашел, подскажите пожалуйста если недоглядел?

Раз вы работаете под Windows, то самый простой вариант - использовать SQL Server integrated security. В этом случае логина и пароля в строке соединения не будет. Но это не всегда возможно, поскольку БД может быть на другой машине, может не быть домена, могут быть разные ограничения со стороны администраторов...

Также есть простой вариант шифрования средствами Windows - DPAPI:

https://docs.microsoft.com/en-us/dotnet/standard/security/how-to-use-data-protection (Windows only)

Есть также вариант для .Net Core, но я им не пользовался:

https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/introduction?view=aspnetcore-6.0

Этот механизм, разумеется, неидеальный. Если у злоумышленника есть доступ к машине, и он сможет выковырять "энтропию" из приложения, то он сможет расшифровать строку соединения. Но это однозначно сложнее, чем прочитать пароль из текстового файла. Правда, я не уверен, что в вашем случае можно это применить. Просто указать зашифрованную строку в App.config уже не получится. Надо будет формировать конфигурацию log4net в вашем коде и вдобавок нужно будет создавать какой-то UI для того, чтобы сохранять/редактировать строку соединения.

Да эти средства очень хороши, но мне по роду своей деятельности приходиться работать с десктопными приложениями для АСУТП. Львиная доля подобных программных решений начинали создаваться очень давно, хотя до сих пор выпускаются все новые версии этих программ. Из отечественных разработок можно упомянуть, например MasterScada.

Поясните пожалуйста, какая связь между сабжем и MasterScada. Вы интегрируете свое приложение с этой скадой и пишете в лог из своего кода? Или вы как-то заставляете MasterScada работать с log4net?

// В каждом классе приложения можно реализовать приватное поле типа ILog и инициализировать его при объявлении.
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)pe);

У вас опечатка "pe);"

Методов зашифровать это безобразие не нашел, подскажите пожалуйста если недоглядел?


Мы пользовались Log4NetHelper.

Now it is possible to set the connection string directly at runtime, instead of ConnectionStringName and/or ConnectinStringFile.

AdoNetAppenderHelper.SetConnectionString(configuration.GetConnectionString("log4net"));

В этой статье вообще многое спорным является, а не только необходимость использования log4net:

  1. Приведён packages.config, но редактирование его содержимого вообще-то недостаточно, чтобы подключить библиотеку к проекту.

  2. Зачем вообще использовать packages.config? Даже если вы не хотите использовать modern csproj, можно использовать PackageReference в старом типе проекта.

  3. Если у вас framework 4.8, зачем использовать старый формат csproj?

  4. Использовать для примера framework 4.8 во время NET 6? Мсье знает толк...

  5. Запись логов в базу - отличная идея выстрелить себе в ногу. Ну да, у нас же БД и так ни чем не занимается. Давайте докинем на неё ещё и запись логов. Чтобы не только запись логов была медленной, но и был риск затормозить работу всего приложения разбором логов в БД.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.