Как лучше выполнять авторизацию в отдельной программе подключающейся к БД?

Есть некоторая программа которая подключается к внешней базе данных, при этом пользователь и пароль для подключения к базе хранятся в коде программы и могут быть скомпрометированны(в теории). Программа написанная на python вначале подключается к базе данных с жестко заданным в коде пользователем и паролем, а затем запрашивает авторизацию, сверяя при этом пользователя с пользователем в таблице. Таким образом до ввода пароля можно получить доступ к абсолютно любым данным изменив код программы(python всетаки интерпретируемый) - даже если код в "*.pyc".
Так вот как можно улучшить процедуру авторизации? Пользователь должен авторизовываться в базе данных? Или не стоит заморачиваться и просто ставить криптостойкий пароль на вход в операционную систему?
  • Вопрос задан
  • 124 просмотра
Решения вопроса 3
tsklab
@tsklab
Системный администратор, программист
Подключаться с учётной записью пользователя ОС.

Это будет проблематично.

Тогда использовать учётную запись в СУБД. Например, диалоги подключения к базам.

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

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы