PG_HBA.conf
파일클라이언트 인증은 구성 파일에 의해 제어되며 전통적으로 명명 된pg_hba.conf
그리고 데이터토토 베이스 클러스터의 데이터 디렉토리에 저장됩니다. (HBA호스트 기반 인증을 나타냅니다.) 기본값pg_hba.conf
파일은 데이터 디렉토리가 초기화 될 때에 설치됩니다.initdb
. 그러나 인증 구성 파일을 다른 곳에 배치 할 수 있습니다. 참조hba_file구성 매개 변수.
일반적인 형식pg_hba.conf
파일은 한 줄 당 레코드 세트입니다. 빈 줄은 무시됩니다. 이후의 텍스트와 마찬가지로#
댓글 문자. 레코드는 라인에서 계속 될 수 없습니다. 레코드는 공백 및/또는 탭으로 분리되는 여러 필드로 구성됩니다. 필드 값이 두 번 인용되는 경우 필드에는 공백이 포함될 수 있습니다. 데이터토토 베이스, 사용자 또는 주소 필드에서 키워드 중 하나 인용 (예 :all
또는복제
) 단어가 특별한 의미를 잃게 만들고 해당 이름의 데이터토토 베이스, 사용자 또는 호스트와 일치합니다.
각 레코드는 연결 유형, 클라이언트 IP 주소 범위 (연결 유형과 관련된 경우), 데이터토토 베이스 이름, 사용자 이름 및 이러한 매개 변수와 일치하는 연결에 사용할 인증 방법을 지정합니다. 일치하는 연결 유형, 클라이언트 주소, 요청 된 데이터토토 베이스 및 사용자 이름을 가진 첫 번째 레코드는 인증을 수행하는 데 사용됩니다. 없음“Fall-Strough”또는“백업”: 한 레코드가 선택되고 인증이 실패하면 후속 레코드가 고려되지 않습니다. 기록이 일치하지 않으면 액세스가 거부됩니다.
레코드는 7 가지 형식 중 하나를 가질 수 있습니다
local데이터토토 베이스
사용자
Auth-Method
[Auth-options
] 주인데이터토토 베이스
사용자
주소
Auth-Method
[Auth-options
] 호스트데이터토토 베이스
사용자
주소
Auth-Method
[Auth-options
] hostnossl데이터토토 베이스
사용자
주소
Auth-Method
[Auth-options
] 주인데이터토토 베이스
사용자
ip-address
IP 마스크
Auth-Method
[Auth-options
] 호스트데이터토토 베이스
사용자
ip-address
IP 마스크
Auth-Method
[Auth-options
] hostnossl데이터토토 베이스
사용자
ip-address
IP 마스크
Auth-Method
[Auth-options
]
필드의 의미는 다음과 같습니다.
Local
이 레코드는 Unix-Domain 소켓을 사용한 연결 시도와 일치합니다. 이 유형에 대한 기록이 없으면 유닉스 도메인 소켓 연결이 허용되지 않습니다.
host
이 레코드는 TCP/IP를 사용하여 만든 연결 시도와 일치합니다.host
레코드 일치 중 하나SSL또는 비SSL연결 시도.
원격 TCP/IP 연결은 서버에 적절한 값으로 시작되지 않으면Listen_Addresses구성 매개 변수, 기본 동작은 로컬 루프백 주소에서만 TCP/IP 연결을 듣는 것이므로LocalHost
.
hostssl
이 레코드는 TCP/IP를 사용하는 연결 시도와 일치하지만 연결이 이루어질 때만SSL암호화.
이 옵션을 사용하려면 서버를 구축해야합니다.SSL지원. 뿐만 아니라,SSL를 설정하여 활성화해야합니다SSL구성 매개 변수 (참조스포츠 토토 PostgreSQL : 문서 : 10 : 18.9. SSL로 TCP/IP 연결 보안자세한 내용은). 그렇지 않으면hostssl
연결이 일치 할 수 없다는 경고를 기록하는 것을 제외하고 기록은 무시됩니다.
hostnossl
이 레코드 유형은 반대 동작이입니다.hostssl
; 사용하지 않는 TCP/IP에 대한 연결 시도와 일치합니다SSL.
데이터토토 베이스
이 레코드가 일치하는 데이터토토 베이스 이름을 지정합니다. 값all
모든 데이터토토 베이스와 일치하도록 지정합니다. 값Sameuser
요청 된 데이터토토 베이스가 요청 된 사용자와 동일한 이름을 갖는 경우 레코드가 일치하도록 지정합니다. 값Samerole
요청 된 사용자가 요청 된 데이터토토 베이스와 동일한 이름을 가진 역할의 구성원이어야하도록 지정합니다. (SameGroup
쓸모 없지만 여전히 허용되는 철자Samerole
.) 슈퍼 사용자는의 목적 상 역할의 구성원으로 간주되지 않습니다.Samerole
슈퍼 유행자가 아니라 직간접 적으로 역할의 명시 적 회원이 아니라면. 값복제
물리적 복제 연결이 요청되면 레코드가 일치하도록 지정합니다 (복제 연결은 특정 데이터토토 베이스를 지정하지 않음). 그렇지 않으면 이것은 특정 이름입니다PostgreSQL데이터토토 베이스. 여러 데이터토토 베이스 이름은 쉼표로 분리하여 제공 할 수 있습니다. 데이터토토 베이스 이름을 포함하는 별도의 파일은 파일 이름이 선행하여 지정할 수 있습니다.@
.
사용자
이 레코드가 일치하는 데이터토토 베이스 사용자 이름을 지정합니다. 값all
모든 사용자와 일치하도록 지정합니다. 그렇지 않으면 이것은 특정 데이터토토 베이스 사용자의 이름이거나 그룹 이름이입니다.+
. (사용자와 그룹 사이에 실질적인 차이가 없다는 것을 기억하십시오PostgreSQL; 에이+
마크는 정말 의미“이 역할의 직접 또는 간접적으로 구성원 인 역할과 일치”+
Mark는 해당 특정 역할 만 일치합니다.)이 목적을 위해, 슈퍼업자는 슈퍼 사용자가되는 것이 아니라 직간접 적으로 직접 또는 간접적으로 역할의 구성원 인 경우에만 역할의 구성원으로 간주됩니다. 여러 사용자 이름은 쉼표로 분리하여 제공 할 수 있습니다. 사용자 이름을 포함하는 별도의 파일은 파일 이름이 선행하여 지정할 수 있습니다.@
.
주소
이 레코드가 일치하는 클라이언트 머신 주소 (ES)를 지정합니다. 이 필드는 호스트 이름, IP 주소 범위 또는 아래에 언급 된 특수 키 단어 중 하나를 포함 할 수 있습니다.
IP 주소 범위는 범위의 시작 주소에 대한 표준 숫자 표기법을 사용하여 지정된 다음 슬래시 (입니다./
) 및 ACIDR마스크 길이. 마스크 길이는 일치 해야하는 클라이언트 IP 주소의 고차 비트 수를 나타냅니다. 오른쪽의 비트는 주어진 IP 주소에서 0이어야합니다. IP 주소 사이에 공백이 없어야합니다./
및 CIDR 마스크 길이.
IPv4 주소 범위의 일반적인 예는이 방법으로 지정됩니다172.20.143.89/32
단일 호스트의 경우172.20.143.0/24
소규모 네트워크 또는10.6.0.0/16
더 큰 것. IPv6 주소 범위는처럼 보일 수 있습니다.::1/128
단일 호스트 (이 경우 IPv6 루프백 주소) 또는.Fe80 :: 7A31 : C1FF : 0000 : 0000/96
소규모 네트워크의 경우0.0.0.0/0
모든 IPv4 주소를 나타내고::0/0
모든 IPv6 주소를 나타냅니다. 단일 호스트를 지정하려면 IPv4의 경우 32의 마스크 길이 또는 IPv6의 경우 128을 사용하십시오. 네트워크 주소에서는 후행 제로를 생략하지 마십시오.
IPv4 형식으로 제공되는 항목은 IPv4 연결 만 일치하며 IPv6 형식으로 제공되는 항목은 IPv4-in-IPV6 범위에 있더라도 IPv6 형식으로 제공되는 항목은 IPv6 연결 만 일치합니다. 시스템의 C 라이브러리에 IPv6 주소를 지원하지 않으면 IPv6 형식의 항목이 거부됩니다.
당신도 쓸 수 있습니다all
IP 주소와 일치하려면Samehost
서버의 자체 IP 주소와 일치하거나Samenet
서버가 직접 연결되어있는 서브넷의 모든 주소와 일치합니다.
호스트 이름이 지정된 경우 (IP 주소 범위가 아니거나 특수 키 단어가 호스트 이름으로 취급되는 경우) 해당 이름은 클라이언트 IP 주소의 반대 이름 해상도 (예 : DNS 조회, DNS가 사용되는 경우)의 결과와 비교됩니다. 호스트 이름 비교는 사례 둔감합니다. 일치가있는 경우, 전방 이름 해상도 (예 : 전방 DNS 조회)가 호스트 이름으로 수행되어 해결되는 주소가 클라이언트의 IP 주소와 동일 여부를 확인합니다. 두 방향이 일치하면 항목이 일치하는 것으로 간주됩니다. (에서 사용되는 호스트 이름pg_hba.conf
클라이언트의 IP 주소가 반환하는 주소 간 해상도가 필요합니다. 그렇지 않으면 줄이 일치하지 않습니다. 일부 호스트 이름 데이터토토 베이스는 여러 호스트 이름과 IP 주소를 연관시킬 수 있지만 운영 체제는 IP 주소를 해결하도록 요청할 때만 하나의 호스트 이름 만 반환합니다.)
dot (로 시작하는 호스트 이름 사양.
)는 실제 호스트 이름의 접미사와 일치합니다. 그래서.example.com
일치foo.example.com
(하지만example.com
).
호스트 이름이 지정된 경우pg_hba.conf
, 이름 해상도가 합리적으로 빠르지 않도록해야합니다. 와 같은 로컬 이름 해상도 캐시를 설정하는 것이 유리할 수 있습니다.NSCD
. 또한 구성 매개 변수를 활성화 할 수 있습니다log_hostname
로그에서 IP 주소 대신 클라이언트의 호스트 이름을 보려면
이 필드는에만 적용됩니다.host
, hostssl
및hostnossl
기록.
사용자는 때때로 클라이언트 IP 주소의 역방향 조회를 포함하여 두 가지 이름 해상도와 함께 호스트 이름이 왜 복잡한 방식으로 처리되는지 궁금합니다. 클라이언트의 역 DNS 항목이 설정되지 않았거나 바람직하지 않은 호스트 이름을 생산하는 경우 기능의 사용을 복잡하게 만듭니다. 주로 효율성을 위해 이루어집니다.이 방법으로, 연결 시도는 최대 2 개의 리졸버 조회, 1 개의 리버스 및 1 개의 전진이 필요합니다. 일부 주소에 리졸버 문제가있는 경우 해당 클라이언트의 문제 만됩니다. 앞으로 조회 만 한 가상의 대안 구현은에 언급 된 모든 호스트 이름을 해결해야 할 것입니다.pg_hba.conf
모든 연결 시도 중. 많은 이름이 나열되면 상당히 느릴 수 있습니다. 그리고 호스트 이름 중 하나에 리졸버 문제가 있으면 모든 사람의 문제가됩니다.
또한 접미사 일치 기능을 구현하려면 역방향 조회가 필요합니다. 실제 클라이언트 호스트 이름을 패턴과 일치시키기 위해서는 알려야하기 때문입니다..
이 동작은 Apache HTTP 서버 및 TCP 래퍼와 같은 호스트 이름 기반 액세스 제어의 다른 인기있는 구현과 일치합니다.
ip-address
IP 마스크
이 두 필드는 대안으로 사용될 수 있습니다.ip-address
/
마스크 길이
표기법. 마스크 길이를 지정하는 대신 실제 마스크는 별도의 열에 지정됩니다. 예를 들어,255.0.0.0
IPv4 CIDR 마스크 길이는 8을 나타냅니다.255.255.255.255
32의 CIDR 마스크 길이를 나타냅니다.
이 필드는에만 적용됩니다호스트
, hostssl
및hostnossl
레코드
Auth-Method
연결 이이 레코드와 일치 할 때 사용할 인증 방법을 지정합니다. 가능한 선택은 여기에 요약되어 있습니다. 세부 사항은섹션 20.3. 모든 옵션은 소문자 및 처리 된 사례가 민감하게 이루어 지므로와 같은 약어조차도LDAP
소문자로 지정해야합니다.
신뢰
무조건 연결을 허용합니다. 이 방법은에 연결할 수있는 모든 사람을 허용합니다.PostgreSQL데이터토토 베이스 서버로 로그인 할 수 있습니다PostgreSQL비밀번호 나 기타 인증없이 원하는 사용자. 보다섹션 20.3.1자세한 내용.
거부
무조건 연결을 거부하십시오. 이것은에 유용합니다“필터링”예를 들어 그룹의 특정 호스트, 예를 들어거부
라인은 특정 호스트가 연결을 차단할 수 있지만, 이후 줄은 특정 네트워크의 나머지 호스트가 연결할 수 있도록합니다.
Scram-Sha-256
Scram-SHA-256 인증을 수행하여 사용자의 비밀번호를 확인하십시오. 보다섹션 20.3.2자세한 내용.
MD5
Scram-SHA-256 또는 MD5 인증을 수행하여 사용자의 비밀번호를 확인하십시오. 보다섹션 20.3.2자세한 내용.
비밀번호
클라이언트가 인증을 위해 암호화되지 않은 암호를 제공하도록 요구합니다. 비밀번호는 네트워크를 통해 명확한 텍스트로 전송되므로 신뢰할 수없는 네트워크에서 사용해서는 안됩니다. 보다섹션 20.3.2자세한 내용.
gss
GSSAPI를 사용하여 사용자를 인증합니다. 이것은 TCP/IP 연결에만 사용할 수 있습니다. 보다섹션 20.3.3자세한 내용.
SSPI
SSPI를 사용하여 사용자를 인증합니다. 이것은 Windows에서만 사용할 수 있습니다. 보다섹션 20.3.4자세한 내용.
ID
클라이언트의 ID 서버에 연락하여 클라이언트의 운영 체제 사용자 이름을 얻고 요청 된 데이터토토 베이스 사용자 이름과 일치하는지 확인하십시오. ID 인증은 TCP/IP 연결에서만 사용할 수 있습니다. 로컬 연결에 지정되면 대신 피어 인증이 사용됩니다. 보다섹션 20.3.5자세한 내용.
피어
운영 체제에서 클라이언트 운영 체제 사용자 이름을 얻고 요청 된 데이터토토 베이스 사용자 이름과 일치하는지 확인하십시오. 이것은 로컬 연결에만 사용할 수 있습니다. 보다섹션 20.3.6자세한 내용.
LDAP
AN을 사용하여 인증LDAP서버. 보다섹션 20.3.7자세한 내용.
반경
RADIUS 서버를 사용하여 인증. 보다섹션 20.3.8자세한 내용.
cert
SSL 클라이언트 인증서를 사용하여 인증. 보다섹션 20.3.9자세한 내용.
PAM
운영 체제가 제공하는 PAM (Pluggable Authentication Modules) 서비스를 사용하여 인증. 보다섹션 20.3.10자세한 내용.
BSD
운영 체제가 제공하는 BSD 인증 서비스를 사용하여 인증. 보다섹션 20.3.11자세한 내용.
Auth-Options
이후Auth-Method
필드, 양식의 필드가있을 수 있습니다이름
=
value
인증 방법에 대한 옵션을 지정합니다. 어떤 인증 방법이 아래에 표시되는지에 대한 세부 정보.
아래에 나열된 메소드 별 옵션 외에도 하나의 메소드 독립적 인증 옵션이 있습니다.ClientCert
.hostssl
레코드. 로 설정된 경우1
,이 옵션은 클라이언트가 인증 방법의 다른 요구 사항 외에도 유효한 (신뢰할 수있는) SSL 인증서를 제시해야합니다.
파일 포함@
구조물은 이름 목록으로 읽히고, 공백 또는 쉼표로 분리 할 수 있습니다. 댓글은에 의해 소개됩니다.#
pg_hba.conf
및 중첩@
구성이 허용됩니다. 파일 이름을 따르는 경우@
절대적인 경로이며, 참조 파일을 포함하는 디렉토리와 관련이 있습니다.
이후PG_HBA.conf
레코드는 각 연결 시도에 대해 순차적으로 검사됩니다. 레코드의 순서는 중요합니다. 일반적으로 이전 레코드는 긴밀한 연결 일치 매개 변수와 약한 인증 방법을 갖는 반면, 나중에 레코드에는 느슨한 일치 매개 변수와 더 강력한 인증 방법이 있습니다. 예를 들어, 사용하고 싶을 수도 있습니다신뢰
로컬 TCP/IP 연결에 대한 인증이지만 원격 TCP/IP 연결에는 비밀번호가 필요합니다. 이 경우 레코드를 지정신뢰
127.0.0.1의 연결에 대한 인증은 더 넓은 범위의 허용 클라이언트 IP 주소에 대한 비밀번호 인증을 지정하기 전에 나타납니다..
thepg_hba.conf
파일은 시작시 및 기본 서버 프로세스가 a를 읽을 때 읽습니다.Sighup신호. 활성 시스템에서 파일을 편집하면 우체국 장에 신호를 보내야합니다 (사용PG_CTL Reload
, SQL 기능 호출pg_reload_conf ()
또는 사용Kill -hup
) 파일을 다시 읽게하려면
앞의 진술은 Microsoft Windows에서 사실이 아닙니다.pg_hba.conf
파일은 후속 새 연결에 의해 즉시 적용됩니다.
시스템보기PG_HBA_FILE_RULES
사전 테스트 변경에 도움이 될 수 있습니다pg_hba.conf
파일 또는 파일로드에 원하는 효과가없는 경우 문제를 진단합니다. 널이없는 관점에서 줄오류
필드는 파일의 해당 줄에 문제를 나타냅니다.
특정 데이터토토 베이스에 연결하려면 사용자가 전달할뿐만 아니라pg_hba.conf
수표이지만가 있어야합니다.Connect
데이터토토 베이스의 권한. 어떤 데이터토토 베이스를 연결할 수 있는지 제한하려면 일반적으로 부여/취소를 통해이를 제어하는 것이 더 쉽습니다Connect
규칙을 넣는 것보다pg_hba.conf
항목.
의 일부 예pg_hba.conf
항목이 표시됩니다예 20.1. 다른 인증 방법에 대한 자세한 내용은 다음 섹션을 참조하십시오.
예 20.1. 예pg_hba.conf
Entries
# 로컬 시스템의 모든 사용자가 모든 데이터토토 베이스에 연결하도록 허용합니다. # Unix-Domain 소켓을 사용하는 모든 데이터토토 베이스 사용자 이름 (로컬의 기본값 # 연결). 틀 # 데이터토토 베이스 사용자 주소 방법을 입력합니다 모든 신뢰 # 로컬 루프백 TCP/IP 연결을 사용하여 동일합니다. 틀 # 데이터토토 베이스 사용자 주소 방법을 입력합니다 모든 127.0.0.1/32 신탁을 모두 호스트하십시오 # 이전 줄과 동일하지만 별도의 Netmask 열을 사용합니다. 틀 # 데이터토토 베이스 유형 사용자 IP-Dress IP-MASK 메소드 모든 127.0.0.1 255.255.255.255 신탁을 모두 호스트하십시오 # IPv6과 동일합니다. 틀 # 데이터토토 베이스 사용자 주소 방법을 입력합니다 모든 것을 호스트하십시오 :: 1/128 신뢰 # 호스트 이름을 사용하여 동일합니다 (일반적으로 IPv4와 IPv6을 모두 포함합니다). 틀 # 데이터토토 베이스 사용자 주소 방법을 입력합니다 모든 LocalHost 신탁을 모두 호스트하십시오 # IP 주소가있는 호스트의 모든 사용자가 192.168.93.x를 연결하도록 허용합니다. # "postgres"로 # 보고서를 확인하는 동일한 사용자 이름과 # 연결 (일반적으로 운영 체제 사용자 이름). 틀 # 데이터토토 베이스 사용자 주소 방법을 입력합니다 호스트 Postgres 모든 192.168.93.0/24 ID # Host 192.168.12.10의 모든 사용자가 데이터토토 베이스에 연결하도록 허용합니다. # "Postgres"사용자의 암호가 올바르게 제공되는 경우. 틀 # 데이터토토 베이스 사용자 주소 방법을 입력합니다 호스트 Postgres 모든 192.168.12.10/32 SCRAM-SHA-256 # example.com 도메인의 호스트의 모든 사용자가 연결하도록 허용합니다. # 사용자의 암호가 올바르게 제공되는 경우 모든 데이터토토 베이스. 틀 # 대부분의 사용자에게는 SCRAM 인증이 필요하지만 예외를 만드십시오. # SCRAM을 지원하지 않는 이전 클라이언트를 사용하는 사용자 'Mike'의 경우 # 인증. 틀 # 데이터토토 베이스 사용자 주소 방법을 입력합니다 모든 mike .example.com md5 호스트 모든 all .example.com Scram-SHA-256을 호스트하십시오 # 앞의 "호스트"라인이없는 경우이 두 줄은 # 192.168.54.1에서 모든 연결을 거부합니다 (그 항목은 # 먼저 일치하지만 다른 곳에서 GSSAPI 연결을 허용합니다. # 인터넷에서. 제로 마스크는 호스트 IP의 비트를 유발하지 않습니다. # 주소를 고려할 주소는 모든 호스트와 일치합니다. 틀 # 데이터토토 베이스 사용자 주소 방법을 입력합니다 모든 192.168.54.1/32 모두 거부하십시오 모든 0.0.0.0/0 GSS를 모두 호스트하십시오 # 192.168.x.x 사용자가 데이터토토 베이스에 연결할 수 있도록 허용합니다. # 그들은 신원 확인을 통과합니다. 예를 들어 Ident가 사용자가 있다고 말하면 # "Bryanh"및 그는 PostgreSQL 사용자 "Guest1"으로 연결하도록 요청합니다. # MAP의 PG_INDENT.CONF 항목이 있으면 연결이 허용됩니다. # "Bryanh"라는 "Omicron"은 "Guest1"으로 연결할 수 있습니다. 틀 # 데이터토토 베이스 사용자 주소 방법을 입력합니다 모든 192.168.0.0/16 모두를 호스트합니다. ID MAP = OMICRON # 이것이 로컬 연결을위한 유일한 세 줄인 경우 # 로컬 사용자가 자신의 데이터토토 베이스 (데이터토토 베이스)에만 연결하도록 허용합니다. # 데이터토토 베이스 사용자 이름과 동일한 이름을 가진) 관리자를 제외하고 # 및 모든 데이터토토 베이스에 연결할 수있는 역할 "지원"멤버. 파일 # $ pgdata/Admins에는 관리자 이름 목록이 포함되어 있습니다. 비밀번호 # 모든 경우에 필요합니다. 틀 # 데이터토토 베이스 사용자 주소 방법을 입력합니다 로컬 동일한 사람 모두 MD5 로컬 모든 @admins md5 로컬 all +지원 MD5 # 위의 마지막 두 줄은 한 줄로 결합 할 수 있습니다. Local All @Admins,+지원 MD5 # 데이터토토 베이스 열은 목록 및 파일 이름도 사용할 수도 있습니다. 로컬 db1, db2,@demodbs all md5