如何更改PostgreSQL用户的密码?
当前回答
这在语法上类似于其他答案,但应该知道,您也可以传递密码的MD5哈希值,因此您不会发送纯文本密码。
以下是以明文形式更改用户密码的一些意外后果。
如果您没有SSL并且正在远程修改,则您正在通过网络传输纯文本密码。如果将日志记录配置设置为记录DDL语句log_statement=DDL或更高,则您的纯文本密码将显示在错误日志中。如果您没有保护这些日志,这是一个问题。如果您收集这些日志/ETL并将其显示在其他人可以访问的位置,他们可能会看到此密码等。如果您允许用户管理其密码,他们会在不知不觉中向负责查看日志的管理员或低级员工透露密码。
话虽如此,以下是我们如何通过构建密码的MD5哈希值来更改用户的密码。
PostgreSQL在将密码散列为MD5时,会将密码与用户名相加,然后在得到的散列前加上文本“MD5”。示例:“md5”+md5(密码+用户名)巴什语:echo-n“passwordStringUserName”|md5sum|awk“{print”md5“$1}”输出:md5d6a35858d61d85a82ab1fb044aba9日在PowerShell中:[PSCredential]$Credential=获取凭据$StringBuilder=新对象System.Text.StringBuilder$null=$StringBuilder.Append('md5');[System.Security.Cryptography.HashAlgorithm]::Create('md5').ComputerHash([System.Text.Encoding]::ASCII.GetBytes(((从SecureStringToPlainText转换为SecureString$Credential.Password)+$Credential.UserName)))| For每个对象{$null=$StringBuilder.Append($_.ToString(“x2”))}$StringBuilder.ToString();##输出,输出md5d6a35858d61d85a82ab1fb044aba9日最后,ALTERUSER命令将如下所示使用密码“md5d6a35858d61d85e4a82ab1fb044aba9d”更改用户用户名;相关链接(请注意,我只会链接到文档的最新版本。对于旧版本,它会有一些变化,但MD5仍然支持。)创建角色密码始终以加密方式存储在系统目录中。ENCRYPTED关键字无效,但为向后兼容而被接受。加密方法由配置参数password_encryption确定。如果呈现的密码字符串已采用MD5加密或SCRAM加密格式,则无论password_encrypt如何,都会按原样存储(因为系统无法解密指定的加密密码字符串,所以请使用不同的格式对其进行加密)。这允许在转储/还原期间重新加载加密密码。密码加密的配置设置PostgreSQL密码验证文档构建PostgreSQL密码MD5哈希值
其他回答
以及Bash和expect的完全自动化方式(在本例中,我们在OS和PostgreSQL运行时级别为新的PostgreSQL管理员提供新设置的PostgreQL密码):
# The $postgres_usr_pw and the other Bash variables 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' executable 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 ;
"
使用此项:
\password
输入该用户的新密码,然后确认。如果您不记得密码,并且想更改密码,您可以以“postgres”登录,然后使用此选项:
ALTER USER 'the username' WITH PASSWORD 'the new password';
要更改PostgreSQL用户的密码,请执行以下步骤:
登录psql控制台:sudo-u postgres psql然后在psql控制台中,更改密码并退出:postgres=#\密码postgres输入新密码:<新密码>postgres=#\q
或者使用查询:
ALTER USER postgres PASSWORD '<new-password>';
或在一行中
sudo -u postgres psql -c "ALTER USER postgres PASSWORD '<new-password>';"
注:
如果这不起作用,请通过编辑/etc/postgresql/9.1/main/pg_hba.conf重新配置身份验证(路径将不同)并更改:
local all all peer # change this to md5
to
local all all md5 # like this
然后重新启动服务器:
sudo service postgresql restart
要在没有密码的情况下登录,请执行以下操作:
sudo -u user_name psql db_name
如果您忘记了重置密码:
ALTER USER user_name WITH PASSWORD 'new_password';
我认为更改密码的最佳方法是使用:
\password
在Postgres控制台中。
根据ALTER USER文档:
使用此命令。密码将在cleartext,并且它也可能记录在客户端的命令历史记录中或服务器日志。psql包含可以使用的命令\密码在不暴露明文密码的情况下更改角色的密码。
注意:ALTER USER是ALTER ROLE的别名
推荐文章
- Postgres唯一约束与索引
- 使用电子邮件地址为主键?
- 选择postgres中字段的数据类型
- 如何在PostgreSQL中查看视图的CREATE VIEW代码?
- 错误:没有唯一的约束匹配给定的键引用表"bar"
- 如何使用新的PostgreSQL JSON数据类型中的字段进行查询?
- 如何彻底清除和重新安装postgresql在ubuntu?
- 分组限制在PostgreSQL:显示每组的前N行?
- IN与PostgreSQL中的ANY运算符
- PSQLException:当前事务被中止,命令被忽略,直到事务块结束
- 添加布尔列到表集默认
- 库未加载:/usr/local/opt/readline/lib/libreadline.6.2.dylib
- Git凭据助手-更新密码
- 为什么我们需要像RabbitMQ这样的消息代理而不是像PostgreSQL这样的数据库?
- 在PostgreSQL表已经创建后,我可以添加UNIQUE约束吗?