PostgreSQL: PostgreSQL kullanıcı şifresi nasıl değiştirilir?


Yanıtlar:


1406

Daha az şifre girişi için:

sudo -u user_name psql db_name

Unuttuysanız şifreyi sıfırlamak için:

ALTER USER user_name WITH PASSWORD 'new_password';

126
Bu, kullanıcının postgresql komut geçmişindeki parolayı temizlemenizi sağlar.
greg

118
@greg: bu yüzden sil:rm ~/.psql_history
RickyA

43
konu dışı ama eğer do daha "nasıl kullanıcının adını değiştirmek için" arayan herkes ALTER USER myuser RENAME TO newname;ben :) o googling zaman google beni buraya işaret ediyordu nedense ...
equivalent8

10
Neden hem "hem de" tırnak işaretlerini kullanıyorsunuz? Demek istediğim, bir fark var ve bir DML sorgusunda dizelerle uğraşırken kullanmanız gerekiyor, ancak ikisini burada kullanmanın özel bir nedeni var mı?
Boyan

7
Kullanıcı bir dize değil, bir nesnedir. ALTER TABLE "table_name" ve hatta SELECT * FROM "table_name" ile karşılaştırın. Tablolarla bu bağlamlarda tek tırnak kullanamazsınız ve bu, kullanıcılar / roller için de geçerlidir.
P Daddy

630

Sonra şunu yazın:

$ sudo -u postgres psql

Sonra:

\password postgres

Sonra çıkmak için psql:

\q

Bu işe yaramazsa, kimlik doğrulamasını yeniden yapılandırın.

Düzenle /etc/postgresql/9.1/main/pg_hba.conf(yol farklı olacaktır) ve değiştirin:

    local   all             all                                     peer

için:

    local   all             all                                     md5

Ardından sunucuyu yeniden başlatın:

$ sudo service postgresql restart

3
postgres için varsayılan şifre nedir? yanlışlıkla değiştirdi; sıfırlamak mümkün mü?
Saad

2
(psql 9.2'de) yazdığımda \pbana şifreyi veriyor; Eğer bunu \password postgres\p extra argument "assword" ignored; \p extra argument "postgres" ignored
girersem

1
Bu, SQL komut geçmişinde parolayı bırakmaktan daha iyidir.
otocan

1
@ZacharyScott Ne diyorsun?
TheRealChx101

2
Linux'ta postgres kullanıcısının şifresini değiştirmek için:sudo passwd postgres
Punnerud

88

Kullanıcıların parolasını şifreleyebilirsiniz ve almalısınız:

ALTER USER username WITH ENCRYPTED PASSWORD 'password';

45
Bu anahtar kelime mevcut sürüm için önemli değil. Gönderen 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
Dikkat! @ John29 yorumu sadece Postgresql 10 ve üstü için geçerlidir. Diğer tüm versiyonlar için ENCRYPTED bayrağı önemlidir.
phep

51

Şifreyi değiştirmenin en iyi yolunun sadece kullanmak olduğuna inanıyorum:

\password

Postgres konsolunda.

Kaynak:

Bu komutla şifrelenmemiş bir parola belirlerken dikkatli olunmalıdır. Parola sunucuya açık metin olarak aktarılır ve istemcinin komut geçmişine veya sunucu günlüğüne de kaydedilebilir. psql, açık metin parolasını göstermeden bir rolün parolasını değiştirmek için kullanılabilecek bir komut \ parola içerir.

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


8
Bu, diğer kullanıcılar için şifreleri değiştirmek için de kullanılabilir:\password username
Martin

34

Linux komut satırını kullanarak parolayı değiştirmek için şunu kullanın:

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

5
Bunun db kullanıcı parolasını muhtemelen komut geçmişinize kaydedeceğini unutmayın.
Pedro Cordeiro

2
Burada ortam değişkenlerini kullanabilir misiniz? Ben bir dağıtım komut dosyasında otomatikleştirmek istiyorum
TheRealChx101 21:19

26

Parolayı Değiştirmek İçin

 sudo -u postgres psql

sonra

\password postgres

şimdi Yeni Parola girin ve Onaylayın

sonra \qçıkmak


1
bu cevap bana yardım et. teşekkürler
mohammad jawad Barati

24

Postgresql Yapılandırma ve Düzenleme sayfanıza gidin pg_hba.conf

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

Sonra bu satırı değiştirin:

Database administrative login by Unix domain socket
local      all              postgres                                md5

kime:

Database administrative login by Unix domain socket
local   all             postgres                                peer

sonra SUDO komutu ile PostgreSQL hizmetini yeniden başlatın ve

psql -U postgres

Şimdi girilecek ve Postgresql terminalini göreceksiniz

sonra gir

\password

ve Postgres varsayılan kullanıcı için YENİ Parolayı girin, Parolayı Başarıyla değiştirdikten sonra tekrar pg_hba.conf adresine gidin ve değişikliği "md5" olarak geri alın

şimdi olarak giriş yapacaksın

psql -U postgres

yeni şifrenizle.

İçinde herhangi bir sorun bulursan haber ver.


user@user-NC10:~$ psql -U postgres psql: FATAL: Peer authentication failed for user "postgres"
GM

Tamam, Başka bir yöntem yap sudo su - postgres psql Terminali girecek ve oradaki şifreyi değiştireceksiniz. Bunun için alternatif bir yol var. Bunun sizin için uygun olup olmadığını veya tam bir açıklamaya ihtiyacınız olduğunu bildirin
Murtaza Kanchwala

mm denedim ama başka bir hata var: / usr / bin / psql: line 19: use: komut bulunamadı / usr / bin / psql: line 21: use: komut bulunamadı / usr / bin / psql: line 23: use: komut bulunamadı / usr / bin / psql: line 24: use: komut bulunamadı / usr / bin / psql: psql: line 26: beklenmedik belirtecimin yanında sözdizimi hatası $version,' /usr/bin/psql: psql: line 26: ($ sürüm, $ cluster, $ db, $ port , $ host); ' yardımın için teşekkürler!
GM

11

Postgres kullanıcısı için yeni bir şifre istemek (komutta göstermeden):

sudo -u postgres psql -c "\password"

9

Sunucumda yaptığım yapılandırma çok özelleştirildi ve şifreyi yalnızca dosyada güven kimlik doğrulaması ayarladıktan sonra değiştirmeyi başardım :pg_hba.conf

local   all   all   trust

Bunu tekrar şifre veya md5 olarak değiştirmeyi unutmayın


1
değişikliklerin yürürlüğe girmesi için postgres hizmetinizi de yeniden başlatmanız gerekirsudo systemctl restart postgresql.service
Sampath Surineni 28:17

bu pg_hba.conf dosyası nereye gitmeli?
JMStudios.jrichardson

8

Bu nasıl bir kullanıcıyı yeniden adlandırmak için bakıyordu google ilk sonuç oldu, yani:

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

Kullanıcı yönetimi için faydalı birkaç komut daha:

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

Kullanıcıyı başka bir gruba taşıma

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

7

Postgres 10.3 yüklü Ubuntu 14.04 benim durumum için. Aşağıdaki adımları izlemem gerekiyor

  • su - postgres kullanıcı olarak postgres
  • psql postgres kabuğuna girmek
  • \password sonra şifrenizi girin
  • \q kabuk oturumundan çıkmak
  • Sonra yürüterek köküne geri dönmek exitve keşfetmenize yapılandırmak pg_hba.conf(maden olan /etc/postgresql/10/main/pg_hba.confaşağıdakilerden emin hattı yaparak)

    local all postgres md5

  • Postgres hizmetinizi şu şekilde yeniden başlatın: service postgresql restart
  • Şimdi postgreskullanıcıya geçin ve postgres kabuğunu tekrar girin. Sizden şifre istenecektir.

Şifreyi değiştirdikten sonra gerçekten postgresql hizmetini yeniden başlatmanız gerektiğini düşünmüyorum. Şifreyi yeniden başlatarak sıfırlayabildim. \ password en hızlı yoldur. Ya da ALTER USER komutuna ihtiyacınız vardır.
Archit Kapoor

3

bunu kullan:

\password

söz konusu kullanıcı için istediğiniz yeni şifreyi girin ve ardından onaylayın. Şifreyi hatırlamıyorsanız ve değiştirmek istiyorsanız postgres olarak giriş yapabilir ve ardından bunu kullanabilirsiniz:

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

3

Sözdizimindeki diğer yanıtlara benzer, ancak düz metin parola iletmemek için parolanın md5'ini de geçirebileceğiniz bilinmelidir.

Aşağıda, kullanıcı parolasını düz metin olarak değiştirmenin istenmeyen sonuçlarına ilişkin birkaç senaryo verilmiştir.

  1. SSL'niz yoksa ve uzaktan değişiklik yapıyorsanız, düz metin şifresini ağ üzerinden aktarıyorsunuz demektir.
  2. Günlüğe kaydetme yapılandırmanız DDL Deyimlerini log_statement = ddlveya daha yüksek bir günlüğü kaydetmek üzere ayarlandıysa , düz metin parolanız hata günlüklerinizde görünecektir.
    1. Bu günlükleri korumıyorsanız, bu bir sorun.
    2. Bu günlükleri toplar / ETL olarak toplar ve başkalarının erişebileceği yerlerde görüntülerseniz, bu şifreyi vb. Görebilirler.
    3. Bir kullanıcının parolasını yönetmesine izin verirseniz, bilmeden günlükleri gözden geçirmekle görevlendirilmiş bir yöneticiye veya alt düzey bir çalışana bir parola ortaya çıkarır.

Bununla birlikte, parolanın bir md5'ini oluşturarak bir kullanıcının parolasını nasıl değiştirebileceğimiz açıklanmaktadır.

  • Parolayı md5 olarak hash ettiğinde kaydeder, parolayı kullanıcı adıyla tuzlar, ardından ortaya çıkan karma değerine "md5" metnini ekler.
  • ör .: "md5" + md5 (şifre + kullanıcı adı)

  • Bash'da:

    ~$ echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'
    md5d6a35858d61d85e4a82ab1fb044aba9d
  • PowerShell'de:
    [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
  • Sonunda emrimiz ALTER USERşöyle görünecek
    ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
  • Alakalı Bağlantılar (Not: Eski değişiklikler için yalnızca dokümanların en son sürümlerine bağlayacağım, ancak md5 yine de geri dönüş yollarını destekliyor.)
  • rol oluştur
  • Parola her zaman sistem kataloglarında şifrelenmiş olarak saklanır. ENCRYPTED anahtar kelimenin hiçbir etkisi yoktur, ancak geriye dönük uyumluluk için kabul edilir. Şifreleme yöntemi password_encryption yapılandırma parametresi tarafından belirlenir. Sunulan şifre dizesi zaten MD5 şifreli veya SCRAM şifreli biçimdeyse, password_encryption'dan bağımsız olarak olduğu gibi saklanır (sistem, belirtilen şifreli şifre dizgisinin şifresini farklı bir biçimde şifrelemek için şifresini çözemediğinden). Bu, döküm / geri yükleme sırasında şifrelenmiş parolaların yeniden yüklenmesini sağlar.

  • password_encryption için yapılandırma ayarı
  • postgres şifre kimlik doğrulama doc
  • bina postgres şifre md5

1

Genel olarak, sadece db ile ilgili aktivite yapmak için pg admin UI kullanın.

Bunun yerine, yerel gelişiminiz için veritabanı kurulumunu otomatikleştirmeye veya CI vb.

Örneğin, bunun gibi basit bir kombo kullanabilirsiniz.

(a) Şuna benzer bir komutla jenkinler aracılığıyla bir kukla süper kullanıcı oluşturun:

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

Bu size dg postgres içinde exper001 adlı süper bir kullanıcı yaratacaktır.

(b) NON-Interactive SQL komutu çalıştırarak bu kullanıcıya bir şifre verin.

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

Postgres muhtemelen komut satırı (etkileşimli olmayan) takımlar için en iyi veritabanıdır. Kullanıcılar oluşturmak, SQL çalıştırmak, veritabanını yedeklemek vb. ... Genel olarak postgres ile oldukça basittir ve bunu geliştirme kurulum komut dosyalarınıza veya otomatik CI yapılandırmasına entegre etmek genel olarak oldukça önemlidir.


1

ve bash ve bekle ile tam otomatik yöntem ( bu örnekte , hem işletim sisteminde hem de postgres çalışma zamanı düzeyinde yeni sağlanan postgres pw ile yeni bir postgres yöneticisi sağlıyoruz)

  # 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:

Birçok sistemde, bir kullanıcının hesabı genellikle bir dönem veya bir tür işlev içerir (kullanıcı: john.smith, horise.johnson). Bu durumlarda, yukarıdaki kabul edilen cevapta bir değişiklik yapılması gerekecektir. Değişiklik için kullanıcı adının çift tırnak içine alınması gerekir.

Example:

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

Akılcı:

Postgres ne zaman 'çift tırnak' ve ne zaman 'tek tırnak' kullanılacağına dair oldukça seçici. Genellikle bir dize sağlarken tek bir alıntı kullanırsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.