Вы здесь

Несколько способов аутентификации 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

Основываясь на могучем ответить тем, кто не устраивает скрипты * 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

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
3 + 14 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.