pg_hba.conf파일클라이언트 인증은 전통적으로 이름이 지정된 구성 파일에 의해 제어됩니다.pg_hba.conf그리고 데이터토토 베이스 클러스터의 데이터 디렉터리에 저장됩니다. (HBA호스트 기반 인증을 나타냅니다.) 기본값pg_hba.conf파일은 다음에 의해 데이터 디렉토리가 초기화될 때 설치됩니다.initdb. 그러나 인증 구성 파일을 다른 곳에 배치할 수도 있습니다. 참조하세요hba_file구성 매개변수.
일반 형식pg_hba.conf파일은 한 줄에 하나씩 있는 레코드 집합입니다. 빈 줄은 무시되며, 다음의 모든 텍스트도 무시됩니다.#댓글 문자. 레코드는 여러 줄에 걸쳐 계속될 수 없습니다. 레코드는 공백 및/또는 탭으로 구분된 여러 필드로 구성됩니다. 필드 값이 큰따옴표로 묶인 경우 필드에 공백이 포함될 수 있습니다. 데이터토토 베이스, 사용자 또는 주소 필드의 키워드 중 하나 인용(예:전체또는복제)는 단어가 특별한 의미를 잃게 만들고 데이터토토 베이스, 사용자 또는 호스트를 해당 이름과 일치시킵니다.
각 레코드는 연결 유형, 클라이언트 IP 주소 범위(연결 유형과 관련된 경우), 데이터토토 베이스 이름, 사용자 이름 및 이러한 매개변수와 일치하는 연결에 사용할 인증 방법을 지정합니다. 연결 유형, 클라이언트 주소, 요청된 데이터토토 베이스 및 사용자 이름이 일치하는 첫 번째 레코드가 인증을 수행하는 데 사용됩니다. 없습니다“폭락”또는“백업”: 하나의 레코드를 선택하고 인증에 실패하면 후속 레코드는 고려되지 않습니다. 일치하는 기록이 없으면 접근이 거부됩니다.
기록은 7가지 형식 중 하나를 가질 수 있습니다.
현지데이터토토 베이스사용자인증 방법[인증 옵션] 호스트데이터토토 베이스사용자주소인증 방법[인증 옵션] 호스트sl데이터토토 베이스사용자주소인증 방법[인증 옵션] 호스트노슬데이터토토 베이스사용자주소인증 방법[인증 옵션] 호스트데이터토토 베이스사용자IP-주소IP-마스크인증 방법[인증 옵션] 호스트sl데이터토토 베이스사용자IP-주소IP-마스크인증 방법[인증 옵션] 호스트노슬데이터토토 베이스사용자IP-주소IP-마스크인증 방법[인증 옵션]
필드의 의미는 다음과 같습니다:
현지이 기록은 Unix 도메인 소켓을 사용한 연결 시도와 일치합니다. 이 유형의 레코드가 없으면 Unix 도메인 소켓 연결이 허용되지 않습니다.
호스트이 기록은 TCP/IP를 사용한 연결 시도와 일치합니다.호스트기록이 둘 중 하나와 일치함SSL또는 비-SSL연결 시도.
서버가 적절한 값으로 시작되지 않으면 원격 TCP/IP 연결이 불가능합니다.listen_addresses구성 매개변수, 기본 동작은 로컬 루프백 주소에서만 TCP/IP 연결을 수신하는 것이므로로컬호스트.
hostssl이 레코드는 TCP/IP를 사용하여 이루어진 연결 시도와 일치하지만 연결이 이루어진 경우에만SSL암호화.
이 옵션을 사용하려면 서버를 다음으로 구축해야 합니다.SSL지원합니다. 게다가SSL다음을 설정하여 활성화해야 합니다.ssl구성 매개변수(참조스포츠 토토 PostgreSQL : 문서 : 10 : 18.9. SSL로 TCP/IP 연결 보안자세한 내용은). 그렇지 않으면,hostssl어떤 연결과도 일치할 수 없다는 경고를 기록하는 것을 제외하고는 레코드가 무시됩니다.
hostnossl이 레코드 유형은 다음과 반대 동작을 갖습니다.hostssl; 사용하지 않는 TCP/IP를 통한 연결 시도만 일치합니다.SSL.
데이터토토 베이스이 레코드가 일치하는 데이터토토 베이스 이름을 지정합니다. 값모두모든 데이터토토 베이스와 일치함을 지정합니다. 값동일사용자요청된 데이터토토 베이스의 이름이 요청된 사용자와 동일한 경우 레코드가 일치하도록 지정합니다. 값사메롤요청한 사용자가 요청된 데이터토토 베이스와 동일한 이름을 가진 역할의 구성원이어야 함을 지정합니다. (동일그룹은 오래되었지만 여전히 허용되는 철자법입니다.사메롤.) 수퍼유저는 다음 목적을 위해 역할의 구성원으로 간주되지 않습니다.사메롤단순히 수퍼유저라는 이유만으로 직접 또는 간접적으로 역할의 구성원이 아닌 경우는 제외됩니다. 값복제물리적 복제 연결이 요청되면 레코드가 일치하도록 지정합니다(복제 연결은 특정 데이터토토 베이스를 지정하지 않습니다). 그렇지 않으면 이는 특정의 이름입니다.PostgreSQL데이터토토 베이스. 여러 데이터토토 베이스 이름을 쉼표로 구분하여 제공할 수 있습니다. 데이터토토 베이스 이름을 포함하는 별도의 파일은 파일 이름 앞에를 붙여 지정할 수 있습니다.@.
사용자이 레코드가 일치하는 데이터토토 베이스 사용자 이름을 지정합니다. 값전체모든 사용자와 일치함을 지정합니다. 그렇지 않은 경우 이는 특정 데이터토토 베이스 사용자의 이름이거나 앞에 가 붙은 그룹 이름입니다.+. (사용자와 그룹 사이에는 실제적인 구별이 없다는 점을 기억하십시오.PostgreSQL; 에+마크는 정말 의미가 있습니다“직간접적으로 이 역할의 구성원인 역할과 일치”, a가 없는 이름은+표시는 해당 특정 역할에만 일치합니다.) 이 목적을 위해 수퍼유저는 단지 수퍼유저라는 이유만으로가 아니라 직간접적으로 명시적으로 역할의 구성원인 경우에만 역할의 구성원으로 간주됩니다. 여러 사용자 이름을 쉼표로 구분하여 제공할 수 있습니다. 사용자 이름이 포함된 별도의 파일은 파일 이름 앞에를 붙여 지정할 수 있습니다.@.
주소이 레코드와 일치하는 클라이언트 시스템 주소를 지정합니다. 이 필드에는 호스트 이름, 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의 마스크 길이를 사용하십시오. 네트워크 주소에서 뒤에 오는 0을 생략하지 마십시오.
IPv4 형식으로 제공된 항목은 IPv4 연결에만 일치하며 IPv6 형식으로 제공된 항목은 IPv6 연결에만 일치합니다. 표시된 주소가 IPv4-in-IPv6 범위에 있더라도 마찬가지입니다. 시스템의 C 라이브러리가 IPv6 주소를 지원하지 않으면 IPv6 형식의 항목이 거부됩니다.
당신도 쓸 수 있습니다모두모든 IP 주소와 일치하도록,동일호스트서버의 자체 IP 주소와 일치시키거나사메넷서버가 직접 연결된 모든 서브넷의 모든 주소와 일치합니다.
호스트 이름이 지정되면(IP 주소 범위가 아니거나 특수 키워드가 호스트 이름으로 처리됨), 해당 이름은 클라이언트 IP 주소의 역방향 이름 확인 결과와 비교됩니다(예: DNS가 사용되는 경우 역방향 DNS 조회). 호스트 이름 비교에서는 대소문자를 구분하지 않습니다. 일치하는 항목이 있으면 호스트 이름에 대해 정방향 이름 확인(예: 정방향 DNS 조회)이 수행되어 확인된 주소가 클라이언트의 IP 주소와 동일한지 확인합니다. 두 방향이 모두 일치하면 항목이 일치하는 것으로 간주됩니다. (사용되는 호스트 이름pg_hba.conf클라이언트 IP 주소의 주소 대 이름 확인이 반환되는 것이어야 합니다. 그렇지 않으면 행이 일치하지 않습니다. 일부 호스트 이름 데이터토토 베이스에서는 IP 주소를 여러 호스트 이름과 연결하는 것을 허용하지만 운영 체제는 IP 주소 확인을 요청하는 경우 하나의 호스트 이름만 반환합니다.)
점으로 시작하는 호스트 이름 지정(.)는 실제 호스트 이름의 접미사와 일치합니다. 그래서.example.com일치할 것임foo.example.com(그러나 단지가 아님example.com).
호스트 이름이 다음에 지정된 경우pg_hba.conf, 이름 확인이 상당히 빠른지 확인해야 합니다. 다음과 같은 로컬 이름 확인 캐시를 설정하는 것이 유리할 수 있습니다.nscd. 또한 구성 매개변수를 활성화할 수도 있습니다.로그_호스트 이름로그의 IP 주소 대신 클라이언트의 호스트 이름을 보려면.
이 필드는 다음에만 적용됩니다.호스트, hostssl및hostnossl기록.
사용자는 때때로 호스트 이름이 클라이언트 IP 주소의 역방향 조회를 포함하는 두 가지 이름 확인을 통해 겉보기에 복잡한 방식으로 처리되는 이유를 궁금해합니다. 이로 인해 클라이언트의 역방향 DNS 항목이 설정되지 않거나 바람직하지 않은 호스트 이름이 생성되는 경우 기능 사용이 복잡해집니다. 이는 주로 효율성을 위해 수행됩니다. 이러한 방식으로 연결 시도에는 최대 두 개의 확인자 조회(역방향 및 정방향 각각 하나씩)가 필요합니다. 일부 주소에 해결 프로그램 문제가 있는 경우 해당 클라이언트의 문제만 됩니다. 정방향 조회만 수행하는 가상의 대체 구현에서는 언급된 모든 호스트 이름을 확인해야 합니다.pg_hba.conf모든 연결 시도 동안. 많은 이름이 나열되면 속도가 상당히 느려질 수 있습니다. 그리고 호스트 이름 중 하나에 해결 프로그램 문제가 있으면 모든 사람의 문제가 됩니다.
또한 접미사 일치 기능을 구현하려면 역방향 조회가 필요합니다. 패턴과 일치하려면 실제 클라이언트 호스트 이름을 알아야 하기 때문입니다.
이 동작은 Apache HTTP 서버 및 TCP 래퍼와 같은 호스트 이름 기반 액세스 제어의 다른 널리 사용되는 구현과 일치합니다.
IP-주소IP-마스크이 두 필드는 다음 대신 사용할 수 있습니다.IP-주소/마스크 길이표기법. 마스크 길이를 지정하는 대신 실제 마스크가 별도의 열에 지정됩니다. 예를 들어,255.0.0.0는 IPv4 CIDR 마스크 길이 8을 나타냅니다.255.255.255.255CIDR 마스크 길이 32를 나타냅니다.
이 필드는 다음에만 적용됩니다.호스트, hostssl및hostnossl기록.
인증 방법연결이 이 레코드와 일치할 때 사용할 인증 방법을 지정합니다. 가능한 선택 사항은 여기에 요약되어 있습니다. 자세한 내용은 다음을 참조하세요.섹션 20.3. 모든 옵션은 소문자이며 대소문자를 구분하여 처리됩니다. 따라서 다음과 같은 약어도 마찬가지입니다.ldap소문자로 지정해야 합니다.
신뢰무조건 연결을 허용합니다. 이 방법을 사용하면 누구나 연결할 수 있습니다.포스트그레SQL데이터토토 베이스 서버로 로그인 가능PostgreSQL암호나 다른 인증이 필요 없이 원하는 사용자입니다. 참조섹션 20.3.1자세한 내용은.
거부무조건 연결을 거부합니다. 이것은 다음과 같은 경우에 유용합니다.“필터링 중”그룹의 특정 호스트(예: a거부라인은 특정 호스트의 연결을 차단할 수 있지만 이후 라인은 특정 네트워크의 나머지 호스트 연결을 허용합니다.
스크램-샤-256SCRAM-SHA-256 인증을 수행하여 사용자 비밀번호를 확인하세요. 참조섹션 20.3.2자세한 내용은.
md5SCRAM-SHA-256 또는 MD5 인증을 수행하여 사용자 비밀번호를 확인하세요. 참조섹션 20.3.2자세한 내용은.
비밀번호클라이언트가 인증을 위해 암호화되지 않은 비밀번호를 제공하도록 요구합니다. 비밀번호는 네트워크를 통해 일반 텍스트로 전송되므로 신뢰할 수 없는 네트워크에서는 사용하면 안 됩니다. 참조섹션 20.3.2자세한 내용은.
gssGSSAPI를 사용하여 사용자를 인증하세요. 이는 TCP/IP 연결에만 사용할 수 있습니다. 참조섹션 20.3.3자세한 내용은.
sspiSSPI를 사용하여 사용자를 인증하세요. 이 기능은 Windows에서만 사용할 수 있습니다. 참조섹션 20.3.4자세한 내용은.
ident클라이언트의 ident 서버에 접속하여 클라이언트의 운영 체제 사용자 이름을 얻고 요청된 데이터토토 베이스 사용자 이름과 일치하는지 확인하십시오. ID 인증은 TCP/IP 연결에서만 사용할 수 있습니다. 로컬 연결에 대해 지정된 경우 피어 인증이 대신 사용됩니다. 참조섹션 20.3.5자세한 내용은.
동료운영 체제에서 클라이언트의 운영 체제 사용자 이름을 얻고 요청된 데이터토토 베이스 사용자 이름과 일치하는지 확인하십시오. 로컬 연결에만 사용할 수 있습니다. 참조섹션 20.3.6자세한 내용은.
ldap다음을 사용하여 인증LDAP서버. 참조섹션 20.3.7자세한 내용은.
반경RADIUS 서버를 사용하여 인증하세요. 참조섹션 20.3.8자세한 내용은.
인증서SSL 클라이언트 인증서를 사용하여 인증합니다. 참조섹션 20.3.9자세한 내용은.
팸운영 체제에서 제공하는 PAM(Pluggable Authentication Modules) 서비스를 사용하여 인증합니다. 참조섹션 20.3.10자세한 내용은.
bsd운영 체제에서 제공하는 BSD 인증 서비스를 사용하여 인증합니다. 참조섹션 20.3.11자세한 내용은.
인증 옵션이후인증 방법필드, 다음 형식의 필드가 있을 수 있습니다.이름=값인증 방법에 대한 옵션을 지정합니다. 아래에는 인증 방법에 따라 사용할 수 있는 옵션에 대한 세부정보가 나와 있습니다.
아래 나열된 방법별 옵션 외에도 방법 독립적인 인증 옵션이 하나 있습니다.클라이언트인증서, 임의의 형식으로 지정할 수 있습니다.hostssl기록. 으로 설정된 경우1, 이 옵션을 사용하려면 인증 방법의 다른 요구 사항 외에도 클라이언트가 유효한(신뢰할 수 있는) SSL 인증서를 제시해야 합니다.
다음에 포함된 파일@구조물은 공백이나 쉼표로 구분할 수 있는 이름 목록으로 읽혀집니다. 댓글은 다음으로 소개됩니다.#, 마찬가지로pg_hba.conf및 중첩@구조가 허용됩니다. 다음 파일 이름이 아닌 경우@은 절대 경로이며 참조 파일이 포함된 디렉터리에 대한 상대 경로로 간주됩니다.
이후pg_hba.conf레코드는 각 연결 시도에 대해 순차적으로 검사되며 레코드의 순서가 중요합니다. 일반적으로 이전 레코드에는 엄격한 연결 일치 매개변수와 약한 인증 방법이 있는 반면, 이후 레코드에는 느슨한 일치 매개변수와 더 강력한 인증 방법이 있습니다. 예를 들어 다음을 사용하고 싶을 수도 있습니다.신뢰로컬 TCP/IP 연결에 대한 인증이 필요하지만 원격 TCP/IP 연결에는 비밀번호가 필요합니다. 이 경우에는 다음을 지정하는 레코드입니다.신뢰127.0.0.1의 연결에 대한 인증은 더 넓은 범위의 허용된 클라이언트 IP 주소에 대한 비밀번호 인증을 지정하는 레코드 앞에 나타납니다.
그pg_hba.conf파일은 시작 시 그리고 주 서버 프로세스가 수신할 때 읽혀집니다.SIGHUP신호. 활성 시스템에서 파일을 편집하는 경우 포스트마스터에게 신호를 보내야 합니다(pg_ctl 다시 로드, SQL 함수 호출pg_reload_conf()또는 다음을 사용하여죽여 -HUP) 파일을 다시 읽도록 합니다.
앞의 설명은 Microsoft Windows에서는 사실이 아닙니다. 다음 내용에 변경 사항이 있습니다.pg_hba.conf파일은 후속 새 연결에 의해 즉시 적용됩니다.
시스템 보기pg_hba_file_rules변경사항을 사전 테스트하는 데 도움이 될 수 있습니다.pg_hba.conf파일, 또는 파일 로드가 원하는 효과를 얻지 못한 경우 문제 진단을 위해 사용됩니다. null이 아닌 뷰의 행오류필드는 파일의 해당 줄에 문제가 있음을 나타냅니다.
특정 데이터토토 베이스에 연결하려면 사용자는 다음을 통과해야 합니다.pg_hba.conf확인하지만 다음이 있어야 합니다연결데이터토토 베이스에 대한 권한입니다. 어떤 사용자가 어떤 데이터토토 베이스에 연결할 수 있는지 제한하려는 경우 일반적으로 승인/취소를 통해 이를 제어하는 것이 더 쉽습니다.연결규칙을 넣는 것보다 특권pg_hba.conf항목.
다음의 몇 가지 예pg_hba.conf항목은 다음에 표시됩니다.예 20.1. 다양한 인증 방법에 대한 자세한 내용은 다음 섹션을 참조하세요.
예제 20.1. 예시pg_hba.conf항목
# 로컬 시스템의 모든 사용자가 다음을 사용하여 모든 데이터토토 베이스에 연결할 수 있도록 허용합니다. # Unix 도메인 소켓을 사용하는 모든 데이터토토 베이스 사용자 이름(로컬의 기본값) # 연결). # # 유형 데이터토토 베이스 사용자 주소 방법 로컬 모두 모두 신뢰 # 로컬 루프백 TCP/IP 연결을 사용하는 것과 동일합니다. # # 유형 데이터토토 베이스 사용자 주소 방법 모두 호스트 127.0.0.1/32 신뢰 # 이전 줄과 동일하지만 별도의 넷마스크 열을 사용합니다. # # 유형 데이터토토 베이스 사용자 IP-주소 IP-마스크 방법 모두 호스트 모두 127.0.0.1 255.255.255.255 신뢰 # IPv6에서도 마찬가지입니다. # # 유형 데이터토토 베이스 사용자 주소 방법 모두 호스트::1/128 신뢰 # 호스트 이름을 사용하는 것과 동일합니다(일반적으로 IPv4와 IPv6 모두 포함). # # 유형 데이터토토 베이스 사용자 주소 방법 호스트 모두 모두 localhost 신뢰 # IP 주소가 192.168.93.x인 모든 호스트의 모든 사용자가 연결하도록 허용합니다. # ident가 보고하는 것과 동일한 사용자 이름으로 "postgres" 데이터토토 베이스에 # 연결(일반적으로 운영 체제 사용자 이름). # # 유형 데이터토토 베이스 사용자 주소 방법 호스트 postgres 모두 192.168.93.0/24 ident # 호스트 192.168.12.10의 모든 사용자가 데이터토토 베이스에 연결하도록 허용 # 사용자의 비밀번호가 올바르게 제공되면 "postgres"입니다. # # 유형 데이터토토 베이스 사용자 주소 방법 호스트 postgres 모두 192.168.12.10/32 scram-sha-256 # example.com 도메인에 있는 호스트의 모든 사용자가 다음에 연결하도록 허용합니다. # 사용자의 비밀번호가 올바르게 제공되면 모든 데이터토토 베이스. # # 대부분의 사용자에게 SCRAM 인증이 필요하지만 예외는 있습니다. # SCRAM을 지원하지 않는 이전 클라이언트를 사용하는 사용자 'mike'의 경우 # 인증. # # 유형 데이터토토 베이스 사용자 주소 방법 모든 mike .example.com md5 호스팅 모두 호스팅 .example.com scram-sha-256 # 앞의 "host" 줄이 없으면 이 두 줄은 # 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"로 연결을 요청합니다. # pg_ident.conf에 맵에 대한 항목이 있으면 연결이 허용됩니다. # "bryanh"이라고 표시된 "omicron"은 "guest1"로 연결이 허용됩니다. # # 유형 데이터토토 베이스 사용자 주소 방법 모두 호스트 192.168.0.0/16 ident map=omicron # 로컬 연결에 이 세 개의 회선만 있는 경우 # 로컬 사용자가 자신의 데이터토토 베이스(데이터토토 베이스)에만 연결하도록 허용합니다. # 데이터토토 베이스 사용자 이름과 동일한 이름을 가짐) 관리자 제외 # 및 모든 데이터토토 베이스에 연결할 수 있는 "지원" 역할의 구성원입니다. 파일 # $PGDATA/admins에는 관리자 이름 목록이 포함되어 있습니다. 비밀번호 #은 모든 경우에 필요합니다. # # 유형 데이터토토 베이스 사용자 주소 방법 로컬 동일 사용자 모두 md5 로컬 모든 @admins md5 로컬 모두 +md5 지원 # 위의 마지막 두 줄은 한 줄로 결합될 수 있습니다. 로컬 모든 @admins,+md5 지원 # 데이터토토 베이스 열에는 목록과 파일 이름도 사용할 수 있습니다. 로컬 db1,db2,@demodbs 모든 md5