Вести с полей
После 55-го обновления, сломалась инициализация источника данных через пул подключений и ibp-файл с параметрами.
То есть, с помощью строки подключения вида «file name=employee.ibp». Где employee.ibp — это UTF8-файл со строкой инициализации IBProvider.
UDL-файлы не поломаны и с ними проблем нет.
Почему сломалось? Пул подключений заставляет IBProvider загрузить employee.ibp, считывает из провайдера значения свойств инициализации и потом эти значения устанавливает обратно.
Вместо реального пароля, провайдер возвращает строку из звездочек, эти звездочки устанавливаются обратно, ну и, понятное дело, подключение к базе завершается ошибкой «обратитесь к администратору за логином и паролем …».
Немного перегнул палку. Тесты были, но они не в основной куче, поэтому проблема обнаружилась только сейчас, через месяц.
Как эту проблему можно починить?
1. До инициализации провайдер должен возвращать реальный пароль, который в него установили.
2. После инициализации — вместо пароля нужно возвращать звездочки.
3. После деинициализации, вместо пароля нужно продолжать возвращать звездочки.
4. Если пароль переустановили — возвращаем действительную строку с паролем.
Но меня терзают смутные сомнения … чинить или не чинить?
Про свойство с паролем в документации написано следующее:
Indicates the password to be used when connecting to the data source object or enumerator. When the value of this property is retrieved with IDBProperties::GetProperties, the provider might return a mask such as «******» or an empty string instead of the actual password. The password is still set internally and is used when IDBInitialize::Initialize is called.
Несколько раз перечитал и меня посетила очень правильная мысль — нужно зарезать в провайдере работу с файлами инициализации.
Потому что эта поддержка ibp-файлов выглядит как реальная дыра в безопасности.
Не то чтобы я прямо фанат этой самой безопасности (меня больше волнует стабильность работы), но зачем себе создавать дополнительные проблемы?
Мне эта мысль (зарезать поддержку IPersistFile у источника данных) реально очень нравится.