Вы здесь
Несколько способов аутентификации postgresql
Существует несколько способов аутентификации postgresql. Вы можете изучить альтернативы аутентификации паролей в http://www.postgresql.org/docs/current/static/client-authentication.html.
Чтобы ответить на ваш вопрос, есть несколько способов предоставить пароль для аутентификации на основе пароля. Очевидным способом является запрос пароля. Вместо этого вы можете указать пароль в файле pgpass или через переменную среды PGPASSWORD. Смотрите следующее:
http://www.postgresql.org/docs/9.0/static/libpq-pgpass.html http://www.postgresql.org/docs/9.0/interactive/libpq-envars.html
Нет возможности предоставить пароль в качестве аргумента командной строки, поскольку эта информация часто доступна для всех пользователей и, следовательно, небезопасна. Однако в средах Linux/Unix вы можете предоставить переменную окружения для одной команды следующим образом:
PGPASSWORD = yourpass psql..
PGPASSWORD=[your password] psql -Umyuser < myscript.sql
Вы можете добавить эту командную строку в начале вашего script:
set PGPASSWORD=[your password]
Если вы намереваетесь иметь несколько хостов/соединений с базой данных, ~/.pgpass file - путь.
Шаги:
- Создайте файл ~/.pgpass. Введите свою информацию в следующем формате имя хоста: port: database: username: password
- Не добавляйте строковые кавычки вокруг значений полей. Вы также можете использовать * в качестве подстановочного знака для полей вашего порта/базы данных.
- Создайте псевдоним в своем профиле bash, который запускает вашу команду psql для вас. Например:
alias postygresy='psql --host hostname database_name -U username'
Значения должны совпадать с значениями, введенными в файл ~/.pgpass. - Отправьте свой bash профиль.
- Введите свой псевдоним из командной строки.
Обратите внимание, что если у вас есть установленная переменная PGPASSWORD = '', она будет иметь приоритет над файлом. Также разумно изменить разрешения вашего файла, чтобы содержимое было скрыто от других пользователей. Этого можно достичь с помощью chmod 600 ~/.pgpass
Если у вас проблемы с такими окнами, как я (я использую 64-разрядную версию Windows 7), аset PGPASSWORD=[Password]
не работает.
Затем, как сказал Каваклиоглу в одном из комментариев,
export PGPASSWORD=[password]
Вам нужно будет сохранить это в верхней части файла или перед любым использованием, поэтому его набор перед вызовом.
Конечно, работает над окнами:)
Вам нужно создать файл паролей: см. http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html для получения дополнительной информации.
Учитывая проблемы безопасности, связанные с использованием переменной среды PGPASSWORD, я считаю, что лучшее общее решение выглядит следующим образом:
- Напишите свой собственный временный файл pgpass с паролем, который вы хотите использовать.
- Используйте переменную среды PGPASSFILE, чтобы сообщить psql, чтобы использовать этот файл.
- Удалить временный файл pgpass
Здесь есть несколько замечаний. Шаг 1 заключается в том, чтобы избежать сбрасывания файла пользователя ~/.pgpass, который может существовать. Вы также должны убедиться, что файл имеет разрешения 0600 или меньше.
Некоторые предложили использовать bash, чтобы сократить это следующим образом:
PGPASSFILE=<(echo myserver:5432:mydb:jdoe:password) psql -h myserver -U jdoe -p 5432 mydb
В этом случае используется синтаксис <(), чтобы избежать необходимости записывать данные в фактический файл. Но это не работает, потому что psql проверяет, какой файл используется, и выдает ошибку, подобную этой:
WARNING: password file "/dev/fd/63" is not a plain file
Вы можете найти это полезным: Командная строка Windows PSQL: есть ли способ разрешить вход в систему без пароля?
Основываясь на могучем ответить тем, кто не устраивает скрипты * nix shell, здесь работает script:
#!/bin/sh
PGPASSFILE=/tmp/pgpasswd$$
echo "myserver:5432:mydb:jdoe:password" > $PGPASSFILE
chmod 600 $PGPASSFILE
export PGPASSFILE
psql mydb
rm $PGPASSFILE
Двойной знак доллара ($$
) в /tmp/pgpasswd$$
в строке 2 добавляет идентификатор процесса к имени файла, так что этот script можно запускать более одного раза, даже одновременно, без побочных эффектов.
Обратите внимание на использование команды chmod
в строке 4 - так же, как описанная mightybyte ошибка "не простой файл", также есть ошибка "разрешения", если это не сделано.
В строке 6 вам не нужно использовать -h
myserver, флаг -p
myport или -U
jdoe, если вы используете настройки по умолчанию (localhost: 5432) и имеете только одного пользователя базы данных. Для нескольких пользователей (но соединение по умолчанию) измените эту строку на
psql mydb jdoe
Не забудьте сделать исполняемый файл script с
chmod +x runpsql
(или все, что вы назвали файлом script)
Post new comment