如何更改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哈希值

其他回答

要更改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

我在服务器上获得的配置进行了大量定制,只有在pg_hba.conf文件中设置了信任身份验证后,我才成功更改了密码:

local   all   all   trust

不要忘记将其改回密码或md5。

TLDR:

在许多系统中,用户的帐户通常包含句点或某种标点符号(用户:john.smith,horise.johnson)。在这些情况下,必须对上面接受的答案进行修改。更改要求用户名加上双引号。

实例

ALTER USER "username.lastname" WITH PASSWORD 'password';

理论基础:

PostgreSQL对何时使用“双引号”和何时使用“单引号”非常挑剔。通常,当提供字符串时,您将使用单引号。

更改密码:

 sudo -u postgres psql

Then

\password postgres

现在输入新密码并确认。

然后\q退出。

为postgres角色设置密码

sudo -u postgres psql

您将得到如下提示:

postgres=#

将用户postgres的密码更改为PostgreSQL

ALTER USER postgres WITH ENCRYPTED PASSWORD 'postgres';

您将获得以下内容:

ALTER ROLE

为此,我们需要编辑pg_hba.conf文件。

(请随意选择编辑器来替换nano。)

sudo nano /etc/postgresql/9.5/main/pg_hba.conf

在pg_hba.conf文件中更新

查找包含以下内容的未注释行(不以#开头的行)。间距略有不同,但单词应该相同。

    local   postgres   postgres   peer

to

    local   postgres   postgres   md5

现在我们需要重新启动PostgreSQL,以便更改生效

sudo service postgresql restart