如何更改PostgreSQL用户的密码?
答案 0 :(得分:1090)
少密码登录:
sudo -u user_name psql db_name
如果忘记了,请重置密码:
ALTER USER user_name WITH PASSWORD 'new_password';
答案 1 :(得分:517)
然后输入:
$ 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
答案 2 :(得分:67)
您可以而且应该加密用户的密码:
ALTER USER username WITH ENCRYPTED PASSWORD 'password';
答案 3 :(得分:34)
我认为更改密码的最佳方法就是使用:
\password
在Postgres控制台中。
来源:
使用时指定未加密的密码时必须小心 这个命令。密码将传输到服务器中 明文,也可能记录在客户端的命令历史记录中 或服务器日志。 psql包含可以使用的命令\密码 更改角色的密码而不暴露明文密码。
来自https://www.postgresql.org/docs/9.0/static/sql-alterrole.html。
答案 4 :(得分:29)
要使用Linux命令行更改密码,请使用:
sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"
答案 5 :(得分:20)
转到Postgresql配置并编辑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
使用新密码。
如果你们都发现任何问题,请告诉我。
答案 6 :(得分:8)
答案 7 :(得分:8)
这是谷歌上的第一个结果,当时我正在寻找如何重命名用户,所以:
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>;
答案 8 :(得分:7)
要为 postgres 用户申请新密码(不在命令中显示):
sudo -u postgres psql -c "\password"
答案 9 :(得分:5)
For my case on Ubuntu 14.04 installed with postgres 10.3. I need to follow the following steps
su - postgres
to switch user to postgres
psql
to enter postgres shell\password
then enter your password\q
to quit the shell sessionThen you switch back to root by executing exit
and configure your pg_hba.conf
(mine is at /etc/postgresql/10/main/pg_hba.conf
) by making sure you have the following line
local all postgres md5
service postgresql restart
postgres
user and enter postgres shell again. It will prompt you with password.答案 10 :(得分:5)
如果您在Windows上。
打开pg_hba.conf
文件,然后从md5
更改为peer
打开cmd,输入psql postgres postgres
然后键入\password
,提示输入新密码。
Refer to this medium post了解更多信息和详细步骤。
答案 11 :(得分:5)
TLDR:
在许多系统上,用户帐户通常包含句点或某种形式的惩罚(用户:john.smith,horise.johnson)。在这些情况下,必须对上面接受的答案进行修改。更改要求将用户名加双引号。
Example:
ALTER USER "username.lastname" WITH PASSWORD 'password';
比例:
Postgres对于何时使用“双引号”以及何时使用“单引号”非常挑剔。通常,在提供字符串时,将使用单引号。
答案 12 :(得分:3)
类似于语法上的其他答案,但是应该知道,您还可以传递密码的md5,这样就不会传输纯文本密码。
在以下几种情况下,以纯文本方式更改用户密码会产生意想不到的后果。
log_statement = ddl
或更高版本,则纯文本密码将显示在错误日志中。
这就是我们要如何通过构建密码的md5来更改用户密码的方式。
例如:“ md5” + md5(密码+用户名)
bash中:
~$ echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'
md5d6a35858d61d85e4a82ab1fb044aba9d
[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';
密码始终以加密方式存储在系统目录中。 ENCRYPTED关键字无效,但是为了向后兼容而被接受。加密方法由配置参数password_encryption确定。如果显示的密码字符串已经采用MD5加密或SCRAM加密的格式,则无论password_encryption如何都将按原样存储(因为系统无法解密指定的加密密码字符串,因此无法以其他格式对其进行加密)。这样可以在转储/还原过程中重新加载加密的密码。
答案 13 :(得分:3)
更改密码
sudo -u postgres psql
然后
\password postgres
现在输入新密码并确认
然后\q
退出
答案 14 :(得分:2)
使用它:
\password
输入您希望该用户使用的新密码,然后进行确认。 如果您不记得密码并想要更改密码,则可以以postgres身份登录,然后使用:
ALTER USER 'the username' WITH PASSWORD 'the new password';
答案 15 :(得分:1)
检查pg_hba.conf
如果身份验证方法为“对等”,则客户端的操作系统用户名/密码必须与数据库用户名和密码匹配。在这种情况下,请将Linux用户“ postgres”和数据库用户“ postgres”的密码设置为相同。
有关详细信息,请参见文档:https://www.postgresql.org/docs/9.1/auth-pg-hba-conf.html
答案 16 :(得分:1)
我使用的是 Windows(Server 2019;PG 10),因此不支持 local
类型的连接 (pg_hba.conf
: local all all peer
)。
以下应该适用于 Windows 和 Unix 系统:
pg_hba.conf
备份到 pg_hba.orig.conf
例如pg_hba.conf
:host all all 127.0.0.1/32 trust
psql -U postgres -h 127.0.0.1
alter user postgres with password 'SomePass';
pg_hba.conf
答案 17 :(得分:1)
大多数答案大部分是正确的,但您需要注意小问题。我遇到的问题是我从未设置过 postgres 的密码,所以我无法登录允许我更改密码的 SQL 命令行。这些是我成功使用的步骤(注意大多数或所有命令都需要 sudo/root 用户):
pg_hba.conf
。
systemctl status postgresql@VERSION-DB_CLUSTER
轻松获取。将 VERSION 替换为您的 PSQL 版本,将 DB_CLUSTER 替换为您的数据库集群的名称。如果它是自动创建的,这可能是主要的,例如。 postgresql@13-main
。或者,我的 bash 在输入 postgresql@
后提供自动完成功能,因此您可以尝试这样做或在所有服务列表 (systemctl -a
) 中查找 postgresql 服务。获得状态输出后,查找 CGroup 之后的第二个命令行,它应该很长,并以 /usr/lib/postgresql/13/bin/postgres
或类似内容开头(取决于版本、发行版和安装方法)。您正在查找 -D
之后的目录,例如 /var/lib/postgresql/13/main
。host all all 127.0.0.1/32 trust
。这允许所有数据库上的所有用户无条件地通过本地计算机上的 IPv4 连接到数据库,而无需要求密码。这是一个临时修复,不要忘记稍后再次删除此行。为确定起见,我注释掉了 host all all 127.0.0.1/32 md5
(md5 可能被 scram-sha-256 替换),它对相同的登录数据有效,只需要一个密码。systemctl restart postgresql@...
再次使用您之前找到的确切服务。systemctl status postgresql@...
检查服务是否正确启动。-w
标志来完成。完整的命令行如下所示:sudo -u postgres psql -w -h 127.0.0.1 -p 5432
。此处,postgres
是您的用户,您可能已经更改了它。 5432
是特定于集群的服务器的端口,如果您运行多个集群(例如我有 5434),可能会更高。\password
特殊命令更改密码。答案 18 :(得分:0)
以及使用bash和Expect的全自动方式(in this example我们在操作系统和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 ;
"
答案 19 :(得分:0)
通常,只需使用pg admin UI进行数据库相关活动即可。
相反,如果您专注于为本地开发或CI等自动化数据库设置,那么...
例如,您可以使用这样的简单组合。
(a)通过类似于以下命令的jenkins创建一个虚拟超级用户:
docker exec -t postgres11-instance1 createuser --username=postgres --superuser experiment001
这将在您的postgres数据库中创建一个名为Experiment001的超级用户。
(b)通过运行NON-Interactive SQL命令为该用户提供一些密码。
docker exec -t postgres11-instance1 psql -U experiment001 -d postgres -c "ALTER USER experiment001 WITH PASSWORD 'experiment001' "
Postgres可能是用于命令行(非交互式)工具的最佳数据库。 创建用户,运行SQL,备份数据库等... 通常,对于postgres来说,这都是非常基本的,将其集成到开发设置脚本或自动CI配置中总体来说是微不足道的。