当我在 Linux 上设置 postgresql 时,我按照一个教程操作,我认为该教程让我更改了 postgres 帐户密码,但我不知道还有更好的方法。请原谅我的无知。
当我输入“psql postgres”时,它会要求输入密码,而且只有一个密码有效。我尝试按照之前的答案,使用“\password postgres”执行“sudo passwd --lock postgres”和“sudo -u postgres psql postgres”,然后设置一个新密码(但不起作用)。
我害怕编辑 /etc/passwd 并将 * 代替密码,因为该评论的赞成票很少,而且我不知道它实际上会产生什么作用。
我尝试过的所有方法(甚至在 pg_hba.conf 中将 md5 更改为信任),在输入“sudo /etc/init.d/postgresql restart”后,psql postgres 仍然需要密码,并且只接受一个有效的密码。其他任何方法都会返回“psql:FATAL:密码验证失败”。
我能做些什么?
答案1
身份验证方法“对等”
如果你的身份验证方法peer
如下
local all postgres peer
和/或
local all all peer
然后pg_hba.conf
以 Linux 用户身份连接postgres
到数据库。
sudo -u postgres psql
即使设置了密码,您也不需要密码。
笔记: psql -U postgres postgres
以不同的 Linux 用户身份运行,postgres
在这种情况下不起作用,并且会失败psql: FATAL: Peer authentication failed for user "postgres"
。
认证方法“md5”
如果您的身份验证方法是md5
,那么您将需要正确的密码才能连接。
重设密码
注释所有以“local”开头的现有行
pg_hba.conf
并添加行local all postgres trust
重启 postgres
service postgresql restart
连接到数据库
# as any linux user psql -U postgres # or as user postgres sudo -u postgres psql
更改密码
ALTER USER postgres WITH PASSWORD 'password';
出口
\q
恢复更改
pg_hba.conf
,Debian 9.8.0 上的 postgresql 9.6 的默认设置是# Database administrative login by Unix domain socket local all postgres peer # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. #local replication postgres peer #host replication postgres 127.0.0.1/32 md5 #host replication postgres ::1/128 md5
重启 postgres
service postgresql restart
笔记2:
如果您想要更改记录的密码host
,请使用方法执行与上述相同的操作trust
并使用主机名选项进行连接psql -U postgres -h localhost postgres
。