Postgres: 비대화형 스크립트에서 postgres 사용자로 인증

Postgres: 비대화형 스크립트에서 postgres 사용자로 인증

postgres 명령을 실행하는 데 필요한 비대화형 스크립트를 작성 중입니다. 이 스크립트는 root권한이 있는 사용자만 실행할 수 sudo있으며 postgres 명령은 postgrespostgresql에서 사용자로 실행해야 합니다. 문제는 postgresql이 항상(내가 아는 한) 대화형으로 비밀번호를 묻는 메시지를 표시하거나(예 pqsl -U postgres -W:) 비밀번호를 전혀 허용하지 않는다는 것입니다(예 psql -U postgres -w:). mysql에서 허용하는 방식과 유사하게 명령줄에서 비밀번호를 전달하고 싶습니다 mysql -u user -p password. 포스트그레스로 이 작업을 어떻게 수행할 수 있나요?

답변1

PGPASSWORD환경 변수를 사용하십시오 . 예를 들어:

PGPASSWORD=<password> psql -U postgres -c "<postgresql query>"

원천

답변2

동일한 작업을 수행하는 방법에는 두 가지가 있습니다.

방법 1:

.pgpass사용자(스크립트를 실행하는 사용자)의 홈 디렉터리에 파일을 추가합니다.

$ cat /home/user/.pgpass
hostname:port:database:user:password
$ chmod 600 /home/user/.pgpass

위 항목을 추가한 후에는 사용하는 스크립트에 비밀번호를 추가할 필요가 없습니다. 바로 연결됩니다.

방법 2:

쉘 스크립트에 다음 내용을 추가하십시오. 그러나 이로 인해 비밀번호가 노출되고 저장소에 커밋하면 문제가 됩니다.

export PGPASSWORD=password

답변3

psql을 사용자 postgres로 실행할 수 있는 경우 가장 유용한 해결책은 pg_hba.conf를 수정하여 localhost/socket을 통해 연결하는 Unix 사용자 postgres가 비밀번호나 외부 파일 없이 인증할 수 있도록 하는 것입니다. 파일 삽입 상단에 다음을 삽입합니다.

local all postgres  peer

이 시점에서는 TBMI가 기본값입니다. 어쩌면 누군가가 이 선을 제거했을 때 자신이 더 똑똑하거나 더 안전하다고 생각했을 수도 있습니다. 모니터링 서비스에 다음과 같은 것을 사용할 수도 있습니다.

local zabbix zabbix peer

"zabbix"라는 사용자 이름과 데이터베이스를 만듭니다.

관련 정보