programing

pg_dump에 암호를 어떻게 전달합니까?

jooyons 2023. 4. 25. 22:16
반응형

pg_dump에 암호를 어떻게 전달합니까?

크론작업을 생성하여 매일 밤 데이터베이스를 백업하려고 합니다.이 명령은 내 요구를 충족시켜야 할 것 같습니다.

0 3 * * * pg_dump dbname | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz

실행 후를 제외하고 암호를 입력해야 합니다.cron에서 실행하면 그렇게 할 수 없어요.어떻게 하면 자동으로 통과시킬 수 있나요?

이렇게 만들어 보세요..pgpass계정 홈 디렉토리에 파일을 합니다.pg_dump네, 그렇습니다.

형식은 다음과 같습니다.

hostname:port:database:username:password

그런 다음 파일의 모드를 '있다'로 설정합니다.0600그렇지 않으면 무시됩니다 이겁니다.

chmod 600 ~/.pgpass

자세한 내용은 Postgresql 설명서 libpq-pgpass를 참조하십시오.

crontab을 사용하세요.이 스크립트 안에서 환경변수를 이렇게 설정할 수 있습니다.export PGPASSWORD="$put_here_the_password"

이렇게 하면 암호가 필요한 명령이 여러 개 있는 경우 모두 스크립트에 넣을 수 있습니다.비밀번호가 변경될 경우, 한 곳에서만 비밀번호를 변경하면 됩니다(스크립트).

그리고 조슈아 말에 동의해요.pg_dump -Fc가장 유연한 내보내기 형식을 생성하고 이미 압축되어 있습니다.자세한 내용은 pg_dump 설명서를 참조하십시오.

예.

# dump the database in custom-format archive
pg_dump -Fc mydb > db.dump

# restore the database
pg_restore -d newdb db.dump

한 번의 명령으로 이를 수행하려면 다음과 같이 하십시오.

PGPASSWORD="mypass" pg_dump mydb > mydb.dump

명령어 앞에 명령어를 때 사용합니다.VAR="val" 접두사. 이러한 변수는 해당 명령 실행 컨텍스트의 환경 변수로 설정됩니다.따라서 셸 세션에서 전역으로 설정되지 않습니다.상황에 '비밀번호'를 알려주는 적절한 방법이 될 수 있습니다.pg_dump네, 그렇습니다.

한 의 경우 데이터베이스 마이그레이션과 같이 할 수 있습니다.--dbnamepg_passwords 설명서에 설명된 대로 연결 문자열(암호 포함)이 이어집니다.

본질적으로는요.

pg_dump --dbname=postgresql://username:password@127.0.0.1:5432/mydatabase

참고: 옵션을 사용해야 합니다.--dbname짧은 대신이요.-d한 URI 접두어인 "URI"를 사용합니다.postgresql://아니면요?postgres://요.

일반 URI 형식은 다음과 같습니다.

postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]

이 작업은 보안 문제로 인해 수행하지 않는 것이 좋습니다(cron의 반복 작업).만약 이 아니었다면요.pgpass파일 연결 문자열을 환경 변수로 저장합니다.

export MYDB=postgresql://username:password@127.0.0.1:5432/mydatabase

그럼 당신의 crontab에 넣으세요

0 3 * * * pg_dump --dbname=$MYDB | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz

이 라이너 하나가 단일 데이터베이스의 덤프를 만드는 데 도움이 됩니다.

PGPASSWORD="yourpassword" pg_dump -U postgres -h localhost mydb > mydb.pgsql
$ PGPASSWORD="mypass" pg_dump -i -h localhost -p 5432 -U username -F c -b -v -f dumpfilename.dump databasename

다음을 사용하여 암호를 pg_dump에 직접 전달할 수 있습니다.

pg_dump "host=localhost port=5432 dbname=mydb user=myuser password=mypass" > mydb_export.sql

@Josue Alexander Ibarra 응답은 --dbname이 전달되지 않은 경우 centos 7 및 버전 9.5에서 작동합니다.

pg_dump postgresql://username:password@127.0.0.1:5432/mydatabase 

창문에서는 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아pgpass.conf이겁니다.

%APPDATA%\postgresql\pgpass.conf

만약 없다면요.postgresql폴더입니다.%APPDATA%이겁니다.

더 »pgpass.conf이겁니다.

localhost:5432:dbname:dbusername:dbpassword

건배.

이 블로그 게시물에 자세히 나와 있듯이, Postgre에 암호를 대화식으로 제공하지 않는 두 가지 방법이 있습니다."pg_dump" 명령과 같은 SQL 유틸리티: ".pgpass" 파일을 사용하거나 "PGPASSWORD" 환경 변수를 사용합니다.

틀렸다면 정정해 주세요. 하지만 시스템 사용자가 데이터베이스 사용자와 같다면, PostgreSQL은 암호를 묻지 않습니다. 인증은 시스템에 의존합니다.이것은 구성의 문제일 수 있습니다.

그래서, 나는 데이터베이스 소유자를 원했습니다.postgres매일 밤 그의 데이터베이스를 백업하기 위해, 나는 crontab을 수 있습니다: 매일밤 밤밤 밤밤 toont to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to tocrontab -e -u postgres물론입니다postgrescron 작업을 실행할 수 있어야 cron에 나열해야 합니다. 따라서 cron 작업을 다음에 나열해야 합니다./etc/cron.allow 또는 , 는는을를(으)입니다./etc/cron.deny이겁니다.

임시 .pgpass 자격 증명을 사용하여 암호로 ssh를 통해 백업하고 S3으로 푸시합니다.

#!/usr/bin/env bash
cd "$(dirname "$0")"

DB_HOST="*******.*********.us-west-2.rds.amazonaws.com"
DB_USER="*******"
SSH_HOST="my_user@host.my_domain.com"
BUCKET_PATH="bucket_name/backup"

if [ $# -ne 2 ]; then
    echo "Error: 2 arguments required"
    echo "Usage:"
    echo "  my-backup-script.sh <DB-name> <password>"
    echo "  <DB-name> = The name of the DB to backup"
    echo "  <password> = The DB password, which is also used for GPG encryption of the backup file"
    echo "Example:"
    echo "  my-backup-script.sh my_db my_password"
    exit 1
fi

DATABASE=$1
PASSWORD=$2

echo "set remote PG password .."
echo "$DB_HOST:5432:$DATABASE:$DB_USER:$PASSWORD" | ssh "$SSH_HOST" "cat > ~/.pgpass; chmod 0600 ~/.pgpass"
echo "backup over SSH and gzip the backup .."
ssh "$SSH_HOST" "pg_dump -U $DB_USER -h $DB_HOST -C --column-inserts $DATABASE" | gzip > ./tmp.gz
echo "unset remote PG password .."
echo "*********" | ssh "$SSH_HOST" "cat > ~/.pgpass"
echo "encrypt the backup .."
gpg --batch --passphrase "$PASSWORD" --cipher-algo AES256 --compression-algo BZIP2 -co "$DATABASE.sql.gz.gpg" ./tmp.gz

# Backing up to AWS obviously requires having your credentials to be set locally
# EC2 instances can use instance permissions to push files to S3
DATETIME=`date "+%Y%m%d-%H%M%S"`
aws s3 cp ./"$DATABASE.sql.gz.gpg" s3://"$BUCKET_PATH"/"$DATABASE"/db/"$DATETIME".sql.gz.gpg
# s3 is cheap, so don't worry about a little temporary duplication here
# "latest" is always good to have because it makes it easier for dev-ops to use
aws s3 cp ./"$DATABASE.sql.gz.gpg" s3://"$BUCKET_PATH"/"$DATABASE"/db/latest.sql.gz.gpg

echo "local clean-up .."
rm ./tmp.gz
rm "$DATABASE.sql.gz.gpg"

echo "-----------------------"
echo "To decrypt and extract:"
echo "-----------------------"
echo "gpg -d ./$DATABASE.sql.gz.gpg | gunzip > tmp.sql"
echo

처음 몇 개의 구성 행을 필요한 것으로 대체하기만 하면 됩니다.S3 백업 파트에 관심이 없는 사람들은 당연히 S3 백업 파트를 꺼냅니다.

이 스크립트는 이 스크립트에서 자격 증명을 삭제합니다..pgpass 일부 환경에서는 기본 SSH 사용자가 암호 없이 sudo를 수행할 수 있습니다. 예를 들어, SSH의 SSH 인스턴스는 sudo를 사용하여 암호 없이 sudo를 수행할 수 있습니다.ubuntu사용자, 따라서 사용합니다..pgpass이러한 자격 증명을 보호하기 위해 다른 호스트 계정을 사용하는 것은 무의미할 수 있습니다.

Windows의 경우 Windows를 사용합니다.pgpass.conf이겁니다.

%APPDATA%\postgresql\pgpass.conf

Windows 10 절대 경로에서는 다음과 같습니다.

C:\Users\Ognjen\AppData\Roaming\postgresql\pgpass.conf

Note:postgresql에 폴더가 없는 경우입니다.%APPDATA% 로 만듭니다.pgpass.conf이겁니다.

의용니니다 of of의 내용입니다.pgpass.conf이겁니다.

*:5432:*:*:myDbPassword

또는 보다 구체적인 내용은 다음과 같습니다.

localhost:5432:dbName:username:password

Note:의용니니다 of of의 내용입니다.pgpass.conf공백(암호 뒤에 있음)으로 끝나지 않아야 합니다. 이겁니다.

윈도우즈에서는 pg_dump.exe를 사용하기 전에 암호로 변수를 설정하고 다음과 같이 bat 파일에서 모두 자동화할 수 있습니다.

C:\>SET PGPASSWORD=dbpass
C:\>"folder_where_is_pg_dump\pg_dump.exe" -f "dump_file" -h "db_host" -U db_usr --schema "db_schema" "db_name"

안전하게 패스워드를 전달할 수 방법은 패스워드입니다..pgpass.

의용니다 of of의 내용입니다..pgpass이겁니다.

db_host:db_port:db_name:db_user:db_pass

#Eg
localhost:5432:db1:admin:tiger
localhost:5432:db2:admin:tiger

이제 권한을 가진 사용자의 홈 디렉토리에 이 파일을 저장하십시오.u=rw (0600) or less

사용자의 홈 디렉토리를 을 사용하십시오.echo $HOME

파일의 사용 권한을 제한합니다.chmod 0600 /home/ubuntu/.pgpass

pg_hba.conf를 열고 모든 메서드에 대한 신뢰를 설정하기만 하면 됩니다.저는 좋아요.따라서 보안은 null입니다.

암호를 전달하는 또 다른 방법(아마도 안전하지 않을 수 있음)은 입력 리디렉션(예: 통화)을 사용하는 것입니다.

pg_dump [params] < [path to file containing password]

내 생각에 가장 쉬운 방법은 다음과 같습니다: 당신은 당신의 메인 postgres 구성 파일을 편집해야 합니다: pg_postgres.conf 거기 당신은 다음 줄을 추가해야 합니다:

host <you_db_name> <you_db_owner> 127.0.0.1/32 trust

이 후 cron을 시작해야 합니다.

pg_dump -h 127.0.0.1 -U <you_db_user> <you_db_name> | gzip > /backup/db/$(date +%Y-%m-%d).psql.gz

비밀번호 없이도 작동했어요

언급URL : https://stackoverflow.com/questions/2893954/how-to-pass-in-password-to-pg-dump 입니다.

반응형