ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PostgreSQL] pg_hba.conf 설명
    DB/PostgreSQL 2016. 10. 28. 15:49

    PostgreSQL의 pg_hba.conf 파일을 통해 외부접근에 대한 처리는 되도록 배재하는것이 좋습니다. 외부접근제어는 시스템 OS Kernel Level의 Packet Filter( iptable, ipchain...)를 이용하는 것이 PostgreSQL로의 불법로그인으로 인한PostgreSQL 인증체크처리 부하라던지 전체적인 성능에 이득이 됩니다. 즉, Kernel단에서 해당 IP나 IP Block에 대해서 접근제어를 해주는 것이 전체적인 성능에 좋습니다.

    pg_hba.conf는 PostgreSQL의 인증시스템관련 정보를 담고 있는 설정파일로 설정방법이 간단한편으로 실제적인 계정에 대한 정보는PostgreSQL의 카탈로그 테이블인 pg_user에서 관리하고 접근 Host Host의 데이터 전송방식과 암호화 전송방식에 대한 설정을 가지고 있습니다그런 이유로 계정에 대한 권한이나 패스워드등의 변경은 실시간으로 적용이 가능하나 접근자의 접근방식과 암호전달 방식에 대해서는 pg_ctl reload나 pg_ctl restart를 통해 daemon이 다시 pg_hba.conf파일을 로드하게 해주어야 합니다불편성이 있는듯 하지만,불법접근에 대한 처리시에 빠른 응답으로 Postgres Server부담을 줄이기 위함으로 최대한의 성능을 위한 것입니다.


    pg_hba.conf 내용

    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            md5
    # IPv6 local connections:
    host    all             all             ::1/128                 md5
    # Allow replication connections from localhost, by a user with the
    # replication privilege.
    #host    replication     enterprisedb        127.0.0.1/32            md5
    #host    replication     enterprisedb        ::1/128                 md5


    1. Host Type
      1. 접근자의 접근위치와 통신의 암호화 관련 설정
      2. local, host, hostssl, hostnossl 지원
      3. local은 Unix Domain Socket을 통한 접속에 해당
      4. hostssl은 ssl인증서를 통한 암호화 통신만 지원하고 localhost, 127.0.0.1과 같이 TCP/IP접속에 해당
      5. hostnossl은 ssl접속 불가능, TCP/IP통신 지원
      6. host나 hostssl로 설정한 상태에서 SSL기능을 사용하시려면 Postgres컴파일시 --with-openssl옵션을 주어야 하며, postgresql.conf ssl=true로 설정을 해주셔야만 합니다.
    2. Database Name
      1. 특정 디비에 대한 접속을 제한할 수 있고 ,를 사용하여 여러 개의 디비 접근 제어 가능
      2. 모든 디비에 대한 접근을 풀려면 all을 적어두면 됨
      3. 만약 설정할 디비가 수십 개라면 @test.txt와 같이 설정한 후 test.txt을 PGDATA로 설정한 폴더의 안에 넣어두면 됨
    3. User Name
      1. 계정설정으로 ,로 구분할 수 있음
      2. @파일명 과 같이 따로 파일을 만들어서 처리 가능
      3. PostgreSQL의 계정 그룹 카탈로그 테이블인 pg_group 또는 create_group 명령으로 그룹을 만들어 계정들은 하위(SYSID)에 묶어두었을때는 +(플러스키를 붙인 그룹명으로 설정하면 해당 그룹에 대한 모든 접근이 가능
    4. Address
      1. IPv4 CIDR구분으로 해당 C Class에 대해 모두 접근처리를 할 경우는 : xxx.xxx.xxx.0/24
      2. 해당 IP에 대한 접근처리를 할 경우는 : xxx.xxx.xxx.xxx/32
    5.  Method
      1. 실제 계정의 패스워드에 대해 서버로 전송을 어떻게 할 것인가를 정함
      2. trust : 패스워드 없이 접근 가능
      3. reject : 거부
      4. md5 : 패스워드를 md5로 암호화 전송
      5. crypt: crypt로 암호화해서 전송
      6. password: text로 패스워드를 전송
      7. krb4, krb5 :kerberOS V4, 5지원
      8. ident:  접속 클라이언트 유저 이름을 확인
      9. pam : 서비스인증

    예시

    로컬 시스템상의 모든 유저가 임의의 데이터베이스에 임의의 데이터베이스 유저명으로 Unix 도메인 소켓을 사용해 접속하는 것을 허가 (로컬 접속에서는 디폴트). 

    # TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD 
    local all all trust


    IP주소 192.168. 93. x를 가지는 모든 호스트의 모든 유저가, ident가 그 접속에 대해 보고하는 것과 같은 유저명(전형적으로는 Unix 유저명)으로 데이터베이스 "postgres"에 접속하는 것을 허가. 

    # TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD 
    host postgres all 192.168.93.0/24 ident sameuser


    댓글