2017-12-13 14 views
1

원격 PostgreSQL 데이터베이스를 설정하는 중입니다. 서버가 CentOS 7 및 PostgreSQL-9.5를 실행 중입니다. 현재 사용자가 데이터베이스를 쿼리 할 수 ​​있는지 여부를 테스트하고 있습니다.Python3 : SSL을 사용하여 원격 Postgres 데이터베이스에 연결

import psycopg2 

host = 'server1' 
dbname = 'test_db' 
user = 'test-user' 

sslcert = 'test-db.crt' 
sslmode = 'verify-full' 
sslkey = 'test-db.key' 


dsn = 'host={0} dbname={1} user={2} sslcert={3} sslmode={4} sslkey={5}'.format(host, dbname, user, sslcert, sslmode, sslkey) 

conn = psycopg2.connect(dsn) 

연결 시간이 다음과 같은 오류와 아웃 : : 나는 (아래) 몇 가지를 시도

psycopg2.OperationalError: could not connect to server: Connection timed out (0x0000274C/10060) 
    Is the server running on host "server1" (xx.xx.xx.xx) and accepting 
    TCP/IP connections on port 5432? 

이를 위해, 나는 다음 있습니다. 파이썬 끝 또는 데이터베이스 구성의 어느쪽에 문제가 있는지 파악하려고합니다.

  • 파이썬 구문이 올바른가요?
  • sslmode, sslcertsslkey과 같이 DSN 인수와 관련된 설명서는 어디에서 찾을 수 있습니까?
  • 이러한 종류의 연결에 더 적합한 다른 패키지가 있습니까?
  • 다른 질문이 있습니까?

내가 체크 한 다음

  1. '서버 1'올바르게 입력 및 파이썬에 의해 반환 된 IP 주소가 다른 모든 인수 철자가 정확하고 올바른 객체를 참조하는
  2. 에 해당되었다
  3. 현재 Postgres가 실행 중입니다 (service postgres-9.5 status은 "활성"으로 표시됩니다)
  4. Postgres는 포트 5432에서 수신 대기합니다. psycopg2 해당 패키지이다 SSL connection (protocol: TLSAv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
  5. user=test-user는 슈퍼 유저

나의 이해로 포스트 그레스에 추가되었습니다 (psql -U username -W -d test-db -h host 반환

  • SSL 내 테이블에 대해 실행 (netstat -na | grep tcp 포트 5432에 "LISTEN"표시) 요즘 사용하기. 나는 documentation을 샅샅이 뒤졌고 SSL 연결에 관한 많은 정보를 찾지 못했습니다. 이 SO postpsycog2을 사용하여 SSL 연결에 대해 말하지만 설명서의 일부 구문과 일치하지 않습니다. 파이썬 스크립트에서

    , 내가 시도했던 4 개 조합에 다음

    1. 사용 sslmode='require'
    2. 사용 절대 test-db.crt에 대한 경로 및 test-db.key
  • 답변

    0

    당신이 자신을 제시 나타납니다 False Dilemma. 이 문제는 전적으로 파이썬과 데이터베이스 구성 사이에 있지 않습니다. 그 사이에 연결을 끊을 수있는 다른 엔티티가 있습니다.


    • Is the Python syntax correct?

    예.구문은 psycopg2.connect() 설명서에 설명되어 있습니다. DSN을 (Data Source Name)을 하나의 문자열로 또는 별도의 인수로 주어질 수있다

    psycopg2.connect(dsn=None, connection_factory=None, cursor_factory=None, async=False, **kwargs) 
    

    : 그것은 형태가

    conn = psycopg2.connect(dsn="dbname=test user=postgres password=secret") 
    
    conn = psycopg2.connect(dbname="test", user="postgres", password="secret") 
    

    • Where can I find documentation concerning the DSN arguments, such as sslmode, sslcert, and sslkey?

    참고하는 DSN 인수로, 그들은 psycopg2 모듈의 일부가 아닙니다. 그것들은 데이터베이스 (이 경우에는 Postgres)에 의해 정의됩니다. 이것들은 Parameter Key Words 섹션의 Database Connection Control Functions 장에서 찾을 수 있습니다. 아마도


    • What other questions should I be asking?

    ,

    통신을 방지 할 수있는 호스트합니다 (포스트그레스 SQL 서버)와 클라이언트 (로컬 파이썬 인스턴스) 사이 있나요?

    하나의 대답은 "방화벽"입니다. 이것은 문제로 밝혀졌습니다. Postgres는 듣고 있었고 Python은 손을 뻗어 나가고있었습니다. 그러나 문은 닫혔다.