Это кажется обманчиво простым ответом на вопрос, но может и не быть.Что такое неинвазивный независимый от ОС тест для проверки пароля пользователя системы PostgreSQL NULL?
Давайте посмотрим на другой (более простой) случай. Как мы можем проверить, что пароль системного пользователя «SOMEPASS», если предположить, что пользователь системы является «postgres».
su - postgres; env PGPASSWORD=SOMEPASS psql -h localhost -c 'select' > /dev/null
if [ $? -ne 0 ]; then
echo "Invalid password."
fi
Параметр -h на PSQL принуждает соединение использовать TCP вместо сокет домена, который заставляет на основе паролей входа в систему. В противном случае параметр pg_hba.conf по умолчанию настроен так, чтобы разрешать несанкционированные подключения от пользователя системы через сокет домена.
Что такое аналогичная версия вышеприведенного теста, но которая может проверить, что пароль пользователя системы равен NULL? Тест должен возвращать 0, если у пользователя системы есть NULL-пароль, а 1 - нет.
Кроме того, поскольку я надеюсь преобразовать это в общий код для использования в кукольной среде в ОС Windows, Solaris и Linux, решение должно (не может?) Использовать вспомогательные утилиты командной строки, такие как sed, awk, Perl и т.д.
Вы имеете в виду пользователя операционной системы, например пользователя postgres в '/ etc/passwd' и'/etc/shadow' в традиционных Unix-системах? Или вы имеете в виду суперпользователя базы данных postgres'? –
Суперпользователь базы данных postgres, а не пользователь ОС. В принципе, если вы выполните «select rolname, rolpassword from pg_authid», вы увидите пользователей, и каждый, у кого есть пароль NULL, будет пустым в этом столбце. – r3cgm