精简版:
我得到:
错误:连接到套接字“/var/run/postgresql/.s.PGSQL.5432”上的服务器失败:致命:用户“admin”的对等身份验证失败
当我尝试createdb --username admin --password mynewdb
......但我在 Linux 和 PostgreSQL 中都创建了“管理员”用户,所以我不明白为什么我不能使用它们。
长版:
我正在尝试创建一个“管理员”用户来在全新的 Ubuntu/AWS 机器上运行 SQL。我创建了用户
$ sudo useradd -g admin admin
然后我使用以下方法设置他们的密码:
$ sudo passwd admin
我知道密码设置正确,因为我可以通过输入密码切换到“管理员”用户,其中:
$ su - admin
我还为用户创建了一个数据库角色,其中:
CREATE ROLE admin WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'samepassword';
我可以看到用户是用\du
(从内部psql
)创建的:
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
admin | Superuser, Create role, Create DB | {}
此外,我可以从我的pg_hba.conf
文件中确认 Postgres 应该使用该用户的“peer”(即系统)密码:
local all all peer
为了安全起见,我重新启动了 Postgres:
sudo service postgresql restart
但是,尽管有上述所有情况,当我尝试使用该“管理员”用户创建一个新数据库时,系统createdb
会提示我输入密码两次,然后失败:
$ createdb --username admin --password mynewdb
Password:
Password:
createdb: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed:
FATAL: Peer authentication failed for user "admin"
我已经尝试阅读有关此错误的其他 SO 答案,但它们都建议我尝试过的事情(即更改pg_hba.conf
、重新启动 Postgres 等)但是,我有点像 Postgres 新手,所以如果有人有任何进一步的建议我很想听听他们的意见。
正如 Stack Overflow 上的某个人有帮助地解释的那样,仅仅添加
--username admin
参数是不够的;您还必须以该用户身份登录(在您的操作系统中)。