Назад | Перейти на главную страницу

Как мне включить пароль для пользователя postgres в сценарий обслуживания?

Я настраиваю задание cron для повседневного обслуживания базы данных postgresql. Сценарий выглядит следующим образом:

#!/bin/sh

dbname="dbname"
username="postgres"
psql -d $dbname -U $username << EOF
delete from links_link where submitted_on > now() - interval'4 days';
EOF

Однако при запуске через crontab это не удается, потому что я не предоставил пароль для пользователя. postgres.

Мой вопрос: как мне включить пароль для пользователя postgres в сценарий оболочки? Это поможет мне быстро начать работу. Во-вторых, как повысить безопасность, избавившись от необходимости явно добавлять пароль в сценарий? Если кто-то уже создавал подобное раньше, их опыт очень приветствуется. Заранее спасибо.

Взгляните на похожий пост здесь: Postgresql: выполнение сценария psql с паролем

Общий принятый ответ (который может работать или не работать для вашей версии Postgres) - использовать переменную среды PGPASSWORD следующим образом:

PGPASSWORD=[your password] psql -Umyuser < myscript.sql

РЕДАКТИРОВАТЬ: Похоже, вы пробовали, и это не сработало. Вы смотрели ссылку, которую я отправил? Есть несколько заявленных вариантов, проверьте ресурсы для настройки pg_hba.conf файл: https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html, или посмотрите на .pgpass файл: https://www.postgresql.org/docs/9.3/static/libpq-pgpass.html

Если вы попытаетесь использовать pg_hba.conf, казалось бы, используя auth-method из trust при правильной настройке пользователя, которого вы будете использовать для своего сценария, будет разрешен доступ, как указано ниже:

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

Вы можете переключиться на идентификацию (или разрешить ее), а затем создать пользователя локальной системы с тем же именем. Затем вы можете просто запустить этот сценарий от имени этого пользователя, и он выполнит вход в postgres с тем же пользователем.

https://www.postgresql.org/docs/9.0/static/auth-methods.html
https://www.postgresql.org/docs/9.0/static/auth-pg-hba-conf.html

В pg_hba.conf примерно так:

local  dbname someuser ident

Затем перезапустите postgres, и вы можете su - someuser и запустить сценарий. Это немного безопаснее, чем «local all all trust», которое используется по умолчанию и позволяет всем локальным пользователям безоговорочно подключаться к любой базе данных.