Я настраиваю задание 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», которое используется по умолчанию и позволяет всем локальным пользователям безоговорочно подключаться к любой базе данных.