programing

비대화형으로 'psql' 비밀번호를 지정하려면 어떻게 해야 합니까?

i4 2023. 4. 16. 14:32
반응형

비대화형으로 'psql' 비밀번호를 지정하려면 어떻게 해야 합니까?

셸 스크립트를 사용하여 데이터베이스 작성 프로세스를 자동화하려고 합니다.또한 psql에 패스워드를 전달함으로써 장애가 되고 있습니다.셸 스크립트의 코드를 다음에 나타냅니다.

psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"

패스워드는 어떻게 전달합니까?psql어떻게 해야 할까요?

psql을 호출하기 전에 스크립트 내에서 PGPASSWORD 환경변수를 설정합니다.

PGPASSWORD=pass1234 psql -U MyUsername myDatabaseName

자세한 것은, http://www.postgresql.org/docs/current/static/libpq-envars.html 를 참조해 주세요.


편집

Postgres 9.2 이후 사용자 이름과 비밀번호를 포함할 수 있는 연결 문자열 또는 URI를 지정하는 옵션도 있습니다.구문:

$ psql postgresql://[user[:password]@][host][:port][,...][/dbname][?param1=value1&...]

예를 들어 실행 중인 프로세스의 명령줄을 볼 때 암호가 일반 텍스트로 표시되므로 이를 사용하면 보안 위험이 있습니다.ps(Linux), 프로세스탐색기(Windows) 또는 유사한 도구(다른 사용자가 사용).

데이터베이스 관리자에 대한 이 질문도 참조하십시오.

공식 문서:

패스워드를 정기적으로 입력하는 것을 피하기 위해 ~/.pgpass 파일이 있으면 편리합니다.자세한 내용은 섹션 30.13을 참조하십시오.

...

이 파일에는 다음 형식의 행이 포함되어 있어야 합니다.

hostname:port:database:username:password

현재 연결 매개 변수와 일치하는 첫 번째 줄의 암호 필드가 사용됩니다.

  • 한 줄:

    export PGPASSWORD='password'; psql -h 'server name' -U 'user name' -d 'base name' -c 'command'
    

    다음과 같은 sql 명령어를 사용하여"select * from schema.table"

  • 가독성 향상:

    export PGPASSWORD='password'
    psql -h 'server name' -U 'user name' -d 'base name' \
         -c 'command' (eg. "select * from schema.table")
    

는 psql에 URL을 전달하는 것을 선호합니다.

psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"

이렇게 하면 환경변수에 원하는 이름을 붙일 수 있고 불필요한 파일을 만들지 않아도 됩니다.

이 경우libpq매뉴얼은 이쪽에서 찾을 수 있습니다.

Windows 의 경우:

  1. PGPASSWORD에 값 할당:C:\>set PGPASSWORD=pass

  2. 실행 명령:C:\>psql -d database -U user

준비가 되어 있습니다!

아니면 한 줄에

set PGPASSWORD=pass&& psql -d database -U user

& &! 앞에 공간이 부족하다는 점에 유의하십시오.

이 조작은, 다음의 커맨드를 작성하면 실행할 수 있습니다..pgpass파일을 (Linux) 사용자의 홈 디렉토리에 저장합니다. .pgpass파일 형식:

<databaseip>:<port>:<databasename>:<dbusername>:<password>

와일드카드도 사용할 수 있습니다.*디테일을 대신

달리고 싶다고 말해라tmp.sql패스워드를 입력하도록 지시하지 않습니다.

다음 코드를 사용하여 *.sh 파일로 할 수 있습니다.

echo "192.168.1.1:*:*:postgres:postgrespwd" > $HOME/.pgpass
echo "` chmod 0600 $HOME/.pgpass `"

echo " ` psql -h 192.168.1.1 -p 5432  -U postgres  postgres  -f tmp.sql `        

를 사용하는 대체 수단PGPASSWORD환경변수는 다음 명령어를 사용하는 것입니다.conninfo설명서에 따라 스트링을 지정합니다.

접속 파라미터를 지정하는 대체 방법은 conninfo 문자열 또는 데이터베이스 이름 대신 사용되는 URI입니다.이 메커니즘에 의해 접속을 매우 폭넓게 제어할 수 있습니다.

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

postgres=>

한 답변에 대부분의 옵션을 추가해도 늦지 않은 경우:

몇 가지 옵션이 있습니다.

  1. pgpass 파일에 설정합니다.링크
  1. 환경변수를 설정하고 거기에서 가져옵니다.

    export PGPASSWORD='password'

    psql을 실행하여 로그인하거나 명령어를 실행합니다.

    psql -h clustername -U username -d testdb

  2. Windows 에서는, 「set」를 사용할 필요가 있습니다.

    set PGPASSWORD=passbash.psql bash에 합니다.

  3. URL 및 env 변수를 통해 전달:

    psql "postgresql://$USER_NAME:$PASSWORD@$HOST_NAME/$DB_NAME"

좀 더 선명하게 하기 위해서.

는 '비밀번호'는 '비밀번호 할당'입니다.PGPASSWORD★★★★★★ 。

따라서 다음 대신 암호를 입력해야 합니다.

psql --host=aurora-postgres.cluster-fgshdjdf.eu-west-1.rds.amazonaws.com --port=5432 --user=my_master_user --password --dbname=postgres

대신 쓰겠습니다.--password에 깃발을 올리다PGPASSWORD=QghyumjB3ZtCQkdf 을 사용하다

PGPASSWORD=QghyumjB3ZtCQkdf psql --host=aurora-postgres.cluster-fgshdjdf.eu-west-1.rds.amazonaws.com --port=5432 --user=my_master_user --dbname=postgres

이렇게 하면 암호를 입력할 필요가 없습니다.

pg_env.sh의 내용을 .bashrc에 추가했습니다.

cat /opt/PostgreSQL/10/pg_env.sh

#!/bin/sh
# The script sets environment variables helpful for PostgreSQL

export PATH=/opt/PostgreSQL/10/bin:$PATH
export PGDATA=/opt/PostgreSQL/10/data
export PGDATABASE=postgres
export PGUSER=postgres
export PGPORT=5433
export PGLOCALEDIR=/opt/PostgreSQL/10/share/locale
export MANPATH=$MANPATH:/opt/PostgreSQL/10/share/man

(사용자 4653174의 제안에 따라)를 추가합니다.

export PGPASSWORD='password'
psql postgresql://myawsumuser:myPassword@127.0.0.1:5432/myawsumdb

언급URL : https://stackoverflow.com/questions/6405127/how-do-i-specify-a-password-to-psql-non-interactively

반응형