포스트그레스의 pg_hba.conf 활용TPLUG(동명정보대학교 POWER LINUX USER GROUP) 주 효식 nogadax@kldp.org2000년 4월4일이 문서는 포스트그레스의 인증 방식등의 환경설정 파일인 pg_hba.conf를 설명하고, 이에 따른 사용상의 예제등을 제시하고자 한다. 또한, JDBC 를 이용한 connection 예제를 보여준다. 1. Domain Socketpg_hba.conf 설정은 두가지의 방법이 있다. 첫째는 Unix Domain Socket 방법이고 둘째는 Internet Domain Socket 방법이다. 다음은 이들 방법의 설명이다. socket 이란 unix 상의 프로세스간 통신을 위해 사용되는 메카니즘으로서, 이러한 통신에는 동일한 기계상의 프로세스간 통신과 네트워크 프로토콜을 이용하는 네트 워크상의 프로세스간 통신이 있다. socket 은 domain 이라는 공통된 통신 특성에 따라 분류되며, 동일한 기계상의 프로세스간 통신을 Unix Domain Socket이라하고, 네트워크상의 프로세스간 통신 을 Internet Domain Socket (혹은 TCP/IP Domain Socket )라 한다. Unix Domain Socket의 좋은 예로는 telnet 을 통한 telnet 디몬과 포스트그레스 디몬과의 통신이다. Internet Domain Socket의 좋은 예로는 ODBC 나 JDBC 를 통해 원격지 즉, 다른 기계상에서 JDBC를 이용한 클라이언트 프로세스와 포스트그레스 디몬과의 통신이다. 그러므로 JDBC 혹은, ODBC 를 통해 포스트그레스 DB서버와의 connection 을 설정하 려할때 pg_hba.conf 의 설정은 Internet Domain Socket 방식으로 설정하여야 한다. 만약 127.0.0.1 인 IP Address 가 동일한 기계상의 프로세스간 통신을 위해 사용되었다 할지라도 127.0.0.1 은 네트워크상의 특수한 IP 이므로 이는 네트워크 프로토콜을 이용하는 네트워크상의 프로세스간 통신이다. 그러므로 이는 Internet Domain Socket 이 된다. 2. pg_hba.conf 설정(postgresql Host-Based-Access Control) 보통 pg_hba.conf 는 $PGDATA 디렉토리에 존재한다. 예로서 포스트그레스의 디폴트 디렉토리는 /usr/local/pgsql이다. 그리고 PGDATA 의 값은 보통 /usr/local/pgsql/data 이다. pg_hba.conf 파일은 일반적으로 레코드들로 이루어져 있으며 레코드란 특정한 형태를 지닌 하나의 라인이다. 라인의 제일 앞에 # 로 되어 있으면 이는 주석 처리가 되어 있는 것이다. 또한 라인이 공란이면 이는 무시되어 진다. pg_hba.conf 의 레코드는 두가지로 분류되며 하나는 Unix Domain Socket 형이며 다른 하나는 Internet Domain Socket(TCP/IP Domain) 형이다. 2.1 Unix Domain Socket 설정
2.2 Internet Domain Socket 설정
2.3 Authentication method(인증 방법)
또한, 네트워크 상의 커넥션을 하려할 때 논리적인 보안 터널을 사용하는 방법이 있다. 이는 ssh 보안 기법을 적용한 것으로 클라이언트와 포스트 그레스 서버 사이의 네트워크 컨넥션을 ssh를 이용하여 암화화할 수 있다. 적절한 적용으로 안전한 네트워크 컨넥션을 만들 수 있다.
3. 설정 테스트
3.1 포스트그레스 슈퍼유저 패스워드테스트를 위해 postgres 의 슈퍼 유저 계정의 패스워드를 만들어야 한다. 이 패스워드는 단지 포스트그레스에 접속을 위한 것이며 telnet 에 로긴을 위한 패스워드는 아니다. 여기서 포스트그레스의 슈퍼유저 계정을 postgres 이고 패스워드는 nogadax라고 가정하며 이에 대한 절차는 다음과 같다.
3.2 다양한 설정 예제
4. JDBC CONNECTION 테스트
1. 클라이언트는 power linux 2 를 사용하였고 서버로는 accel 리눅스6.2 를 사용하였다. 포스트그레스는 7.0 beta3 을 사용하였고 jdk1.2.2 를 사용하였다. 2. 테스트를 위해 클라이언트에 포스트그레스 JDBC 드라이버를 설치하여야 하며 설치시 주의할 점이 있다. 만약 jdk1.1.x 를 사용한다면 포스트그레스 JDBC1 을 사용하여야 하며 jdk1.2.x 를 사용한다면 포스트그레스 JDBC2 를 사용하여야 한다. 3. 클라이언트에 JDBC 드라이버 설치 먼저 포스트그레스 JDBC 드라이버를 클라이어트측의 적당한 디렉토리에 복사한다. 여기서는 /usr/local/lib/jdbc_post/ 디렉토리에 복사하였다. 그런 후 CLASSPATH 를 잡아준다. 다음은 CLASSPATH 설정 예이다.
4. 포스트그레스 서버의 pg_hba.conf 를 적절히 수정해주어야 한다. 테스트할 JDBC 소스 예제를 수행할 클라이언트의 IP 가 "210.110.144.161" 이라고 가정하고 포스트그레스 DB 서버의 IP 주소는 "210.110.144.162"라고 가정한다. 테스트의 수행에 앞서 DB 서버측에 IP 주소가 "210.110.144.161"인 클라이언트측에 대한 인증 설정을 하여야 한다. 설정은 다음과 같이 pg_hba.conf 에 다음 라인을 적절히 추가하여야 한다.
5. 포스트그레스용의 적절한 예제 프로그램을 복사한 후 컴파일 한다. 여기서는 basic.java 를 가지고 테스트 한다. 포스트그레스 JDBC 관련 예제 프로그램은 포스트그레스의 소스 디렉토리의 /src/interfaces/jdbc/example 디렉토리에 있다. 또한 basic.java 소스의 제일 첫 라인의 "package example;"을 적절히 처리한다. (주석처리나 삭제등..) 컴파일은 다음처럼 한다.
실행은 다음처럼 한다. java basic jdbc:postgresql://210.110.144.162/template1 postgres nogadax 위의 IP 어드레스 "210.110.144.162" 는 포스트그레스가 있는 서버의 IP 이고 "template1"은 접속하여 테스트하려는 데이타베이스명이다. "postgres"는 접속을 하려하는 포스트그레스 의 DB 사용자명이고 "nogadax" 는 패스워드이다. IP 는 자신의 서버에 맞게 적절히 변경해준다. 만약 하나의 서버상에서 테스트를 하려한다면 IP는 127.0.0.1 이며 pg_hba.conf 의 설정은 다음과 같다.
5. 기타Domain Socket 에 대한 내용은 "Unix 의 내부 구조"(홍릉 과학 출판사,조유근 역)의 "프로세스간 통신"부분을 참조하였다. pg_hba.conf 는 포스트그레스의 Admin's Guide 의 "SECURITY" 부분을 참조하였다. 포스트그레스 JDBC 드라이버 관련 내용은 포스트그레스의 Programmer's Guide 의 "JDBC Interface" 부분을 참조하였다. |











