LINUX.ORG.RU
ФорумAdmin

Авторизация в psql без ручного ввода пароля

 


2

1

Доброго времени суток! Как сделать так, чтобы можно было входить в psql (postgres) с помощью скрипта, который будет редактировать пользователей. Или автоматический ввод пароля без вмешательства админа.

Пример Во freeipa я делаю так:

echo "SuperPassword" | ipa user-mod "uzver1" --password 

Но эта конструкция не подходит для postgres

echo "SuperPassword" | sudo -u postgres bash -c "psql -c \"CREATE USER uzver1;\""

В лучших традициях этого форума отвечу не на твой вопрос, а на собственные мысли, итак:

скрипт? который с админскими правами может залогинится? без пароля? редактировать юзеров? да вы что, в самом деле, нельзя такое делать, это даже не «неправильно», это «охренеть как мы относимся к безопасности».

Alve ★★★★★ ()
Ответ на: комментарий от Alve

Вы ответили в ещё более лучших традициях, чем думали, потому что ответили неправильно. Правильным был предыдущий ответ. Ваш ответ неправильный, потому что psql является помимо прочего средством администрирования.

Partisan ★★★ ()
Ответ на: комментарий от Alve

Это все равно работает в рамках закрытой небольшой локальной сети которая не имеет доступа в интернет.

PirateTM ()

Всё верно, это делается переменными или default-ным файлом с паролем - https://postgrespro.ru/docs/postgrespro/11/libpq-pgpass (здесь написано по-русски).

Например, для мониторинга я делал так:

export PGHOST="${PGHOST:-127.0.0.1}"
export PGPORT="${PGPORT:-5432}"
export PGUSER="${PGUSER:-monitoring}"
export PGDATABASE="${PGDATABASE:-template1}"
export PGPASSFILE="${PGPASSFILE:-/etc/postgresql/monitoring.conf}"

psql ....

И в /etc/postgresql/monitoring.conf вписывал сгенерированный пароль:
#
# hostname:port:database:username:password
#

*:*:*:monitoring:UsErPaSsWoRd

spirit ★★★★★ ()
Ответ на: комментарий от spirit

Сделал по другому Спасибо всем, кто принял участие :) https://postgrespro.ru/docs/postgresql/10/libpq-pgpass

echo "Создаю файл .pgpass и удаляю старый (если есть)"
sudo -u postgres bash -c 'cd && rm .pgpass'
#ip:port:*:login:password"
sudo -u postgres bash -c 'echo "localhost:*:*:postgres:postgres" > ~/.pgpass && chmod 600 ~/.pgpass'

  
echo "Начинаю работать с базами"

for ((y=1; y<=$kk;y++)){
echo "z nen"
bd=$(cat $pg_astk_bases | head -n $y | tail -n1)
echo "Работаю в бд $bd"


for ((i=1; i<=$k; i++)){
uzver=$(cat $source | head -n $i | tail -n1) #Переменная для записи имени пользователя

echo "Завожу $uzver в бд $bd"
sudo -u postgres bash -c "cd && psql -c \"CREATE USER $uzver;\""
sudo -u postgres bash -c "cd && psql -c \"GRANT SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, USAGE ON ALL TABLES IN SCHEMA public TO $uzver;\""
sudo -u postgres bash -c "cd && psql -c \"GRANT CONNECT, TEMP ON DATABASE $bd TO $uzver;\""

#Удаление файла с паролем после отработки скрипта
#echo 'Добавил права на БД '
}
}
#Удаляем файл с паролем ради безопасности...
echo "Удаляю файл с паролем .pgpass"
sudo -u postgres bash -c 'cd && rm .pgpass'


PirateTM ()
Ответ на: комментарий от PirateTM

А смысл тогда вообще ставить пароли на Postgresql локально ?

Jopich1 ()

sudo -u postgres

Вы же уже переключились на системного пользователя postgres под которым работает сервер, по умолчанию подключения от пользователя под которым запущена сама СУБД она пускает без пароля.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.