Pg hba conf нет записи для компьютера

Обновлено: 06.07.2024

Каждая запись обозначает тип соединения, диапазон IP-адресов клиента (если он соотносится с типом соединения), имя базы данных, имя пользователя, и способ аутентификации, который будет использован для соединения в соответствии с этими параметрами. Первая запись с соответствующим типом соединения, адресом клиента, указанной базой данных и именем пользователя применяется для аутентификации. Процедур « fall-through » или « backup » не предусмотрено: если выбрана запись и аутентификация не прошла, последующие записи не рассматриваются. Если же ни одна из записей не подошла, в доступе будет отказано.

Запись может быть сделана в одном из семи форматов:

Значения полей описаны ниже:

Управляет подключениями через Unix-сокеты. Без подобной записи подключения через Unix-сокеты невозможны. host

Управляет подключениями, устанавливаемыми по TCP/IP. Записи host соответствуют подключениям с SSL и без SSL .

Примечание

Удалённое соединение по TCP/IP невозможно, если сервер запущен без определения соответствующих значений для параметра конфигурации listen_addresses, поскольку по умолчанию система принимает подключения по TCP/IP только для локального адреса замыкания localhost .

Управляет подключениями, устанавливаемыми по TCP/IP с применением шифрования SSL .

Чтобы использовать эту возможность, сервер изначально должен быть построен с поддержкой SSL . Более того, SSL должен быть включён на момент запуска сервера, для чего необходимо установить параметр конфигурации ssl (подробнее это описано в Разделе 17.9). hostnossl

Этот тип записей противоположен hostssl , ему соответствуют только подключения по TCP/IP без шифрования SSL . база

Определяет, каким именам баз данных соответствует эта запись. Значение all определяет, что подходят все базы данных. Значение sameuser определяет, что данная запись соответствует только, если имя запрашиваемой базы данных совпадает с именем запрашиваемого пользователя. Значение samerole определяет, что запрашиваемый пользователь должен быть членом роли с таким же именем, как и у запрашиваемой базы данных. ( samegroup - это устаревший, но допустимый вариант значения samerole .) Суперпользователи не становятся членами роли автоматически из-за samerole , а только если они являются явными членами роли, прямо или косвенно, и не только из-за того, что они суперпользователи. Значение replication показывает, что запись соответствует, если запрашивается подключение репликации (имейте в виду, что подключения репликации не определяют какую-то конкретную базу данных). В противном случае это имя определённой базы данных Postgres Pro . Несколько имён баз данных можно указать, разделяя их запятыми. Файл, содержащий имена баз данных, можно указать, поставив знак @ в начале его имени. пользователь

Указывает, какому имени (или именам) пользователя базы данных соответствует эта запись. Значение all показывает, что это подходит всем пользователям. В противном случае это либо имя конкретного пользователя базы данных, либо имя группы, в начале которого стоит знак + . (Напомним, что в Postgres Pro нет никакой разницы между пользователем и группой; знак + означает « совпадение любых ролей, которые прямо или косвенно являются членами роли » , тогда как имя без знака + является подходящим только для этой конкретной роли.) В связи с этим, суперпользователь рассматривается как член роли, только если он явно является членом этой роли, прямо или косвенно, а не только потому, что он является суперпользователем. Несколько имён пользователей можно указать, разделяя их запятыми. Файл, содержащий имена пользователей, можно указать, поставив знак @ в начале его имени. адрес

Указывает адрес (или адреса) клиентской машины, которым соответствует данная запись. Это поле может содержать или имя компьютера, или диапазон IP-адресов, или одно из нижеупомянутых ключевых слов.

Типичные примеры диапазонов адресов 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. Чтобы указать один компьютер, используйте длину маски 32 для IPv4 или 128 для IPv6. Опускать замыкающие нули в сетевом адресе нельзя.

Запись, сделанная в формате IPv4, подойдёт только для подключений по IPv4, а запись в формате IPv6 подойдёт только для подключений по IPv6, даже если представленный адрес находится в диапазоне IPv4-в-IPv6. Имейте в виду, что записи в формате IPv6 не будут приниматься, если системная библиотека С не поддерживает адреса IPv6.

Вы также можете прописать значение all , чтобы указать любой IP-адрес, samehost , чтобы указать любые IP-адреса данного сервера, или samenet , чтобы указать любой адрес любой подсети, к которой сервер подключён напрямую.

Если определено имя компьютера (всё, что не является диапазоном IP-адресов или специальным ключевым словом, воспринимается как имя компьютера), то оно сравнивается с результатом обратного преобразования IP-адреса клиента (например, обратного DNS-запроса, если используется DNS). При сравнении имён компьютеров регистр не учитывается. Если имена совпали, выполняется прямое преобразование имени (например, прямой DNS-запрос) для проверки, относится ли клиентский IP-адрес к адресам, соответствующим имени. Если двусторонняя проверка пройдена, запись считается соответствующей компьютеру. (В качестве имени узла в файле pg_hba.conf должно указываться то, что возвращается при преобразовании IP-адреса клиента в имя, иначе строка не будет соответствовать узлу. Некоторые базы данных имён позволяют связать с одним IP-адресом несколько имён узлов, но операционная система при попытке разрешить IP-адрес возвращает только одно имя.)

Когда в pg_hba.conf указываются имена узлов, следует добиться, чтобы разрешение имён выполнялось достаточно быстро. Для этого может быть полезен локальный кеш разрешения имён, например, nscd . Вы также можете включить конфигурационный параметр log_hostname , чтобы видеть в журналах имя компьютера клиента вместо IP-адреса.

Пользователи часто задаются вопросом, почему имена серверов обрабатываются таким сложным, на первый взгляд, способом, с разрешением двух имён, включая обратный запрос клиентского IP-адреса. Это усложняет процесс в случае, если обратная DNS-запись клиента не установлена или включает в себя нежелательное имя узла. Такой способ избран, в первую очередь, для повышения эффективности: в этом случае соединение требует максимум два запроса разрешения, один прямой и один обратный. Если есть проблема разрешения с каким-то адресом, то она остаётся проблемой этого клиента. Гипотетически, могла бы быть реализована возможность во время каждой попытки соединения выполнять только прямой запрос для разрешения каждого имени сервера, упомянутого в pg_hba.conf . Но если список имён велик, процесс был бы довольно медленным, а в случае наличия проблемы разрешения у одного имени сервера, это стало бы общей проблемой.

Также обратный запрос необходим для того, чтобы реализовать возможность соответствия суффиксов, поскольку для сопоставления с шаблоном требуется знать фактическое имя компьютера клиента.

Эти два поля могут быть использованы как альтернатива записи IP-адрес / длина-маски . Вместо того, чтобы указывать длину маски, в отдельном столбце указывается сама маска. Например, 255.0.0.0 представляет собой маску CIDR для IPv4 длиной 8 бит, а 255.255.255.255 представляет маску CIDR длиной 32 бита.

Эти поля применимы только к записям host , hostssl и hostnossl . метод-аутентификации

Указывает метод аутентификации, когда подключение соответствует этой записи. Варианты выбора приводятся ниже; подробности в Разделе 19.3.

Разрешает безусловное подключение. Этот метод позволяет тому, кто может подключиться к серверу с базой данных Postgres Pro , войти под любым желаемым пользователем Postgres Pro без введения пароля и без какой-либо другой аутентификации. За подробностями обратитесь к Подразделу 19.3.1. reject

Отклоняет подключение безусловно. Эта возможность полезна для « фильтрации » некоторых серверов группы, например, строка reject может отклонить попытку подключения одного компьютера, при этом следующая строка позволяет подключиться остальным компьютерам в той же сети. md5

Требует от клиента предоставить для аутентификации пароль, дважды хешированный алгоритмом MD5. За подробностями обратитесь к Подразделу 19.3.2. password

Требует для аутентификации введения клиентом незашифрованного пароля. Поскольку пароль посылается простым текстом через сеть, такой способ не стоит использовать, если сеть не вызывает доверия. За подробностями обратитесь к Подразделу 19.3.2. gss

Для аутентификации пользователя использует GSSAPI. Этот способ доступен только для подключений по TCP/IP. За подробностями обратитесь к Подразделу 19.3.3. sspi

Для аутентификации пользователя использует SSPI. Способ доступен только для Windows. За подробностями обратитесь к Подразделу 19.3.4. ident

Получает имя пользователя операционной системы клиента, связываясь с сервером Ident, и проверяет, соответствует ли оно имени пользователя базы данных. Аутентификация ident может использоваться только для подключений по TCP/IP. Для локальных подключений применяется аутентификация peer. За подробностями обратитесь к Подразделу 19.3.5. peer

Получает имя пользователя операционной системы клиента из операционной системы и проверяет, соответствует ли оно имени пользователя запрашиваемой базы данных. Доступно только для локальных подключений. За подробностями обратитесь к Подразделу 19.3.6. ldap

Проводит аутентификацию, используя сервер RADIUS. За подробностями обратитесь к Подразделу 19.3.8 cert

Проводит аутентификацию, используя клиентский сертификат SSL. За подробностями обратитесь к Подразделу 19.3.9 pam

Проводит аутентификацию, используя службу подключаемых модулей аутентификации (PAM), предоставляемую операционной системой. За подробностями обратитесь к Подразделу 19.3.10. bsd

Проводит аутентификацию, используя службу аутентификации BSD, предоставляемую операционной системой. За подробностями обратитесь к Подразделу 19.3.11.

После поля метод-аутентификации может идти поле (поля) вида имя = значение , определяющее параметры метода аутентификации. Подробнее о параметрах, доступных для различных методов аутентификации, рассказывается ниже.

Помимо описанных далее параметров, относящихся к различным методам, есть один общий параметр аутентификации clientcert , который можно задать в любой записи hostssl . Если он равен 1 , клиент должен представить подходящий (доверенный) сертификат SSL, в дополнение к другим требованиям метода проверки подлинности.

после Google это говорит, что мне просто нужно добавить запись в файле pg_hba.conf для этого конкретного пользователя. это мой файл pg_hba.conf.

но после этого ошибка все еще сохраняется. Я перезагружал свой сервер XAMPP несколько раз, но никаких изменений не появляется. заранее спасибо

Вы перезапустили сам PostgreSQL, а не только веб-сервер? Попробуй SELECT pg_reload_conf() .

Добавьте или отредактируйте следующую строку в вашем postgresql.conf :

Добавьте следующую строку в качестве первой строки pg_hba.conf . Это позволяет доступ ко всем базам данных для всех пользователей с зашифрованным паролем:

Перезапустите Postgresql после добавления этого с помощью service postgresql restart или эквивалентной команды для вашей установки.

Обратите внимание, что для того, чтобы это работало, для пользователя должен быть установлен пароль : sudo -u <username> psql postgres затем \password в появившемся запросе sql появится запрос на его установку. Не забудьте перезапустить postgresql после добавления этого: service postgresql restart Если вы хотите немного дополнительной защиты, ограничивающей подключения к частным доменам (например, внутри офиса, а не к остальной части Интернета), вы можете изменить первый номер на 10, 172 или 192 в соответствии с вашей сетью: например, 172.0. 0.0 / 0 вместо 0.0.0.0/0

Это решение работает для IPv4 / IPv6

а затем перезапустите сервис postgresql

Я решил это следующим образом:

Добавлена ​​строка, как показано ниже pg_hba.conf :

и это было изменено в postgresql.conf , как показано:

У меня этот экземпляр работал на Centos 7.3 и Postgres 9.5 на виртуальной машине в Azure , учитывая, что это был POC (подтверждение концепции), который вы не захотите подключать без SSL в вашей реальной среде разработки.

Для подключения к экземпляру я использовал pgAdmin 4 на macOS Sierra .

Не только SSL . для всего, что не является доказательством концепции и доступно для сети, вы не будете доверять соединениям, вам потребуется некоторая аутентификация .

Fresh Postgres 9.5 установить, Ubuntu.

Ключ был локальным типом соединения, так как psql использует соединение с сокетом домена.


Следуйте за нами на нашей фан-странице, чтобы получать уведомления каждый раз, когда появляются новые статьи. Facebook

1- Удаленное подключение к Postgres

Иногда вы создаете удаленное подключение к базе данных Postgres и получаете уведомление об ошибке, подобное этому:

Причина состоит в том, что эта база данных принимает только локальные подключения, поэтому вам нужно настроить Postgres так, чтобы она принимала удаленные подключения.

Прежде чем мы начнем, важно знать, что есть два конфигурационных файла, контролирующих работу сервера базы данных Postgres, и вам нужно изменить некоторые параметры этих двух файлов.

  • /etc/postgresql/13/main (Linux)
  • C:/Program Files/PostgreSQL/13/data (Windows)

Файл postgresql.conf позволяет настроить IP-адреса, которые Postgres использует для прослушивания подключений к нему. По умолчанию Postgres прослушивает только адрес localhost, поэтому вы не можете удаленно подключиться к нему.


Откройте Terminal в Linux (Ubuntu и т. д.) и перейдите в папку, где находится файл postgresql.conf.


Для Linux (Ubuntu и т. д.) используйте команду nano, чтобы открыть и изменить файл postgresql.conf.




Вышеуказанное изменение позволяет Postgres прослушивать все IP-адреса компьютера, на котором они установлены. Вы также можете указать список адресов прослушивания (listen addresses) для Postgres, которые разделяются запятыми.

Затем нажмите CTRL + O --> ENTER, чтобы сохранить изменения, и CTRL + X, чтобы выйти из nano.

Файл pg_hba.conf используется для аутентификации клиента (client). Другими словами, он позволяет указать, какие клиенты могут подключаться к Postgres. HBA означает "Host-Based Authentication" (аутентификация на основе Хоста).

Для Linux (Ubuntu и т. д.) используйте команду nano, чтобы открыть и изменить файл pg_hba.conf:




Вышеуказанное изменение позволит всем клиентам (client) подключаться к Postgres.

Вы также можете настроить разрешение для диапазона IP-адресов для подключения к Postgres:

Наконец, перезапустите Postgres, чтобы изменения вступили в силу.

View more Tutorials:

Это онлайн курс вне вебсайта o7planning, который мы представляем, он включает бесплатные курсы или курсы со скидкой.

Рассмотрим процесс подключения к базам данных, методы подключения и аутентификации в PostgreSQL, а также сопоставление пользователей ОС и ролей БД.

Процесс подключения

Процесс подключение можно разделить на три этапа:

Настройки по умолчанию используется метод аутентификации trast, который позволяет подключаться без аутентификации любым локальным пользователям.

Метод аутентификации trast

Метод аутентификации trast (alex@deb:

$ psql -U postgres)

Основные настройки

Его местоположение можно изменить задав параметр hba_file в конфигурационном файле postgresql.conf:

При изменении этого файла конфигурацию сервера нужно перечитать, выполнив:

Если вы подключены к СУБД, то узнать местоположение файла можно таким способом:

Файл pg_hba.conf состоит из строк, а строки состоят из следующих полей:

  • тип подключения;
  • имя БД;
  • имя пользователя;
  • адрес узла;
  • метод аутентификации;
  • необязательные дополнительные параметры в виде имя=значение. Эти параметры нужны некоторым методам аутентификации.

Эти строки обрабатываются сверху вниз и применяется первая найденная строка. Таким образом если тип подключения, имя БД, имя пользователя и адрес сервера совпали, то применяется определённый метод аутентификации.

При подключении выполняется аутентификация и проверяется привилегия CONNECT. Если результат отрицательный, доступ запрещается и строки ниже не рассматриваются. Если ни одна запись не подошла, доступ запрещается. Таким образом записи должны идти сверху вниз от частного к общему.

Вот пример файла pg_hba.conf, который создаётся при сборке из исходников:

Первая строчка это тип подключения local, в котором используется локальный unix сокет, и не задействована сеть. При таком подключении все пользователи (all) могут подключаться методом trust. О методах поговорим позже.

Третья и четвёртая строки относятся к tcp подключениям (host). При таком подключении все пользователи могут подключаться только из локального хоста (127.0.0.1/32 или ::1/128) используя метод trust.

Последние три строки относятся к репликации. Репликация возможна по сокету (local) и по сети (host) но только с локального хоста (127.0.0.1/32 или ::1/128). Здесь тоже используется метод trust.

Если вы подключены к СУБД, то сможете посмотреть содержимое файла pg_hba.conf с помощью представления pg_hba_file_rules:

Если в строке допущена ошибка, то это представление в поле error покажет ошибку.

Параметры подключения

Теперь рассмотрим параметры подключений!

Типы подключений:

Имя базы данных:

Адрес узла:

Имя роли:

Тип аутентификации:

Пароль в СУБД

Пароль хранится в СУБД в зашифрованном виде при использовании методов аутентификации md5 и scram-sha-256.

Задать пароль роли при её создании можно так:

Создать пароль для уже существующей роли можно так:

Пользователю с пустым паролем будет отказано в доступе при аутентификации по паролю.

Пароли в зашифрованном виде хранятся в системном каталоге, в таблице pg_authid.

При аутентификации пароль можно вводить вручную, но не всегда это удобно. Еще можно установить переменную $PGPASSWORD на клиенте, в неё нужно задать пароль, тогда утилита psql будет использовать пароль из этой переменной. Но это не очень удобно и не безопасно.

Также можно создать файл

/.pgpass. Там можно прописать разные пароли к разным серверам следующим образом:

Читайте также: