Как я могу вызвать psql, чтобы он не запрашивал пароль ?
Вот что у меня есть:
psql -Umyuser < myscript.sql
Однако я не смог найти аргумент, который передает пароль, и поэтому psql всегда запрашивает его.
postgresql
psql
Аксель Фонтейн
источник
источник
Ответы:
Есть несколько способов аутентификации в PostgreSQL. Вы можете изучить альтернативы аутентификации по паролю на странице https://www.postgresql.org/docs/current/static/client-authentication.html .
Чтобы ответить на ваш вопрос, есть несколько способов предоставить пароль для аутентификации на основе пароля. Очевидный способ - через приглашение пароля. Вместо этого вы можете указать пароль в файле pgpass или через
PGPASSWORD
переменную окружения. Смотрите эти:Невозможно предоставить пароль в качестве аргумента командной строки, поскольку эта информация часто доступна всем пользователям и поэтому небезопасна. Однако в средах Linux / Unix вы можете предоставить переменную среды для одной команды, например:
источник
источник
Вы можете добавить эту командную строку в начале вашего скрипта:
источник
export PGPASSWORD=[password]
работала#!/bin/sh set PGPASSWORD = postgres psql -h 192.168.3.200 -U postgres incx_um << EOF DELETE FROM usrmgt.user_one_time_codes WHERE time < NOW() - INTERVAL '30 minute' EOF
PGPASSWORD=password
,Если вы намереваетесь использовать несколько соединений между хостами и базами данных, лучше всего использовать файл ~ / .pgpass .
шаги:
vim ~/.pgpass
или аналогичный. Введите вашу информацию в следующем формате:hostname:port:database:username:password
не добавляйте строковые кавычки вокруг значений вашего поля. Вы также можете использовать * в качестве подстановочного знака для полей порта / базы данных.chmod 0600 ~/.pgpass
сделать так, чтобы psql не игнорировал это молча.alias postygresy='psql --host hostname database_name -U username'
значения должны соответствовать тем, которые вы ввели в файл ~ / .pgpass.. ~/.bashrc
или аналогичными.Обратите внимание, что если у вас установлена переменная export PGPASSWORD = '', она будет иметь приоритет над файлом.
источник
chmod 600
файл, иначе онpsql
будет игнорироваться (в соответствии с документами).Это может быть старый вопрос, но есть альтернативный метод, который вы можете использовать, который никто не упомянул. Можно указать пароль непосредственно в URI подключения. Документация может быть найдена здесь , или здесь .
Вы можете указать свое имя пользователя и пароль непосредственно в URI соединения, предоставленного
psql
:источник
PGPASSWORD
Если у вас проблемы с Windows, как я (я использую Windows 7 64-разрядная версия) и
set PGPASSWORD=[Password]
не работает.Затем, как сказал Каваклиоглу в одном из комментариев,
Вам нужно будет сохранить это в верхней части файла или перед любым использованием, чтобы его установить перед вызовом.
Конечно, работает на окнах :)
источник
export PGPASSWORD=[password]
у меня вообще не работает с использованием командной строки (cmd.exe). Вы уверены, что не использовали Cygwin или что-то подобное?Вы должны создать файл пароля: см. Http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html для получения дополнительной информации.
источник
Учитывая проблемы безопасности при использовании переменной среды PGPASSWORD, я думаю, что лучшее общее решение заключается в следующем:
Здесь есть пара замечаний. Шаг 1 предназначен для того, чтобы избежать попадания в пользовательский файл ~ / .pgpass, который может существовать. Вы также должны убедиться, что файл имеет разрешения 0600 или меньше.
Некоторые предлагают использовать bash, чтобы сократить это следующим образом:
При этом используется синтаксис <(), чтобы избежать необходимости записи данных в фактический файл. Но это не работает, потому что psql проверяет, какой файл используется, и выдаст ошибку, подобную этой:
источник
Это можно сделать просто используя PGPASSWORD. Я использую PSQL 9.5.10. В вашем случае решение будет
PGPASSWORD=password psql -U myuser < myscript.sql
источник
Основываясь на ответе mightybyte для тех, кто не знаком с сценариями * nix shell, вот рабочий сценарий:
Двойной знак доллара (
$$
) в/tmp/pgpasswd$$
строке 2 добавляет идентификационный номер процесса к имени файла, так что этот сценарий можно запускать несколько раз, даже одновременно, без побочных эффектов.Обратите внимание на использование
chmod
команды в строке 4 - точно так же, как и в случае ошибки « not plain file », описанной в mightybyte , также есть ошибка « permissions », если это не сделано.В строке 7 вам не нужно будет использовать
-h
флаг myserver ,-p
myport или-U
jdoe, если вы используете значения по умолчанию ( localhost : 5432 ) и имеете только одного пользователя базы данных. Для нескольких пользователей (но подключение по умолчанию) измените эту строку наНе забудьте сделать скрипт исполняемым с
ОБНОВИТЬ:
Я воспользовался советом RichVel и сделал файл нечитаемым, прежде чем вводить в него пароль. Это закрывает небольшую дыру в безопасности. Спасибо!
источник
mktemp
для создания временного файла вместо того, чтобы придумать свою собственную схему именования. Он создает новый временный файл (названный как-то как/tmp/tmp.ITXUNYgiNh
в Linux и/var/folders/xx/7gws2yy91vn9_t2lb8jcr2gr0000gn/T/tmp.QmbVOQk4
в MacOS X) и выводит его имя на стандартный вывод.chmod 600
после создания файла, но перед тем, как записать в него пароль. Как написано, вредоносный скрипт на сервере может постоянно пытаться читать файлы этого формата, и иногда ему удается получить пароль. Кроме того, если этот сценарий по какой-то причине прервется, файл останется на диске - записьtrap
обработчика оболочки решит эту проблему. Учитывая, что написать такой безопасный сценарий нетривиально, я рекомендую использоватьexport PGPASSWORD
вместо него.PGPASSWORD
что устарело в 9.3.Альтернативой использованию
PGPASSWORD
переменной среды является использованиеconninfo
строки в соответствии с документациейисточник
Вы можете найти это полезным: Командная строка Windows PSQL: есть ли способ разрешить вход без пароля?
источник
8 лет спустя ...
На моем Mac я должен был вставить строку в файл,
~/.pgpass
как:Также смотрите:
https://www.postgresql.org/docs/current/libpq-pgpass.html
https://wiki.postgresql.org/wiki/Pgpass
источник
Я обнаружил, что psql показывает пароль, даже если вы определяете переменную PGPASSWORD, но вы можете указать опцию -w для psql, чтобы пропустить запрос пароля.
источник
Используйте -w в команде: psql -h localhost -p 5432 -U пользователь -w
источник