Насчёт пользователей без паролей в PostgreSQL.
Для того, что бы разрешить авторизацию в базу пользователей без проверки паролей, необходимо прописать в pg_hba метод авторизации «trust» (последний параметр в строке pg_hba). Это удобно для разного рода автоматизаций, например импорта в postgresql данных osm, периодической обработки данных по расписанию и т.д. Но это и большая дыра в безопасности, поскольку пароль при методе «trust» вообще не проверяется, по этому если и использовать его, то лучше ограничиться только разрешением в пределах локального компьютера и только на конкретную базу и пользователя.
Так же, многие путаются с авторизацией на локальном компьютере, забывая, что для localhost существует минимум два метода:
- через сетевое соединение с локальным сетевым адресом (адресом любого интерфейса либо 127.0.0.1)
- через локальный socket
Для первого метода необходимо указать тип соединения «host» в pg_hba, а для второго соединения через локальный сокет, минуя сетевую инфраструктуру тип «local». И соединение «pgsql -h localhost» — это именно соединение через сокет, а не через сеть.
Поэтому, если нам надо что бы все и всегда, включая локальную авторизацию, авторизовывались по пользователям и паролям из самой базы, а не из ОС, то необходимо прописать:
# с localhost, используя локальный unix-socket
local all all md5
# с localhost, используя tcp/ip 4 и 6 (для каждого своя настройка)
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
# с любого адреса в сети, кроме локального компьютера, через IPv4
host all all 0.0.0.0/0 md5
Для локальной авторизации без пароля, пользователя «user1» в базу «base1» нужно прописать первым правило:
local base1 user1 trust
Методов авторизации по паролям два: «md5» и «password», второй отличается от первого тем, что пароль передаётся открытым текстом. По умолчанию раньше использовался именно «password».