Запустить командный файл с командой psql без пароля

Я пытаюсь выполнить эту команду psql используя пакетный скрипт:

 psql --host=localhost --dbname= --port= --username= --file=C:\PSQL_Script.txt --output=C:\PSQL_Output.txt 

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

2 Solutions collect form web for “Запустить командный файл с командой psql без пароля”

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

Только отключить запрос пароля

Если ваша проблема – это только пароль, вы можете ее отключить. Я цитирую здесь инструкцию :

-w
--no-password

Никогда не выдавайте запрос пароля. Если серверу требуется аутентификация по паролю, а пароль недоступен другими средствами, такими как файл .pgpass , попытка подключения завершится с ошибкой. Эта опция может быть полезна в пакетных заданиях и сценариях, где пользователь не вводит пароль. (…)

Вам, вероятно, не нужен пароль

Обычно это не нужно. По умолчанию postgres суперпользователя базы данных по умолчанию соответствует системному пользователю с тем же именем. Запуск psql из этой учетной записи не требует пароля, если в вашем pg_hba.conf установлен peer или ident метод проверки подлинности . У вас, вероятно, есть такая строка:

 local all postgres peer 

И обычно также:

 local all all peer 

Это означает, что каждый локальный пользователь может войти во всю базу данных как пользователь базы данных с тем же именем без пароля.
Однако здесь есть общее заблуждение. Цитирование снова :

Этот метод поддерживается только локальными подключениями .

Смелый акцент мой.
Вы подключаетесь к localhost , который не является «локальной связью» , хотя в нем есть слово «local». Это TCP / IP-соединение с 127.0.0.1. Википедия на localhost :

В современных компьютерных системах localhost как имя хоста преобразуется в IPv4-адрес в блочном блоке 127.0.0.0/8 (loopback), обычно 127.0.0.1 или ::1 в IPv6.

Простое решение для локальных соединений

Опустите параметр -h из вызова psql . Повторное цитирование руководства по psql :

Если вы опустите имя хоста, psql будет подключаться через сокет Unix-домена к серверу на локальном хосте или через TCP / IP в localhost на компьютерах, у которых нет сокетов Unix-домена.

Windows

… не имеет сокетов Unix-домена, строки pg_hba.conf начинающиеся с local , не применимы к Windows. В Windows вы подключаетесь через localhost по умолчанию, что возвращает нас к началу.

Если ваши требования безопасности слабы, вы можете просто доверять всем соединениям через localhost :

 host all all 127.0.0.1/32 trust 

Я бы сделал это только для отладки с удаленными подключениями. Для получения дополнительной безопасности вы можете использовать аутентификацию SSPI в Windows. Добавьте эту строку в pg_hba.conf для «локальных» соединений:

 host all all 127.0.0.1/32 sspi 

Если вам действительно нужен пароль

Вы можете установить переменную среды , но это обескураживает , особенно для Windows. Руководство:

PGPASSWORD ведет себя так же, как параметр соединения с паролем . Использование этой переменной среды не рекомендуется по соображениям безопасности, так как некоторые операционные системы позволяют пользователям без полномочий root видеть переменные среды процесса через ps; вместо этого рассмотрим использование файла ~/.pgpass (см. раздел 32.15 ).

Руководство по psql :

Строка conninfo – это альтернатива для указания параметров подключения:

  $ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require" 

Или URI , который используется вместо имени базы данных:

  $ psql postgresql://myuser:secret_pw@localhost:5432/mydb?sslmode=require 

Файл паролей

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

Имя хоста localhost соответствует как TCP (имя хоста localhost ), так и сокету Unix домена ( pghost empty или каталог сокета по умолчанию), исходящие от локальной машины.

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

 localhost:5432:*:myadmin:myadminPasswd localhost:5434:*:myadmin:myadminPasswd localhost:5437:*:myadmin:myadminPasswd ... 

На компьютерах Windows найдите файл в:

 C:\Documents and Settings\My_Windows_User_Name\Application Data\postgresql 

У меня была одна и та же проблема:

 psql -hlocalhost -d -U 

всегда запрашивал у меня пароль. Это объясняется тем, как @Erwin объясняется из-за того, что -hlocalhost подключается через TCP, а не через сокет Unix-домена (для ОС на базе Unix). Поэтому даже если вы настроили свой local как надежный:

 local all all trust 

он все равно запросит пароль. Поэтому, чтобы настроить -hlocalhost на работу через TCP, мне пришлось настроить host для адресов localhost, например:

 host all all 127.0.0.1/32 trust host all all ::1/128 trust 

Но это не сработало для меня. Я должен был объединить оба эти:

 host all all localhost trust 

Некоторые дополнительные показания:

  • Настройка файла pg_hba.conf
  • Методы аутентификации: доверие, сверстники, идентификаторы и т. Д.
Interesting Posts

Невозможно прокручивать хвост вверх или вниз по серверу

Ограничение доступа к программам через Интернет

Идентификация и решение javax.el.PropertyNotFoundException: Target Unreachable

Как сохранить снежный барс от показа мягкой клавиатуры при запросе пароля?

Как выбрать предмет по его вероятности?

PowerPoint открывается на втором экране, но у меня нет ни одного

Проблемы с производительностью в моей системе

VMware Workstation 8: как подделать загрузочный USB-накопитель?

EntityFramework – содержит запрос составного ключа

Как настроить параметр «ручное окно» VPN для сервера и клиента, чтобы разрешить спутниковое VPN-соединение?

динамическая строка с использованием String.xml?

Поиск реального концентратора / разделителя DisplayPort

Как пропустить изображение экрана блокировки Windows 8?

Как идентифицировать дистрибутив linux?

XPath: выберите первый элемент с определенным атрибутом

Давайте будем гением компьютера.