Чтение учетных данных подключения PSYCOPG2 из файла в Python - PullRequest
0 голосов
/ 11 сентября 2018

Я сохранил учетные данные соединения красного смещения в файле test.txt в моей локальной системе. Содержимое файла:

host='abcxyz.redshift.amazonaws.com',
user='def',
port=5439,
password='123456',
dbname='ijk'

Я вызываю содержимое файла в моем коде Python, как показано ниже:

import psycopg2
with open ('filepath\test.txt', 'r') as myfile:
    data = myfile.read()
conn = psycopg2.connect(data)
cur = conn.cursor()

Однако, это дает следующую ошибку:

psycopg2.ProgrammingError: неверный dsn: отсутствует "=" после "данных" в соединении информационная строка

Может кто-нибудь любезно сообщить мне, где именно я иду не так?

Я пытался поместить содержимое файла в кавычки, но это тоже не сработало.

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

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

host=yourhost.redshift.amazonaws.com
user=redshift-user
port=5439
password=redshift-password
dbname=redshift-database

Относительно вашего вопроса в самостоятельном ответе

Просьба предложить любой хороший способ скрыть / скрыть учетные данные при подключении к AWS Redshift через Python.

Там может быть много способов защиты конфигурационных файлов, и у каждого способа есть свои плюсы и минусы. Я хотел бы предложить простой подход, который я использую (в среде Unix / Linux), сделать свой файл свойств для конкретного пользователя и просто оставить права на чтение / запись только для пользователя.

0 голосов
/ 05 августа 2019

Вы можете следить за собственной поддержкой ~ / .pgpass из postgresql.Подробнее см. https://www.postgresql.org/docs/9.1/libpq-pgpass.html.

Пример ~ / .pgpass file:

## hostname:port:database:username:password
## non-admin user
db.example.com:5432:db1:foo:apple
## admin user
db.example.com:5432:db1:postgres:pear

Я настроил базу данных через jupyter lab и использую psycopg2 в качестве драйвера postgres.Я использую следующую строку, и postgres выбирает соответствующие учетные данные для пользователя: foo и базу данных db1 из файла ~ / .pgpass.Я не пробовал команду psycopg2.connect, но она должна работать с файлом ~ / .pgpass.

postgresql://foo@db.example.com/db1

Если требуется SSL, используйте следующее:

postgresql://foo@db.example.com/db1?sslmode=require
0 голосов
/ 11 сентября 2018

Я смог сделать это, создав файл типа:

abcxyz.redshift.amazonaws.com
def
5439
123456
ijk

и сохранив его как test.txt. Затем создал пустой список и добавил каждую строку из файла в список.Затем использовал psycopg2 как:

conn = psycopg2.connect(host = cred_detail[0][0],
                        user = cred_detail[1][0],
                        port = cred_detail[2][0],
                        password = cred_detail[3][0],
                        dbname = cred_detail[4][0])
cur = conn.cursor()

Это не очень хороший метод для хранения и чтения учетных данных, но на данный момент это решает мою задачу.Пожалуйста, предложите любой хороший способ скрыть / скрыть учетные данные при подключении к AWS Redshift через Python.

...