Как лучше выполнять авторизацию в отдельной программе подключающейся к БД?
Подключаться с учётной записью пользователя ОС.Это будет проблематично.
Тогда использовать учётную запись в СУБД. Например, диалоги подключения к базам.
Если вас не остановит усложнение, то можно использовать собственную систему: таблицу пользователей и модуль управления ею.
Первичное подключение даёт доступ только к таблице пользователей. Тут можно установить любой уровень защиты. После входа переключать пользователя на нужную учётную запись. Поскольку это переключение будет на стороне сервера, пароль не будет скомпрометирован. Это не использование промежуточного слоя (приложения), всё можно сделать одной процедурой в самом SQL-сервере.
Как написал Захаров Александр, нужно вводить промежуточный уровень в виде серверного приложения.
1) Пароли не должны храниться в приложении. тем более от базы данных.
2) Проверка пароля должны осуществляться в серверном приложении, там же должен быть и уровень доступа к данным.
3) Пароли в базе должны храниться только в зашифрованном виде, и это должны быть не сами пароли, а хеши с солью.
4) Приложение общается не напрямую с базой данных, а с серверным приложением, которое уже и ходит к базе со своим логином-паролем, делает валидацию пользователя и т.д.
5) можно попробовать воспользоваться авторизацией пользователя, подключив серверное приложение к общему домену через kerberos/ldap./AD. - вот пару моделей, я их не пользовал, но посмотрите - python-notes.curiousefficiency.org/en/latest/pytho... и https://github.com/mongodb-labs/winkerberos