Командная строка Windows PSQL: есть ли способ разрешить вход без пароля?

#windows #postgresql

#Windows #postgresql

Вопрос:

Моя цель — иметь возможность запускать команду без запроса моего пароля. Есть ли какой-либо способ добиться этого из командной строки Windows? В Linux я чувствую, что мог бы отправить пароль в standard in или что-то в этом роде, но я не уверен, смогу ли я сделать это для Windows.

Спасибо!

Ответ №1:

Есть два способа:

  • Установите переменную среды PGPASSWORD, например set PGPASSWORD=yoursecretpassword
  • Используйте файл паролей, %APPDATA%postgresqlpgpass.conf как описано в документации

В файле паролей (мое местоположение C:UsersGrzesiekAppDataRoamingpostgresqlpgpass.conf ) используйте указанный в формате doc. Например, для подключения базы данных postgres в качестве роли postgres на локальном сервере 5432 добавьте:

 localhost:5432:postgres:postgres:12345
  

Я проверил это, и это работает хорошо (для меня), но не используйте 127.0.0.1).

Комментарии:

1. @Задающий вопрос: обновил мой ответ, он должен работать и для file

Ответ №2:

Другой удобный вариант (особенно если ваш PG-сервер работает на вашем собственном клиентском компьютере, и если это не создает для вас никаких проблем с безопасностью) — разрешить вход без пароля на сервере (режим аутентификации «доверие»).

Например, эта строка в pg_hba.conf (в вашем каталоге ДАННЫХ, типичное расположение: C:Program FilesPostgreSQL9.0data ) предоставляет доступ без пароля с вашего локального компьютера.

 host     all     all     127.0.0.1/32    trust
  

Затем подключитесь с

   psql.exe -h 127.0.0.1 -U postgres -w [YOUR_DB_NAME]
  

Ответ №3:

Я знаю, что это старый вопрос, но для тех, кто выглядит так, как я, трудно найти решение для Windows. поместите это в файл .bat, и это сработает (по крайней мере, для меня это сработало). измените director на каталог postres, задайте переменную среды PGPASSWORD выполните команду копирования в файл csv, а затем очистите переменную среды, затем вернитесь в корневой каталог.

 cd C:Program FilesPostgreSQL9.5bin

set PGPASSWORD=yourpassword


psql -d databasename -U yourusername -w -c "COPY (select * from yourtable) TO 'c:/Users/yourdirectory/yourcsvfilename.csv' DELIMITER '|' CSV HEADER;"

set PGPASSWORD=

cd c:
  

Ответ №4:

Я понимаю, что этот вопрос немного устарел, но я считаю, что есть лучшее средство для безопасного входа в PostgreSQL без пароля в Windows — SSPI.

  1. Создайте локальную учетную запись пользователя или учетную запись домена и войдите в PostgreSQL с тем же именем.

  2. В pg_ident.conf создайте сопоставление:

     # MAPNAME   SYSTEM-USERNAME      PG-USERNAME
    SSPI        username@AUTHORITY   loginname
      

    Замените имя пользователя на имя пользователя Windows (это sAMAccountName атрибут для учетных записей домена) и замените ПОЛНОМОЧИЯ на имя компьютера или короткое доменное имя. Если вы не уверены, что использовать для АВТОРИЗАЦИИ, проверьте файл журнала PostgreSQL. Для локальной учетной записи это будет имя компьютера; для учетной записи домена это, вероятно, короткое доменное имя. Наконец, замените loginname именем входа в PostgreSQL (чтобы уменьшить путаницу, я бы рекомендовал использовать одно и то же имя как для имени пользователя, так и для имени входа).

  3. В pg_hba.conf разрешите вход в систему; например:

     # TYPE   DATABASE   USER        ADDRESS        METHOD
    host     all        loginname   127.0.0.1/32   sspi map=SSPI
    host     all        loginname   ::1/128        sspi map=SSPI
      
  4. Если учетная запись домена, установите для нее SPN; например:

     setspn -S POSTGRES/serverfqdn username
      

Теперь вы можете войти в Windows, используя указанное имя пользователя, и выполнить psql.exe и т.д. без необходимости ввода пароля.

Ответ №5:

Еще одна альтернатива для тех, кто не хочет использовать файл .pgpass и хочет выполнить в одном экземпляре командной строки.

 set "PGPASSWORD=yourpass" amp;amp; createdb -h localhost -p 5432 -U postgres new_db_name
  

Я ссылался почти на каждое решение, связанное с командной строкой, и, наконец, закончил, обернув " вокруг PGPASSWORD =yourpass при настройке в Windows 11.

Ответ №6:

Шаги:

Первая переменная среды PGPASSWORD

C:Windowssystem32 > установить PGPASSWORD=клавиша

перед

psql -d на основе dedatos -U usuario

Готово,

Ответ №7:

Я заставил это работать в Postgres 15 с:

 psql -U postgres -h 127.0.0.1 -p 54322 -f some_file password=postgres
  

J

Ответ №8:

Если вы умеете использовать Powershell, вы можете установить переменные среды встроенными, аналогично bash.

Это должно сработать:

 $Env:PGPASSWORD='your-pass'; psql -U postgres
  

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

Ответ №9:

Я нашел другое полезное решение, которое сработало для меня по этой ссылке. В основном он устанавливает PGPASSWORD в начале вашей команды следующим образом:

 PGPASSWORD=PASSWORD psql YOUR_CODE
  

Комментарии:

1. Это работает в bash, но не в командной строке Windows.