Ncloud VPC환경에서 Ubuntu 서버에 설치형 PostgreSQL DB를 설치하고, 접속하는 방법입니다.

개요

PostgreSQL은 설치 후에 DB에 접속할 때 MySQL등 다른 DB와 달리 [OS와 PostgreSQL 양쪽에 동일한 계정을 생성]하거나 [인증관련 환경설정 파일을 수정]해야 접속할 수 있는데 이 두가지 방법을 Ubuntu에서 적용하는 과정을 정리해보겠습니다.

테스트 환경

  • Ubuntu 20.04
  • PostgreSQL 13.8

설치

기본 배포 버전으로 테스트할 수도 있지만, 여기서는 PostgreSQL 13을 설치해보겠습니다.

리포지토리 설정 파일 생성

[PostgreSQL 13] 설치 정보가 담겨 있는 리포지토리 설정 파일을 생성합니다.

~# sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

PostgreSQL 설치

[PostgreSQL 13]을 설치합니다.

~# apt-get update
~# apt-get -y install postgresql-13
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

PostgreSQL 시작

~# systemctl enable postgresql
~# systemctl start postgresql
~# systemctl status postgresql
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

DB 접속

기본 마스터 계정인 [postgres]로 [PostgreSQL]에 접속합니다.

~# sudo -i -u postgres
~$ psql
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

유저 생성

테스트용 계정 [testuser]를 생성하고 [\du] 명령으로 생성된 유저를 확인합니다.

postgres=# create user testuser password 'test123$' superuser;
postgres=# \du 
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

DB 생성 및 소유자 지정

테스트용 DB를 생성하고 소유자를 지정한 후에 [\l] 명령으로 생성된 DB를 확인합니다.

postgres=# create database testdb owner testuser;
postgres=# \l
postgres=# \q
~$ exit
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

접속 시도 - 인증 오류

위에서 생성한 계정으로 접속을 시도해보면, 아래와 같이 인증 오류가 발생합니다.
다음 단계에서는 이 인증 오류를 해결하는 방법 2가지를 확인해보겠습니다.

~# psql -U testuser -d testdb
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "testuser"
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

인증 오류 해결

인증 문제를 해결하고 [PostgreSQL]에 접속하는 방법은 크게 2가지가 있는데 한가지씩 확인해보겠습니다.

방법1 - 동일한 계정 생성

우선, 처음에 DB 생성 후에 추가했던 [PostgreSQL] 유저 계정과 동일한 계정을 OS 사용자에도 추가하는 방법입니다.

아래와 같이 DB 유저와 동일한 [testuser] 계정을 생성하겠습니다.

~# adduser testuser
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법
  • DB 접속
    새로 생성한 [testuser] 계정으로 전환한 후에 접속을 해보면 문제 없이 접속되는 것을 확인할 수 있습니다.
~# sudo -i -u testuser
~$ psql -U testuser -d testdb
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

방법2 - 인증 설정 파일 수정

다음으로 인증 관련 설정 파일인 [pg_hba.conf] 파일을 수정해서 접속하는 방법을 확인해보겠습니다.

[pg_hba.conf] 파일을 열어보면 아래와 같이 DB 접근 설정 항목들이 있는데 [local]과 IPv4용 [host]의 METHOD 항목을 보시면 각각 [peer]과 [md5]으로 설정되어 있는 것을 확인할 수 있습니다.

여기서 [peer]는 운영 체제에서 클라이언트의 운영 체제 사용자 이름과 요청한 데이터베이스 사용자 이름이 일치하는지 확인하는 옵션입니다.

이 항목을 [md5]로 수정합니다.

~# vi /etc/postgresql/13/main/pg_hba.conf
  • 수정 전
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법
  • 수정 후
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법
  • DB 재시작 후 접속
    설정 파일을 수정했으면 [PostgreSQL]을 재시작하고 다시 접속해봅니다.
    이번에는 문제 없이 패스워드를 입력하고 접속 가능한 것을 확인할 수 있습니다.
~# systemctl restart postgresql
~# psql -U testuser -d testdb
Ncloud VPC환경에서 설치형 PostgreSQL DB를 설치하고, 접속하는 방법

기본 배포 버전 설치

[PostgreSQL 13] 버전이 아닌 기본 배포 버전을 설치하려면 아래와 같은 방법으로 설치를 하면 됩니다.
2022년 10월 16일 기준 기본 배포 버전은 [12.8]입니다. 나머지 인증 방법은 위에서 설명한 내용과 동일합니다.

~# apt-get update
~# apt-get -y install postgresql
~# systemctl enable postgresql
~# systemctl start postgresql
~# systemctl status postgresql

pg_hba.conf 파일 Method 옵션

[pg_hba.conf] 설정 파일의 Method 옵션 리스트는 아래와 같습니다.

  • trust: 무조건 접속을 허용합니다. 이 방법을 사용하면 PostgreSQL 데이터베이스 서버에 연결할 수 있는 모든 사람이 암호나 다른 인증 없이 원하는 PostgreSQL 사용자로 로그인할 수 있습니다.

  • reject: 무조건 연결을 거부합니다. 이것은 그룹에서 특정 호스트 를 “ 필터링 “reject 하는 데 유용합니다. 예를 들어 한 라인은 특정 호스트의 연결을 차단할 수 있고 나중 라인은 특정 네트워크의 나머지 호스트가 연결할 수 있도록 합니다.

  • scram-sha-256: SCRAM-SHA-256 인증을 수행해 사용자의 암호를 확인합니다.

  • md5: SCRAM-SHA-256 또는 MD5 인증을 수행해 사용자의 암호를 확인합니다.

  • password: 클라이언트가 인증을 위해 암호화되지 않은 암호를 제공하도록 요구합니다. 암호는 네트워크를 통해 일반 텍스트로 전송되기 때문에 신뢰할 수 없는 네트워크에서는 사용해서는 안 됩니다.

  • gss: GSSAPI를 사용해 사용자를 인증합니다. 이것은 TCP/IP 연결에만 사용할 수 있습니다. GSSAPI 암호화와 함께 사용할 수 있습니다.

  • sspi: SSPI를 사용해 사용자를 인증합니다. 이것은 Windows에서만 사용할 수 있습니다.

  • ident: 클라이언트의 ident 서버에 연결하여 클라이언트의 운영 체제 사용자 이름을 얻고 요청한 데이터베이스 사용자 이름과 일치하는지 확인합니다. ID 인증은 TCP/IP 연결에서만 사용할 수 있습니다. 로컬 연결에 대해 지정된 경우 피어 인증이 대신 사용됩니다.

  • peer: 운영 체제에서 클라이언트의 운영 체제 사용자 이름을 가져와서 요청한 데이터베이스 사용자 이름과 일치하는지 확인합니다. 이것은 로컬 연결에만 사용할 수 있습니다.

  • lda: LDAP 서버를 사용해 인증 합니다.

  • radius: RADIUS 서버를 사용해 인증합니다.

  • cert: SSL 클라이언트 인증서를 사용해 인증합니다.

  • pam: 운영 체제에서 제공하는 PAM(Pluggable Authentication Modules) 서비스를 사용해 인증합니다.

  • bsd: 운영 체제에서 제공하는 BSD 인증 서비스를 사용해 인증합니다.

참고 URL

  1. PostgreSQL OS별 다운로드 안내
  2. PostgreSQL pg_hba.conf 파일 옵션 안내