Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

pg_hba.conf 파일 구성 본문

PostgreSQL/기타 지식

pg_hba.conf 파일 구성

`O` 2021. 6. 14. 02:14
728x90
반응형

해당 페이지에서는 PostgreSQL / PPAS 에 접속하는 유저들의 접속 권한을 조절하는 pg_hba.conf 파일에 대하여 다룬다.

 

참조페이지

 

https://postgresql.kr/docs/9.6/auth-pg-hba-conf.html

 

이 페이지를 읽기 전, 아래의 페이지를 읽고 오면 좋다.

 

2021.06.11 - [PostgreSQL/아키텍처 및 내부 구조] - PostgreSQL / PPAS 데이터베이스 구조

 

 

 

 

pg_hba.conf 란?

 

PostgreSQL 에서 DB 내에 접속하는 유저들의 접속 허용등을 조절하는 파일이다.

보통 아래와 같이 OS 내에 설치하면 데이터베이스 구성 파일이외에 기본으로 구성되어있다.

 

 

그리고 이 파일을 열어보면 해당 파일에 대한 설명 및 아래의 내용이 같이 나오게 된다.

 

 

각 컬럼들의 대한 유형 및 설명을 나열해보면 이렇다.

(각 컬럼에는 다양한 값 세팅이 가능하나 실무적으로 자주 사용하는 값만 다룬다. 더 다채로운 값을 세팅하고 싶다면 위의 참조페이지 Document 를 읽으면 좋다.)

 

 

- TYPE : DB 를 접속할 사용자들의 접속 유형을 설정하는 컬럼이다.

 

local

 

호스트 OS 에 직접 접속하여 DB 를 사용하는 사용자 유형이다. Unix Socket 인증으로 PW 나 특정 설정없이 접속을 허용한다. 예를 들면 DB 접속시 psql -u postgres -W (패스워드 입력) 이 아닌 psql -h (socket 이 있는 디렉토리) 로 입력하여DB 접속이 가능하다. 보통 운영자 계정 유형으로 설정하는 경우가 많다. 

 

host

 

흔히 말하는 TCP/IP 접속, 즉 외부 IP 로 해당 DB 서버에 접근하여 DB를 사용하는 유형을 말한다. 실제 DB 를 사용 하는 유저들은 외부에서 접속하는 경우가 대다수이므로 가장 많이 설정하는 유형이다.

 

 

-  Database : 말 그대로 PostgreSQL 내부에서 구성하는 Database 의 접근 권한을 설정하는 컬럼이다.

 

all 

 

제한없이 모든 Database 영역을 사용 할 수 있다. 원래 권한상으로는 각 TYPE 에 대한 Database 를 명시하여 권한을 조절해야하지만, 이 방법은 새로운 유저가 생길 때마다 일일히 그에 대한 권한을 넣어야 하는 어려움이 있기에 실무에서는 all 로 설정하되, Database 내에서 role group 권한을 조절하여서 접속 가능한 database 권한을 조절한다.

 

 

-  User : 외부나 OS 에서 접속 시, 사용 가능한 DB 내의 생성된 유저 사용을 설정하는 컬럼이다.

 

all

 

위의 Database 와 마찬가지로 원래 접속하는 외부 및 내부 사용자들의 유형에 따라 나눠서 설정해야 하나 이또한 새로운 사용자 추가시마다 새로 추가 해야하는 번거로움이 있어서 실무적으로 DB 내에서 조절한다.

 

 

-  Address : 내부 외부에서 접속시 접속 허용을 할 IP 나 IP 대역을 조절하는 컬럼이다.

 

local 은 OS 에서 직접 사용하기 때문에 IP 대역 조절이 필요없어서 공란으로 둔다. host 는 IP/socket 으로 접속 가능한 영역을 설정한다. (Doc 을 보면 마스킹도 가능하다.) IP 를 명시할수도 있지만, 0.0.0.0/0 설정같이 모든 IP, socket 를 허용하는 방법도 있다. 회사마다 사용하는 IP 정책은 다르기 때문에 회사마다 상이한 컬럼 내용중 하나다. 

 

 

- auth-method : 외부 사용자가 접속시 인증할 인증방법을 설정하는 컬럼이다.

 

trust

 

무조건 연결을 허용하는 방법이다. 즉, 흔히 사용하는 PW 입력등이 없이 바로 접속을 가능하게 한다.

 

reject

 

무조건 연결을 거부하는 방법이다. 실무적으로 서비스 운영시 문제를 계속 일으키는 외부 사용자나 서버가 있을 시, 이의 IP 를 막아두어 문제를 일으키지 않게 하는 방법이다.

 

md5

 

클라이언트가 인증을 위해 암호화된 double-MD5-hashed 패스워드를 제공하는 방법이다. ORACLE 과 다른 점인데 ORACLE 은 패스워드의 암호화 방법중에는 SHA256 방법이 있으나, PostgreSQL 은 이 방법이 없다. 그래서 실무적으로 보안 인증등을 받을 때, 심사원들이 이러한 방법은 보안취약점으로 언급하는 경우가 있기에 이에 대한 설명을 잘 해야 한다.

 

password

 

암호화되지 않은 패스워드를 입력해야 하는 방법이다. 즉 암호화되지 않았기에 PW 가 그대로 텍스트로 노출되기에 보안 취약 위험이 있어서 보통은 위의 md5 를 사용하고, 해당 방법은 내부 테스트등으로 임시적으로 사용한다.

 

ident

 

클라이언트의 ident 서버에 접촉함으로써 클라이언트의 운영 체제 사용자 이름을 획득하고, 요청된 데이터베이스 사용자 이름과 일치하는지 확인한다. Ident 인증은 TCP/IP 연결에서만 사용할 수 있다. 로컬 연결에 대해 지정하는 경우 피어(peer) 인증이 대신 사용된다. 이 peer 인증으로 로그인 실패시에는 Log 에 Peer Authentication Failed 라는 에러 내용이 기재 되는 특징이 있다. 실무적으로는 회사마다 데이터베이스 사용자는 해당 데이터베이스명의 role 로만 사용가능 하다라는 규정이 있다면 설정되는 값이다.

 

 

 

 

이와 같은 설정이 끝나면 한번더 DB에 적용을 해야한다. DB 재기동 없이 명령어로 재 적용하는 두가지 방법이있다.

 

#OS 에서 입력

$> pg_ctl -D (데이터 영역 경로) reload

#DB 에서 입력

postgres=> select pg_reload_conf();

 

반응형
Comments