Postgresのデフォルトユーザーのパスワードを忘れたか、(インストール中に)入力ミスしました。実行できないようですが、次のようなエラーメッセージが表示されます。
psql: FATAL: password authentication failed for user "hisham"
hisham-agil: hisham$ psql
パスワードをリセットする方法はありますか、それともスーパーユーザー権限を持つ新しいユーザーを作成するにはどうすればよいですか?
私はPostgresに不慣れで、初めてインストールしたばかりです。私はRailsでそれを使用しようとしています、そして私はMac OS X Lionを実行しています。
ファイルpg_hba.conf
を見つけてください - それは例えば/etc/postgresql-9.1/pg_hba.conf
にあるかもしれません。
cd /etc/postgresql-9.1/
それをバックアップ
cp pg_hba.conf pg_hba.conf-backup
次の行を(最初のコメント化されていない行として、または唯一の行として)配置します。
以下(ローカルおよびホスト)のすべてのオカレンスについて、複製セクションを実行しない場合は、次のように変更する必要があります。MD5またはピアの共切断は存在しません。
`local all all trust`
postgreSQLサーバを再起動します(Linuxなど)。
Sudo /etc/init.d/postgresql restart
サービス(デーモン)がログファイルでレポートを開始しない場合
このビルドではローカル接続はサポートされていません
あなたは変えるべきです
local all all trust
に
Host all all 127.0.0.1/32 trust
今すぐ任意のユーザーとして接続できます。スーパーユーザーpostgres
として接続します(注、スーパーユーザー名はインストール環境によって異なる場合があります。システムによっては、pgsql
などと呼ばれることもあります。)。
psql -U postgres
または
psql -h 127.0.0.1 -U postgres
(最初のコマンドでは、常にローカルホストに接続されるわけではありません)
パスワードをリセットします( 'postgresユーザーをリセットするので、my_user_nameをpostgresに置き換えます)。
ALTER USER my_user_name with password 'my_secure_password';
古いpg_hba.conf
を元に戻す非常に危険です
cp pg_hba.conf-backup pg_hba.conf
安全なpg_hba.conf
で実行するために、サーバーを再起動してください
Sudo /etc/init.d/postgresql restart
そのpg_hbaファイルに関するさらに詳しい情報: http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf。 html
コマンドラインからpostgresに接続するときは、コマンドラインパラメータとして-h localhost
を追加することを忘れないでください。そうでなければ、postgresはPEER認証モードを使って接続しようとします。
以下は、パスワードのリセット、PEER認証によるログインの失敗、およびTCP接続を使用したログインの成功を示しています。
# Sudo -u postgres psql
could not change directory to "/root"
psql (9.1.11)
Type "help" for help.
postgres=# \password
Enter new password:
Enter it again:
postgres=# \q
失敗しました:
# psql -U postgres -W
Password for user postgres:
psql: FATAL: Peer authentication failed for user "postgres"
-h localhost
を使った作業
# psql -U postgres -W -h localhost
Password for user postgres:
psql (9.1.11)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
postgres=#
これらの答えが与えられてからpg_hba.conf
(C:\Program Files\PostgreSQL\9.3\data
)ファイルが変更されました。 Windowsで私にとってうまくいったのは、ファイルを開いてMETHOD
をmd5
からtrust
に変更することです。
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
Host all all 127.0.0.1/32 trust
# IPv6 local connections:
Host all all ::1/128 trust
それから、pgAdmin IIIを使用して、パスワードなしでログインし、postgres'
に移動してユーザーFile -> Change Password
のパスワードを変更しました。
ちょっと注意してください、Linuxでは、Sudo su - postgres
を実行してpostgresユーザーになり、そこからpsqlを使用して必要なものを変更することができます。
私はWindows 10でこの問題を抱えていましたが、私の場合の問題は、psql
を実行しているだけで、デフォルトではWindowsユーザー名(「Nathan」)でログインしようとしましたが、PostgreSQLはありませんでしたその名前のユーザー、それは私に言っていませんでした。
したがって、解決策は、単にpsql
ではなくpsql -U postgres
を実行することであり、その後、インストール時に入力したパスワードが機能しました。
ファイル/etc/postgresql/<version>/main/pg_hba.conf
を編集して、以下の行を見つけます。
local all postgres md5
行を編集し、最後のmd5
をtrust
に変更してファイルを保存します
postgresqlサービスをリロードします
$ Sudo service postgresql reload
これは設定ファイルをロードします。これでpostgres
シェルにログインしてpsql
ユーザーを変更できます。
$ psql -U postgres
postgres
ユーザーのパスワードを更新します
alter user postgres with password 'secure-passwd-here';
ファイル/etc/postgresql/<version>/main/pg_hba.conf
を編集し、trust
をmd5
に戻してファイルを保存します
postgresqlサービスをリロードします
$ Sudo service postgresql reload
パスワード変更が機能していることを確認します
$ psql -U postgres -W
最新のpostgresバージョン(> 10)用のWindowsユーザ用の回答を追加します。
あなたのpostgresのインストール場所に行き、pg_hba.conf
を検索してください、あなたはそれを..\postgres\data\pg_hba.conf
で見つけるでしょう
そのファイルをメモ帳で開き、次の行を見つけます。
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
Host all all 127.0.0.1/32 md5
# IPv6 local connections:
Host all all ::1/128 md5
#..
方法をmd5からtrustに変更します。
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
Host all all 127.0.0.1/32 trust
# IPv6 local connections:
Host all all ::1/128 trust
# ...
SQLシェル(PSQL)に行き、すべて空白のままにします。
Server [localhost]:
Database [postgres]:
Port [8000]:
Username [postgres]:
今回はパスワードの入力を求めず、ログインします。
今この行を実行してください、ALTER USER yourusername WITH SUPERUSER
今、あなたはシェルを離れることができます\ q
再度pg_hba.confファイルに行き、METHODをtrustからmd5に変更して保存します。
今すぐあなたの新しいユーザーとパスワードでログインして、あなたはその属性のために\ duをチェックすることができます。
あなたが窓にいるならば、あなたはただ走ることができます
Net User postgres postgres
そしてユーザ/パスワードとしてpostgres/postgresを使ってpostgresにログインします。
Windowsインストールの場合は、Windowsユーザーが作成されます。そして "psql"はポートへの接続にこのユーザを使います。 PostgreSQLユーザのパスワードを変更しても、Windowsのパスワードは変更されません。以下のコマンドラインジャストは、あなたがコマンドラインにアクセスできる場合にのみ機能します。
代わりに、Windows GUIアプリケーション "c:\ Windows\system32\lusrmgr.exe"を使用することができます。このアプリは、Windowsによって作成されたユーザーを管理します。これでパスワードを変更できます。
私は同じ問題を解決するためにしました:
端末からgeditエディタでpg_hba.confファイルを開きます。
Sudo gedit /etc/postgresql/9.5/main/pg_hba.conf
パスワードを要求します。管理者ログインパスワードを入力してください。これでファイルと共にgeditが開きます。次の行を貼り付けてください。
Host all all 127.0.0.1/32 trust
直下 -
# Database administrative login by Unix domain socket
保存して閉じます。端末を閉じて再度開き、次のコマンドを実行します。
psql -U postgres
これでpsqlコンソールに入ります。これを入力してパスワードを変更します。
ALTER USER [your prefered user name] with password '[desired password]';
もしuserが存在しないと言ったら、ALTER
の代わりにCREATE
を使います。
最後に、pg_hbaに貼り付けたその特定の行を削除して保存します。
ユーザーのホームディレクトリ内のファイル.pgpassまたはPGPASSFILEによって参照されるファイルには、接続にパスワードが必要な場合に使用するパスワードを含めることができます(それ以外の場合はパスワードは指定されていません)。 Microsoft Windowsでは、ファイルの名前は%APPDATA%\ postgresql\pgpass.confです(%APPDATA%はユーザーのプロファイルのApplication Dataサブディレクトリを表します)。
このファイルには、次の形式の行が含まれています。
ホスト名:ポート:データベース:ユーザー名:パスワード
(上の行をコピーしてその前に#を付けることで、ファイルにリマインダーコメントを追加することができます。)最初の4つの各フィールドは、リテラル値(*)にすることができます。現在の接続パラメータと一致する最初の行のパスワードフィールドが使用されます。 (したがって、ワイルドカードを使用しているときは、より具体的なエントリを最初に置きます。)エントリに:または\を含める必要がある場合は、この文字をエスケープします。 localhostのホスト名は、ローカルマシンからのTCP(ホスト名localhost)とUnixドメインソケット(pghost emptyまたはデフォルトのソケットディレクトリ)の両方の接続に一致します。スタンバイサーバーでは、データベース名replicationはマスターサーバーに対して行われたストリーミングレプリケーション接続と一致します。ユーザーは同じクラスター内のすべてのデータベースに対して同じパスワードを持っているため、データベースフィールドの有用性は限られています。
Unixシステムでは、.pgpassの許可はworldやgroupへのいかなるアクセスも許可してはいけません。 chmod 0600〜/ .pgpassコマンドでこれを実現してください。権限がこれより厳しくない場合、ファイルは無視されます。 Microsoft Windowsでは、ファイルは安全なディレクトリに格納されていると想定されているため、特別な権限チェックは行われません。