Каков наилучший способ скрыть пароль?

У меня есть Python script, который подключается к базе данных. Для этого, очевидно, мне нужен пароль. Мне нужно что-то скрыть где-то.

Моя проблема в том, что этот код хранится в папке, доступной всем, у кого есть доступ к серверу. Итак, если я напишу этот пароль, зашифрованный в файле, в коде появится ключ, чтобы его обнаружить, и люди могут это понять.

Итак, пожалуйста, если у кого-то есть идея.

Ответ 1

Вы используете язык сценариев и напрямую обращаетесь к базе данных с паролем. Независимо от того, что вы делаете, на некотором уровне этот пароль будет легко доступен. Замаскировав его, вы не очень много покупаете.

Вы должны полагаться на безопасность и разрешения на работу и, возможно, на базу данных (ограничение доступа с этой конкретной машины и пользователя).

Ответ 2

Не хранить учетные данные подключения к базе данных в файле Python. Вместо этого сохраните их в безопасном месте, доступный только для учетной записи пользователя, которая будет работать под script.

Например, создайте учетную запись пользователя для запуска этого задания и создайте файл в домашнем каталоге учетной записи пользователя (читаемый только этим пользователем) под названием database.ini и поместите туда строку подключения к базе данных и пароль. Затем используйте класс Python ConfigParser в стандартной библиотеке, чтобы прочитать файл.

Затем задание всегда можно запустить под учетной записью пользователя. Вы также можете запустить его под своей учетной записью, поместив в свой домашний каталог database.ini файл с правильными учетными данными, но любой, у кого нет учетных данных, не может его запустить.

Ответ 3

Обратите внимание на этот вопрос. Они предлагают кодировать пароль в base64 (вне script), а затем включать эту строку в script и преобразовывать ее обратно, прежде чем вы выполните соединение

Ответ 4

Чтобы усилить то, что сказал Брайан, если программа запускается автоматически (т.е. без возможности запросить у пользователя пароль), любая программа, работающая под одним и тем же полномочием пользователя, имеет тот же доступ к любому паролю. Не понятно, что еще вы могли бы сделать. Возможно, если (доверенная) операционная система на клиентской машине могла бы сертифицировать хост, к которой он был обращен программой, запущенной с определенного пути, хосту можно было бы сказать "Только открыть базу данных в /var/lib/tomcat/bin/tomcat на appserver.example.com". Если вы достигнете всего этого, злоумышленник должен будет скомпрометировать исполняемый файл tomcat для доступа к базе данных.

Ответ 5

Более сложная идея - сделать аутентификацию mysql вручную. То есть, изучите протокол mysql (это стандартное рукопожатие с проблемой и ответом) и выполните процедуру самостоятельно. Таким образом, вы никогда не отправляете пароль напрямую.