개요

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별 다운로드 안내
    https://www.postgresql.org/download/linux/

  2. PostgreSQL pg_hba.conf 파일 옵션 안내
    https://www.postgresql.org/docs/current/auth-pg-hba-conf.html

문서 업데이트 내역

날짜 내용
2022-10-07 문서 최초 생성