programing

Postgresql: 암호를 사용하여 psql 실행 스크립팅

telebox 2023. 7. 6. 22:08
반응형

Postgresql: 암호를 사용하여 psql 실행 스크립팅

psql을 호출하여 암호를 묻지 않도록 하려면 어떻게 해야 합니까?

이것이 제가 가진 것입니다.

psql -Umyuser < myscript.sql

하지만 암호를 전달하는 인수를 찾을 수 없었고, sopsql은 항상 암호를 입력하라는 메시지를 표시합니다.

Postgre에 인증하는 방법에 대한 요약을 읽고 싶을 수 있습니다.SQL.

질문에 대답하기 위해 암호 기반 인증에 대한 암호를 제공하는 방법은 여러 가지가 있습니다.

  1. 암호 프롬프트를 사용합니다.예:

    psql -h uta.biocommons.org -U foo
    Password for user foo: 
    
  2. pgpass 파일에 있습니다.libpq-pgpass를 참조하십시오.형식:

    <host>:<port>:<database>:<user>:<password>
    
  3. 환경 변수와 함께.libpq-envars를 참조하십시오.예:

    export PGPASSWORD=yourpass
    psql ...
    
    # Or in one line for this invocation only:
    PGPASSWORD=yourpass psql ...
    
  4. 연결 문자열에서 암호 및 기타 옵션은 연결 문자열/URI에서 지정할 수 있습니다. app-psql을 참조하십시오.예:

    psql postgresql://username:password@dbmaster:5433/mydb?sslmode=require
    
PGPASSWORD=[your password] psql -Umyuser < myscript.sql

스크립트 시작 부분에 다음 명령줄을 추가할 수 있습니다.

export PGPASSWORD="[your password]"

호스트/데이터베이스를 여러 개 연결하려는 경우 ~/.pgpass 파일을 사용하는 것이 좋습니다.

단계:

  1. 다을사용파만을 사용하여 .vim ~/.pgpass또는 그와 유사합니다.합니다.hostname:port:database:username:password필드 값 주위에 문자열 따옴표를 추가하지 마십시오.*를 포트/데이터베이스 필드의 와일드카드로 사용할 수도 있습니다.
  2. 당신은 해야 한다.chmod 0600 ~/.pgpasspsql에 의해 하기 .
  3. 합니다.psql bash는 사용자를됩니다.예:alias postygresy='psql --host hostname database_name -U username'값은 ~/.pgpass 파일에 입력한 값과 일치해야 합니다.
  4. 의 소스를 bash로 합니다.. ~/.bashrc또는 그와 유사합니다.
  5. 명령줄에서 별칭을 입력합니다.

내보내기 PGPASSWORD=' 변수 세트가 있는 경우 파일보다 우선합니다.

오래된 질문일 수도 있지만 아무도 언급하지 않은 다른 방법을 사용할 수 있습니다.연결 URI에서 직접 암호를 지정할 수 있습니다.설명서는 여기 또는 여기에서 찾을 수 있습니다.

는 사자이에암다음제 URI서직에 할 수 .psql:

# postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]
psql postgresql://username:password@localhost:5432/mydb

사용하는 대안.PGPASSWORD은 사할환변을 하는 것입니다.conninfo문서에 따른 문자열

연결 매개 변수를 지정하는 다른 방법은 데이터베이스 이름 대신 사용되는 conninfo 문자열 또는 URI입니다.이 메커니즘을 통해 연결을 매우 광범위하게 제어할 수 있습니다.

$ psql "host=<server> port=5432 dbname=<db> user=<user> password=<password>"

postgres=>

암호 파일을 만들어야 합니다. 자세한 내용은 http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html 을 참조하십시오.

7(7 및 7(윈도우 7(윈도우 7 64비트)과 같은 (윈도우 7)에서발생한 set PGPASSWORD=[Password]작동하지 않았습니다.

그러면 Kavaklioglu가 댓글 중 하나에서 말했듯이,

export PGPASSWORD=[password]

파일 맨 위에 저장하거나 사용하기 전에 저장하여 호출하기 전에 설정해야 합니다.

확실히 창문에서 작동합니다 :)

PG PASSWORD 환경 변수 사용에 대한 보안 문제를 고려할 때 전반적으로 가장 좋은 해결책은 다음과 같습니다.

  1. 사용할 암호를 사용하여 자신의 임시 pgpass 파일을 작성합니다.
  2. PGPASSFILE 환경 변수를 사용하여 psql에 해당 파일을 사용하도록 지시합니다.
  3. 임시 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

PG PASSWORD를 사용하여 간단히 수행할 수 있습니다.저는 psql 9.5.10을 사용하고 있습니다.당신의 경우 해결책은 다음과 같습니다.

PGPASSWORD=password psql -U myuser < myscript.sql

*nix 셸 스크립팅에 익숙하지 않은 사람들을 위한 mightybyte의 답변을 바탕으로 다음과 같은 작업 스크립트가 있습니다.

#!/bin/sh
PGPASSFILE=/tmp/pgpasswd$$
touch $PGPASSFILE
chmod 600 $PGPASSFILE
echo "myserver:5432:mydb:jdoe:password" > $PGPASSFILE
export PGPASSFILE
psql mydb
rm $PGPASSFILE

기호 (이중달러기호(▁(호기▁the▁sign이▁dollar)$$)에서./tmp/pgpasswd$$줄 2에서 프로세스 ID 번호를 파일 이름에 추가하여 이 스크립트를 두 번 이상, 심지어 동시에 부작용 없이 실행할 수 있습니다.

다니의합용의의 하세요.chmod라인 4의 명령 - 마이티바이트가 설명한 "일반 파일이 아님" 오류와 마찬가지로, 이것이 수행되지 않으면 "미션" 오류도 있습니다.

7호선에서, 당신은 사용할 필요가 없을 것입니다.-h의 서버, the.-p의 항구, 또는-U기본값(localhost: 5432)을 사용하고 데이터베이스 사용자가 한 명뿐인 경우 jdoe 플래그를 지정합니다.여러 사용자의 경우(기본 연결) 해당 행을 다음으로 변경합니다.

psql mydb jdoe

스크립트를 실행할 수 있도록 설정하는 것을 잊지 마십시오.

chmod +x runpsql(또는 스크립트 파일이라고 불렀던 것)

업데이트:

저는 RichVel의 조언을 받아들여 비밀번호를 입력하기 전에 파일을 읽을 수 없도록 했습니다.그것은 약간의 보안 구멍을 닫습니다.감사합니다!

Windows PSQL 명령줄: 암호 없이 로그인할 수 있는 방법이 있습니까?

8년 후에...

내 맥에, 나는 파일에 줄을 넣어야 했습니다.~/.pgpass예:

<IP>:<PORT>:<dbname>:<user>:<password>

참고:
https://www.postgresql.org/docs/current/libpq-pgpass.html
https://wiki.postgresql.org/wiki/Pgpass

이는 다른 postgresql clis에도 적용됩니다. 예를 들어 비인터랙티브 모드에서 pgbench를 실행할 수 있습니다.

export PGPASSWORD=yourpassword
/usr/pgsql-9.5/bin/pgbench -h $REMOTE_PG_HOST -p 5432 -U postgres -c 12 -j 4 -t 10000 example > pgbench.out 2>&1 &

Windows에서 url 문자열과 psql 옵션의 조합을 사용하여 작업했습니다.

> psql -d postgresql://username:password@localhost:5432/mydb -f myscript.sql

-d 없이 명령을 전달하는 것은 작동하지 않았고, 데이터베이스에 연결되었을 뿐 스크립트가 실행되지 않았습니다.

PG PASSWORD 변수를 정의해도 psql에 비밀번호 프롬프트가 표시되지만 psql에 -w 옵션을 지정하여 비밀번호 프롬프트를 생략할 수 있습니다.

psql -h localhost -p 5432 -U user -w 명령에서 -w를 사용합니다.

언급URL : https://stackoverflow.com/questions/6523019/postgresql-scripting-psql-execution-with-password

반응형