PostgreSQL:PostgreSQLのユーザーパスワードを変更する方法


回答:


1406

パスワードなしのログインの場合:

sudo -u user_name psql db_name

忘れた場合にパスワードをリセットするには:

ALTER USER user_name WITH PASSWORD 'new_password';

126
これにより、ユーザーのpostgresqlコマンド履歴でパスワードをクリアできます。
12年

118
@greg:削除してください:rm ~/.psql_history
RickyA 2013年

43
トピックから外れていますが、「ユーザーの名前を変更する方法」を探している人がいる場合ALTER USER myuser RENAME TO newname;...何らかの理由で、グーグルで検索しているときにgoogleがここを指していました:)
同等8

10
"と 'の両方の引用符を使用するのはなぜですか?つまり、違いがあり、DMLクエリでは文字列を処理するときに'を使用する必要がありますが、ここで両方を使用する特別な理由はありますか?
Boyan

7
ユーザーは文字列ではなくオブジェクトです。ALTER TABLE "table_name"またはSELECT * FROM "table_name"と比較してください。これらのコンテキストではテーブルを使用して一重引用符を使用することはできず、ユーザー/ロールについても同じです。
Pダディ

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コマンド履歴にパスワードを残すよりもはるかに優れています。
オトカン

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
マーティン

34

Linuxコマンドラインを使用してパスワードを変更するには、次のコマンドを使用します。

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

5
これはおそらくdbのユーザーパスワードをコマンド履歴に保存することを覚えておいてください。
ペドロ・コーデイロ

2
ここで環境変数を使用できますか?これをデプロイスクリプトで自動化したい
TheRealChx101

26

パスワードを変更するには

 sudo -u postgres psql

その後

\password postgres

新しいパスワードを入力して確認してください

その後\q、終了します


1
この答えは私を助けます。ありがとう
モハマドジャワドバラティ

24

Postgresql Configに移動し、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($ version、$ cluster、$ db、$ port 、$ホスト); ' ご協力いただきありがとうございます!
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 2017年

このpg_hba.confファイルはどこに行くべきですか?
JMStudios.jrichardson 2017

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

私の場合、Ubuntu 14.04にpostgres 10.3がインストールされています。次の手順を実行する必要があります

  • su - postgres ユーザーを切り替える postgres
  • psql postgresシェルに入る
  • \password 次にパスワードを入力してください
  • \q シェルセッションを終了するには
  • 次に、実行してrootに戻り、次の行があることを確認しexitpg_hba.conf(mineは/etc/postgresql/10/main/pg_hba.conf)を構成します。

    local all postgres md5

  • postgresサービスを再起動します service postgresql restart
  • 次に、postgresユーザーに切り替えて、再度postgresシェルに入ります。パスワードの入力を求められます。

パスワードを変更した後でpostgresqlサービスを再起動する必要は本当にないと思います。パスワードを再起動するとリセットできました。\ passwordが最も簡単な方法です。または、ALTER USERコマンドが必要です。
Archit Kapoor 2018

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(パスワード+ユーザー名)

  • バッシュで:

    ~$ 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に関係なくそのまま保存されます(指定された暗号化パスワード文字列を復号化して別の形式で暗号化することはできないため)。これにより、ダンプ/復元中に暗号化されたパスワードをリロードできます。

  • 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に実験001というスーパーユーザーが作成されます。

(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 and 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.