Postgresql: 암호를 사용하여 psql 실행 스크립팅
psql을 호출하여 암호를 묻지 않도록 하려면 어떻게 해야 합니까?
이것이 제가 가진 것입니다.
psql -Umyuser < myscript.sql
하지만 암호를 전달하는 인수를 찾을 수 없었고, sopsql은 항상 암호를 입력하라는 메시지를 표시합니다.
Postgre에 인증하는 방법에 대한 요약을 읽고 싶을 수 있습니다.SQL.
질문에 대답하기 위해 암호 기반 인증에 대한 암호를 제공하는 방법은 여러 가지가 있습니다.
암호 프롬프트를 사용합니다.예:
psql -h uta.biocommons.org -U foo Password for user foo:
pgpass 파일에 있습니다.libpq-pgpass를 참조하십시오.형식:
<host>:<port>:<database>:<user>:<password>
환경 변수와 함께.libpq-envars를 참조하십시오.예:
export PGPASSWORD=yourpass psql ... # Or in one line for this invocation only: PGPASSWORD=yourpass psql ...
연결 문자열에서 암호 및 기타 옵션은 연결 문자열/URI에서 지정할 수 있습니다. app-psql을 참조하십시오.예:
psql postgresql://username:password@dbmaster:5433/mydb?sslmode=require
PGPASSWORD=[your password] psql -Umyuser < myscript.sql
스크립트 시작 부분에 다음 명령줄을 추가할 수 있습니다.
export PGPASSWORD="[your password]"
호스트/데이터베이스를 여러 개 연결하려는 경우 ~/.pgpass 파일을 사용하는 것이 좋습니다.
단계:
- 다을사용파만을 사용하여 .
vim ~/.pgpass
또는 그와 유사합니다.합니다.hostname:port:database:username:password
필드 값 주위에 문자열 따옴표를 추가하지 마십시오.*를 포트/데이터베이스 필드의 와일드카드로 사용할 수도 있습니다. - 당신은 해야 한다.
chmod 0600 ~/.pgpass
psql에 의해 하기 . - 합니다.psql bash는 사용자를됩니다.예:
alias postygresy='psql --host hostname database_name -U username'
값은 ~/.pgpass 파일에 입력한 값과 일치해야 합니다. - 의 소스를 bash로 합니다.
. ~/.bashrc
또는 그와 유사합니다. - 명령줄에서 별칭을 입력합니다.
내보내기 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 환경 변수 사용에 대한 보안 문제를 고려할 때 전반적으로 가장 좋은 해결책은 다음과 같습니다.
- 사용할 암호를 사용하여 자신의 임시 pgpass 파일을 작성합니다.
- PGPASSFILE 환경 변수를 사용하여 psql에 해당 파일을 사용하도록 지시합니다.
- 임시 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
'programing' 카테고리의 다른 글
여러 안드로이드 애플리케이션이 동일한 파이어베이스 데이터베이스에 액세스할 수 있습니까? (0) | 2023.07.06 |
---|---|
ELMAH를 사용한 WCF 서비스에 대한 예외 로깅 (0) | 2023.07.06 |
TSQL DATTIME ISO 8601 (0) | 2023.07.06 |
삭제된 파일을 복원할 수 있습니까('git clean -fdx'를 해제합니다)? (0) | 2023.07.06 |
JUQ를 사용한 Spring Boot과 Spring Data JPA의 기술적 차이 (0) | 2023.07.06 |