Безопасный способ доступа к базе данных PostgreSQL с использованием python

#python #database #postgresql #security

#python #База данных #postgresql #Безопасность

Вопрос:

Итак, у меня есть веб-приложение flask, которое выполняет основные операции с базой данных. Я использую базу данных PostgreSQL. И я использую psycopg2 для доступа к ней. вот фрагмент кода для извлечения моих данных.

 import psycopg2
connection = psycopg2.connect(user="sysadmin",
                                  password="mypass",
                                  host="127.0.0.1",
                                  port="5432",
                                  database="myData")
  

Это не мой точный код, но он продемонстрирует мой вопрос. Как вы могли видеть, пароль и имя пользователя моей базы данных видны любому, у кого есть доступ к моему серверному коду. Но я не считаю, что запись пароля базы данных внутри программы является безопасным способом! итак, я надеялся, что кто-нибудь может указать какие-либо другие способы. Как это делают профессиональные веб-приложения, такие как Google и Facebook?

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

1. Это зависит от среды, в которой вы работаете, но обычно они используют какую-либо службу управления ключами. Google Cloud специально имеет cloud.google.com/kms

Ответ №1:

Одна вещь, которую вы могли бы рассмотреть, — это переменные среды, которые позволили бы вам определять секретные значения в их среде, а не в самом коде. В python вы можете получить доступ к среде с помощью os.environ.get("variablename") ; полное руководство по работе с ними на python доступно здесь. Именно так многие службы решают управлять секретами, и это используется по умолчанию для таких служб, как heroku.

Ответ №2:

Недавно я изучал flask, и у меня возник этот вопрос. В итоге я использовал файл «secrets» в формате json для хранения информации для входа, а также секретных ключей.

secretfiles.json

   {
  "web": {
    "app_id": "randomlongid",
    "app_secret": "randomlongkey",
    "user_name": "ausername",
    "user_pw": "randompassword"
  }
}
  

Затем я импортировал в свое приложение.

 import json
import psycopg2

MY_PASS = json.loads(open('secretfiles.json', 'r').read())['web']['user_pw']

connection = psycopg2.connect(user="sysadmin",
                                  password=MY_PASS,
                                  host="127.0.0.1",
                                  port="5432",
                                  database="myData")


  

Затем я бы добавил имя файла или просто *.json в свой .gitignore

Однако я искал хорошее объяснение использования переменных среды, подобных той, на которую только что ссылался infobiac, поэтому я, скорее всего, буду использовать этот метод в будущем.