PostgreSQL : PostgreSQL 사용자 비밀번호를 변경하는 방법은 무엇입니까?


답변:


1403

비밀번호가 적은 로그인의 경우 :

sudo -u user_name psql db_name

잊어 버린 경우 비밀번호를 재설정하려면 다음을 수행하십시오.

ALTER USER user_name WITH PASSWORD 'new_password';

126
이를 통해 사용자의 postgresql 명령 기록에서 암호를 지울 수 있습니다.
greg

118
@greg : 삭제 :rm ~/.psql_history
RickyA

43
주제를 벗어나지 만 "사용자 이름을 변경하는 방법"을 찾는 사람이 있다면 ALTER USER myuser RENAME TO newname;... 어떤 이유로 Google에서 인터넷 검색을 할 때 여기에서 나를 가리키고있었습니다 :)
equivalent8

10
"와 따옴표를 모두 사용하는 이유는 무엇입니까? 차이가 있으며 DML 쿼리에서 문자열을 다룰 때 '를 사용해야하지만 여기에서 두 가지를 모두 사용해야하는 특별한 이유가 있습니까?
Boyan

7
사용자는 문자열이 아닌 객체입니다. ALTER TABLE "table_name"또는 심지어 SELECT * FROM "table_name"과 비교하십시오. 이러한 컨텍스트에서 테이블과 함께 작은 따옴표를 사용할 수 없으며 사용자 / 역할과 동일합니다.
P Daddy

630

그런 다음 다음을 입력하십시오.

$ sudo -u postgres psql

그때:

\password postgres

그런 다음 종료합니다 psql:

\q

그래도 작동하지 않으면 인증을 다시 구성하십시오.

편집 /etc/postgresql/9.1/main/pg_hba.conf(경로가 다름) 및 변경 :

    local   all             all                                     peer

에:

    local   all             all                                     md5

그런 다음 서버를 다시 시작하십시오.

$ sudo service postgresql restart

3
postgres의 기본 비밀번호는 무엇입니까? 실수로 바꾸었다. 재설정 가능?
Saad

2
(psql 9.2에서) 입력 \p하면 암호가 제공됩니다. 에서 I 형 경우 \password postgres는 암호 다음 경고를 제공합니다\p extra argument "assword" ignored; \p extra argument "postgres" ignored
데이비드 LeBauer에게

1
이것은 SQL 명령 히스토리에 비밀번호를 두는 것보다 훨씬 낫습니다.
otocan

1
@ZacharyScott 무슨 소리 야?
TheRealChx101

2
Linux에서 postgres 사용자의 비밀번호를 변경하려면 :sudo passwd postgres
Punnerud

88

사용자의 비밀번호를 암호화 할 수 있고 있어야합니다.

ALTER USER username WITH ENCRYPTED PASSWORD 'password';

45
이 키워드는 현재 버전에서는 중요하지 않습니다. 에서 postgresql.org/docs/current/static/sql-createrole.html The password is always stored encrypted in the system catalogs. The ENCRYPTED keyword has no effect, but is accepted for backwards compatibility.
John29

5
조심해! @ John29 주석은 Postgresql 10 이상에서만 적용됩니다. 다른 모든 버전의 경우 ENCRYPTED 플래그가 중요합니다.
phep

51

암호를 변경하는 가장 좋은 방법은 단순히 사용하는 것입니다.

\password

Postgres 콘솔에서.

출처:

이 명령으로 암호화되지 않은 비밀번호를 지정할 때는주의해야합니다. 암호는 일반 텍스트로 서버에 전송되며 클라이언트의 명령 기록 또는 서버 로그에 기록 될 수도 있습니다. psql에는 일반 텍스트 비밀번호를 노출시키지 않고 역할 비밀번호를 변경하는 데 사용할 수있는 \ password 명령이 포함되어 있습니다.

에서 https://www.postgresql.org/docs/9.0/static/sql-alterrole.html .


8
다른 사용자의 암호를 변경하는 데에도 사용할 수 있습니다.\password username
Martin

34

Linux 명령 행을 사용하여 비밀번호를 변경하려면 다음을 사용하십시오.

sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"

5
이것은 아마도 명령 기록에 db의 사용자 암호를 저장한다는 것을 기억하십시오.
Pedro Cordeiro

2
여기서 환경 변수를 사용할 수 있습니까? 배포 스크립트에서 이것을 자동화하고 싶습니다
TheRealChx101

26

비밀번호를 변경하려면

 sudo -u postgres psql

그때

\password postgres

이제 새 비밀번호를 입력하고 확인

그런 다음 \q종료


1
이 대답은 나를 도와줍니다. 감사합니다
mohammad jawad Barati

24

Postgresql 설정으로 이동하여 pg_hba.conf를 편집하십시오

sudo vim /etc/postgresql/9.3/main/pg_hba.conf

그런 다음이 줄을 변경하십시오.

Database administrative login by Unix domain socket
local      all              postgres                                md5

~까지 :

Database administrative login by Unix domain socket
local   all             postgres                                peer

그런 다음 SUDO 명령을 통해 PostgreSQL 서비스를 다시 시작한 다음

psql -U postgres

당신은 이제 입력되고 Postgresql 터미널을 볼 것입니다

그런 다음 입력

\password

Postgres 기본 사용자의 새 비밀번호를 입력합니다. 비밀번호를 성공적으로 다시 변경 한 후 pg_hba.conf로 이동하여 변경 내용을 "md5"로 되돌립니다.

지금 당신은로 로그인됩니다

psql -U postgres

새 비밀번호로.

문제가 있으면 알려주세요.


작동하지 않습니다 :user@user-NC10:~$ psql -U postgres psql: FATAL: Peer authentication failed for user "postgres"
GM

좋아, 다른 방법을 수행하십시오 sudo su-postgres psql 당신은 터미널을 입력하고 거기에 암호를 변경할 것입니다, 이것은 다른 방법입니다. 이것이 귀하에게 도움이되는지 또는 전체 설명이
필요한지 알려주세요.

mm 시도했지만 다른 오류가 있습니다 : / usr / bin / psql : 라인 19 : 사용 : 명령을 찾을 수 없음 / usr / bin / psql : 라인 21 : 사용 : 명령을 찾을 수 없음 / usr / bin / psql : 라인 23 : 사용 : 명령을 찾을 수 없음 / usr / bin / psql : 24 행 : 사용 : 명령을 찾을 수 없음 / usr / bin / psql : psql : 26 행 : 예기치 않은 토큰 $version,' /usr/bin/psql: psql: line 26: my 근처의 구문 오류 , $ host); ' 당신의 도움을 주셔서 감사합니다!
GM

11

postgres 사용자 의 새 비밀번호를 요청하려면 (명령에 비밀번호를 표시하지 않은 상태) :

sudo -u postgres psql -c "\password"

9

내 서버에있는 구성은 많이 사용자 정의 되었으며 파일 에서 신뢰 인증을 설정 한 후에 만 ​​비밀번호를 변경할 수있었습니다 .pg_hba.conf

local   all   all   trust

비밀번호 또는 md5로 다시 변경하는 것을 잊지 마십시오


1
변경 사항을 적용하려면 postgres 서비스를 다시 시작해야합니다sudo systemctl restart postgresql.service
Sampath Surineni

이 pg_hba.conf 파일은 어디로 가야합니까?
JMStudios.jrichardson

8

이것은 사용자 이름을 바꾸는 방법을 찾고 있었을 때 Google의 첫 번째 결과였습니다.

ALTER USER <username> WITH PASSWORD '<new_password>';  -- change password
ALTER USER <old_username> RENAME TO <new_username>;    -- rename user

사용자 관리에 유용한 몇 가지 다른 명령 :

CREATE USER <username> PASSWORD '<password>' IN GROUP <group>;
DROP USER <username>;

다른 그룹으로 사용자 이동

ALTER GROUP <old_group> DROP USER <username>;
ALTER GROUP <new_group> ADD USER <username>;

7

postgres 10.3과 함께 설치된 Ubuntu 14.04의 경우. 다음 단계를 따라야합니다

  • su - postgres 사용자를 전환 postgres
  • psql postgres 쉘을 입력
  • \password 그런 다음 비밀번호를 입력하십시오
  • \q 쉘 세션을 종료
  • 그런 다음 실행하여 루트로 다시 전환 하고 다음 줄이 있는지 확인 exit하여 pg_hba.conf(광산이 있음 /etc/postgresql/10/main/pg_hba.conf) 구성하십시오.

    local all postgres md5

  • 에 의해 postgres 서비스를 다시 시작하십시오 service postgresql restart
  • 이제 postgres사용자로 전환하고 postgres shell을 다시 입력하십시오. 암호를 묻는 메시지가 나타납니다.

암호를 변경 한 후 postgresql 서비스를 다시 시작해야한다고 생각하지 않습니다. 다시 시작하여 비밀번호를 재설정 할 수있었습니다. \ password가 가장 빠른 방법입니다. 그렇지 않으면 ALTER USER 명령이 필요합니다.
Archit Kapoor

3

이것을 사용하십시오 :

\password

해당 사용자에 대해 원하는 새 비밀번호를 입력 한 후 확인하십시오. 비밀번호를 기억하지 않고 비밀번호를 변경하려면 postgres로 로그인 한 후 다음을 사용하십시오.

ALTER USER 'the username' WITH PASSWORD 'the new password';

3

구문의 다른 답변과 유사하지만 일반 텍스트 비밀번호를 전송하지 않도록 비밀번호의 md5를 전달할 수도 있음을 알아야합니다.

다음은 사용자 암호를 일반 텍스트로 변경했을 때 의도하지 않은 결과에 대한 몇 가지 시나리오입니다.

  1. SSL이없고 원격으로 수정하는 경우 네트워크를 통해 일반 텍스트 비밀번호를 전송합니다.
  2. 로깅 구성이 DDL 문 log_statement = ddl이상 을 기록하도록 설정 한 경우 일반 텍스트 비밀번호가 오류 로그에 표시됩니다.
    1. 이러한 로그를 보호하지 않으면 문제가됩니다.
    2. 이러한 로그 / ETL을 수집하여 다른 사람이 액세스 할 수있는 위치에 표시하면이 비밀번호 등을 볼 수 있습니다.
    3. 사용자가 자신의 비밀번호를 관리 할 수 ​​있도록 허용하면 로그 검토 작업을 수행하는 관리자 나 저급 직원에게 자신도 모르게 비밀번호를 공개합니다.

여기에 md5의 비밀번호를 만들어서 사용자의 비밀번호를 변경하는 방법이 있습니다.

  • Postgres는 암호를 md5로 해시 할 때 사용자 이름으로 암호를 작성하고 텍스트 "md5"를 결과 해시 앞에 추가합니다.
  • 예 : "md5"+ md5 (암호 + 사용자 이름)

  • bash에서 :

    ~$ echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'
    md5d6a35858d61d85e4a82ab1fb044aba9d
  • PowerShell에서 :
    [PSCredential] $Credential = Get-Credential

    $StringBuilder = New-Object System.Text.StringBuilder

    $null = $StringBuilder.Append('md5');

    [System.Security.Cryptography.HashAlgorithm]::Create('md5').ComputeHash([System.Text.Encoding]::ASCII.GetBytes(((ConvertFrom-SecureStringToPlainText -SecureString $Credential.Password) + $Credential.UserName))) | ForEach-Object {
        $null = $StringBuilder.Append($_.ToString("x2"))
    }

    $StringBuilder.ToString();

    ## OUTPUT
    md5d6a35858d61d85e4a82ab1fb044aba9d
  • 마지막으로 우리의 ALTER USER명령은
    ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
  • 관련 링크 (참고 : 이전 버전의 문서는 최신 버전으로 만 링크되지만 일부는 변경되지만 md5는 여전히 방법을 지원합니다.)
  • 역할 만들기
  • 비밀번호는 항상 시스템 카탈로그에 암호화되어 저장됩니다. ENCRYPTED 키워드는 효과가 없지만 이전 버전과의 호환성을 위해 허용됩니다. 암호화 방법은 구성 매개 변수 password_encryption에 의해 결정됩니다. 제시된 비밀번호 문자열이 이미 MD5 암호화 또는 SCRAM 암호화 형식 인 경우, 비밀번호 암호화와 상관없이 그대로 저장됩니다 (시스템이 지정된 암호화 된 비밀번호 문자열을 해독하여 다른 형식으로 암호화 할 수 없기 때문에). 이를 통해 덤프 / 복원 중에 암호화 된 비밀번호를 다시로드 할 수 있습니다.

  • password_encryption의 구성 설정
  • postgres 비밀번호 인증 문서
  • postgres 비밀번호 md5 구축

1

일반적으로 db 관련 활동을 수행하려면 pg admin UI를 사용하십시오.

대신 로컬 개발 또는 CI 등을 위해 데이터베이스 설정을 자동화하는 데 더 집중하고 있습니다.

예를 들어, 이와 같은 간단한 콤보를 사용할 수 있습니다.

(a) 다음과 비슷한 명령으로 jenkins를 통해 더미 수퍼 유저를 만듭니다.

docker exec -t postgres11-instance1 createuser --username=postgres --superuser experiment001

postgres db에 experiment001이라는 슈퍼 유저가 생성됩니다.

(b) 비 대화식 SQL 명령을 실행하여이 사용자에게 암호를 제공하십시오.

docker exec -t postgres11-instance1 psql -U experiment001 -d postgres -c "ALTER USER experiment001 WITH PASSWORD 'experiment001' "

Postgres는 아마도 명령 줄 (비 대화식) 툴링을위한 최고의 데이터베이스 일 것입니다. 사용자 생성, SQL 실행, 데이터베이스 백업 등 ... 일반적으로 postgres에서는 기본적으로이 기능을 개발 설정 스크립트 또는 자동화 된 CI 구성에 통합하는 것이 매우 간단합니다.


1

bash 및 expect를 사용한 완전히 자동화 된 방법 ( 이 예 에서는 OS 및 postgres 런타임 레벨 모두에서 새로 프로비저닝 된 postgres pw를 사용하여 새 postgres 관리자를 프로비저닝합니다)

  # the $postgres_usr_pw and the other bash vars MUST be defined 
  # for reference the manual way of doing things automated with expect bellow
  #echo "copy-paste: $postgres_usr_pw"
  #sudo -u postgres psql -c "\password"
  # the OS password could / should be different
  sudo -u root echo "postgres:$postgres_usr_pw" | sudo chpasswd

  expect <<- EOF_EXPECT
     set timeout -1
     spawn sudo -u postgres psql -c "\\\password"
     expect "Enter new password: "
     send -- "$postgres_usr_pw\r"
     expect "Enter it again: "
     send -- "$postgres_usr_pw\r"
     expect eof
EOF_EXPECT

  cd /tmp/
  # at this point the postgres uses the new password
  sudo -u postgres PGPASSWORD=$postgres_usr_pw psql \
    --port $postgres_db_port --host $postgres_db_host -c "
  DO \$\$DECLARE r record;
     BEGIN
        IF NOT EXISTS (
           SELECT
           FROM   pg_catalog.pg_roles
           WHERE  rolname = '"$postgres_db_useradmin"') THEN
              CREATE ROLE "$postgres_db_useradmin" WITH SUPERUSER CREATEROLE
              CREATEDB REPLICATION BYPASSRLS 
 PASSWORD '"$postgres_db_useradmin_pw"' LOGIN ;
        END IF;
     END\$\$;
  ALTER ROLE "$postgres_db_useradmin" WITH SUPERUSER CREATEROLE
  CREATEDB REPLICATION BYPASSRLS 
PASSWORD  '"$postgres_db_useradmin_pw"' LOGIN ;
 "

0

TLDR :

많은 시스템에서 사용자 계정에는 종종 마침표 또는 일종의 펑션 (사용자 : john.smith, horise.johnson)이 포함됩니다. 이 경우 위의 허용 된 답변을 수정해야합니다. 변경하려면 사용자 이름을 큰 따옴표로 묶어야합니다.

Example:

ALTER USER "username.lastname" WITH PASSWORD 'password'; 

합리적 :

Postgres는 '큰 따옴표'를 사용할 때와 '단일 따옴표'를 사용할 때에 상당히 까다 롭습니다. 일반적으로 문자열을 제공 할 때는 작은 따옴표를 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.