sol*_*anv 1266

对于密码少登录:

sudo -u user_name psql db_name
Run Code Online (Sandbox Code Playgroud)

如果您忘记了重置密码:

ALTER USER user_name WITH PASSWORD 'new_password';
Run Code Online (Sandbox Code Playgroud)

  • 这样就可以在用户的​​postgresql命令历史记录中清除密码. (114认同)
  • @greg:所以删除它:`rm~/.psql_history` (101认同)
  • 关于主题,但如果有人正在寻找"如何更改用户的名称"而不是`ALTER USER myuser RENAME to newname;`...出于某种原因谷歌在我谷歌搜索时指向我这里:) (36认同)
  • 为什么你同时使用"和"引号?我的意思是,有一个区别,在DML查询中你必须使用'处理字符串时,但是有一个特殊的理由在这里使用它们吗? (9认同)
  • 用户是对象,而不是字符串.与ALTER TABLE"table_name"或甚至SELECT*FROM"table_name"进行比较.您不能在这些上下文中使用单引号与表,并且它与用户/角色相同. (7认同)
  • @RickyA也不要忘记清除db日志,这些日志密码也可能包含明文密码. (5认同)
  • 如果您在“psql”中使用“\password”命令,那么历史记录将不包含密码。(至少在 9.2.24 版本中) (5认同)
  • @greg @RickyA而不是删除整个`.psql_history`,在'ALTER USER`之前用一些空格发出命令就足够了,它不会存储在`.psql_history`中.同样方便的技巧也可以在标准shell中使用. (4认同)
  • 请使用"加密密码" (3认同)
  • @Natim来自文档:`密码始终以加密方式存储在系统目录中.ENCRYPTED关键字没有效果,但是为了向后兼容性而被接受.但是您可以发送加密密码:`如果提供的密码字符串已经是MD5加密或SCRAM加密格式,那么它将按原样存储,而不管它是什么password_encryption .https://www.postgresql.org/docs/current/static/sql-createrole.html (3认同)
  • 使用单引号'作为角色名称不起作用,但我仍然好奇为什么? (2认同)
  • @RickyA删除文件并不意味着密码会在系统上被删除很难,可以通过取证来找到像photorec这样的东西,所以你需要"shred"它等等...... (2认同)
  • @DragonRock不会帮你解决SSD问题,甚至可能更新版本的ext. (2认同)
  • ### 如果用户包含句点,请使用双引号。 (2认同)

小智 574

然后输入:

$ sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)

然后:

\password postgres
Run Code Online (Sandbox Code Playgroud)

然后退出psql:

\q
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请重新配置身份验证.

编辑/etc/postgresql/9.1/main/pg_hba.conf(路径将有所不同)并更改:

    local   all             all                                     peer
Run Code Online (Sandbox Code Playgroud)

至:

    local   all             all                                     md5
Run Code Online (Sandbox Code Playgroud)

然后重启服务器:

$ sudo service postgresql restart
Run Code Online (Sandbox Code Playgroud)

  • 这比将密码留在 SQL 命令历史记录中要好得多。 (7认同)
  • 什么是postgres的默认密码?意外地改变了; 可以重置? (3认同)
  • (在psql 9.2上)如果我输入“ \ p”,它将给我密码;如果我输入“ \ password postgres”,它将给出密码,然后警告“ \ p”多余的参数“ assword”;\ p忽略额外的参数“ postgres” (2认同)
  • 要在Linux中更改postgres用户的密码:`sudo passwd postgres` (2认同)

ygl*_*odt 72

您可以并且应该加密用户的密码:

ALTER USER username WITH ENCRYPTED PASSWORD 'password';
Run Code Online (Sandbox Code Playgroud)

  • 此关键字与当前版本无关.来自https://www.postgresql.org/docs/current/static/sql-createrole.html`密码始终以加密方式存储在系统目录中.ENCRYPTED关键字无效,但可以向后兼容 (36认同)
  • 为什么我不知道ENCRYPTED命令.可能不错,我不是DBA ...... (6认同)
  • 谨防!@ John29注释仅适用于Postgresql 10及更高版本。对于所有其他版本,已加密标志很重要。 (4认同)

Vik*_*ing 44

我相信更改密码的最佳方法就是使用:

\password
Run Code Online (Sandbox Code Playgroud)

在Postgres控制台中.

资源:

使用此命令指定未加密的密码时必须小心.密码将以明文形式传输到服务器,也可能记录在客户端的命令历史记录或服务器日志中.psql包含一个命令\密码,可用于更改角色的密码而不暴露明文密码.

来自https://www.postgresql.org/docs/9.0/static/sql-alterrole.html.

  • 这也可用于更改其他用户的密码:`\ password username` (6认同)

Vaj*_*tha 32

要使用Linux命令行更改密码,请使用:

sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"
Run Code Online (Sandbox Code Playgroud)

  • 请记住,这可能会将数据库的用户密码保存在您的命令历史记录中。 (3认同)
  • 你可以在这里使用环境变量吗?我想在部署脚本中自动执行此操作 (3认同)

小智 24

为postgres角色设置密码

\n
sudo -u postgres psql\n
Run Code Online (Sandbox Code Playgroud)\n

您将收到如下提示:

\n
postgres=#\n
Run Code Online (Sandbox Code Playgroud)\n

将用户postgres的密码更改为 PostgreSQL

\n
ALTER USER postgres WITH ENCRYPTED PASSWORD \'postgres\';\n
Run Code Online (Sandbox Code Playgroud)\n

你会得到如下的东西:

\n
ALTER ROLE\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

(随意用您选择的编辑器替换nano 。)

\n
ALTER USER postgres WITH ENCRYPTED PASSWORD \'postgres\';\n
Run Code Online (Sandbox Code Playgroud)\n

更新pg_hba.conf文件

\n

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

\n
ALTER ROLE\n
Run Code Online (Sandbox Code Playgroud)\n

\n
sudo nano /etc/postgresql/9.5/main/pg_hba.conf\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
    local   postgres   postgres   peer\n
Run Code Online (Sandbox Code Playgroud)\n


Mur*_*ala 22

转到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
Run Code Online (Sandbox Code Playgroud)

至 :

Database administrative login by Unix domain socket
local   all             postgres                                peer
Run Code Online (Sandbox Code Playgroud)

然后通过SUDO命令重启PostgreSQL服务

psql -U postgres

您现在将进入并将看到Postgresql终端

然后进入

\password

并为Postgres默认用户输入新密码,再次成功更改密码后转到pg_hba.conf并将更改还原为"md5"

现在你将登录为

psql -U postgres

用你的新密码.

如果你们都发现任何问题,请告诉我.


Aki*_*_MJ 14

更改密码

 sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)

然后

\password postgres
Run Code Online (Sandbox Code Playgroud)

现在输入新密码并确认

然后\q退出

  • 如果我这样做,它会提示输入密码 (4认同)

Tim*_*ria 11

如果你在窗户上。

打开pg_hba.conf文件并更改md5peer

打开cmd,输入 psql postgres postgres

然后键入\password以提示输入新密码。

有关更多信息和详细步骤,请参阅此中等帖子

  • 虽然此链接可以回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会变得无效。- [来自评论](/review/low-quality-posts/26405280) (2认同)
  • 它对我有用,使用“信任”而不是“同级” (2认同)

Nic*_*lau 9

要为postgres用户请求新密码(不在命令中显示):

sudo -u postgres psql -c "\password"
Run Code Online (Sandbox Code Playgroud)


rur*_*kyi 8

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

local   all   all   trust
Run Code Online (Sandbox Code Playgroud)

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


Sal*_*ali 8

这是谷歌的第一个结果,当我在寻找如何重命名用户时,所以:

ALTER USER <username> WITH PASSWORD '<new_password>';  -- change password
ALTER USER <old_username> RENAME TO <new_username>;    -- rename user
Run Code Online (Sandbox Code Playgroud)

其他一些有助于用户管理的命令:

CREATE USER <username> PASSWORD '<password>' IN GROUP <group>;
DROP USER <username>;
Run Code Online (Sandbox Code Playgroud)

将用户移动到另一个组

ALTER GROUP <old_group> DROP USER <username>;
ALTER GROUP <new_group> ADD USER <username>;
Run Code Online (Sandbox Code Playgroud)


小智 8

您可以通过执行以下命令行代码轻松更改密码:

sudo -u postgres psql -c "ALTER USER postgres PASSWORD '<new password>'
Run Code Online (Sandbox Code Playgroud)

但是,应该注意的是,您的未加密密码仍将以明文形式显示在命令行历史记录中。

如果使用 PostgreSQL 版本 10 或更低版本,最好也ENCRYPTED显式使用该关键字。


小智 8

对于使用命令提示符的Windows

  1. 将目录更改为/bin您的PostgreSQL安装文件夹的目录。通常我们可以使用这个命令:

    C:\Program Files\PostgreSQL\<version>\bin
    
    Run Code Online (Sandbox Code Playgroud)
  2. 以超级用户身份连接到 PostgreSQL 服务器:

    psql -U postgres
    
    Run Code Online (Sandbox Code Playgroud)
  3. 执行以下命令修改超级用户密码:

    ALTER USER postgres WITH PASSWORD 'new_password';
    
    Run Code Online (Sandbox Code Playgroud)


Chr*_*are 7

用这个:

\password
Run Code Online (Sandbox Code Playgroud)

为该用户输入您想要的新密码,然后确认。如果您不记得密码并想更改它,您可以以 postgres 身份登录,然后使用以下命令:

ALTER USER 'the username' WITH PASSWORD 'the new password';
Run Code Online (Sandbox Code Playgroud)


小智 6

更改 PostgreSQL 用户的密码是相当简单的任务。启动 Postgres 后,使用以下命令。

ALTER ROLE username   
WITH PASSWORD 'password';
Run Code Online (Sandbox Code Playgroud)

不要将用户名写入您要更改的用户,并在写入密码的“”中写入您想要的用户的新密码。

如需进一步了解,请访问以下文章:如何更改 PostgreSQL 用户的密码


hax*_*por 5

对于我在Ubuntu 14.04上安装了postgres 10.3的情况。我需要遵循以下步骤

  • su - postgres 切换到 postgres
  • psql 进入postgres shell
  • \password 然后输入您的密码
  • \q 退出shell会话
  • 然后,通过执行以下命令exit并配置您的pg_hba.conf(我的位置为/etc/postgresql/10/main/pg_hba.conf),切换回root用户:

    local all postgres md5

  • 重新启动您的postgres服务 service postgresql restart
  • 现在切换到postgres用户并再次输入postgres shell。它将提示您输入密码。


jkd*_*dba 5

这在语法上与其他答案类似,但应该知道您也可以传递密码的MD5哈希值,因此您不是传输纯文本密码。

\n

以下是一些以纯文本方式更改用户密码会产生意外后果的场景。

\n
    \n
  1. 如果您没有SSL并且要远程修改,则您将通过网络传输纯文本密码。
  2. \n
  3. 如果您将日志记录配置设置为记录DDL语句log_statement = ddl或更高级别,那么您的纯文本密码将显示在错误日志中。
  4. \n
  5. 如果您不保护这些日志,那么\xe2\x80\x99 就会出现问题。
  6. \n
  7. 如果您收集这些日志/ ETL并将其显示在其他人可以访问的地方,他们最终可能会看到此密码等。
  8. \n
  9. 如果您允许用户管理其密码,他们就会在不知不觉中向管理员或负责查看日志的低级别员工泄露密码。
  10. \n
\n

话虽如此,我们可以通过构建密码的 MD5 哈希值来更改用户的密码。

\n
    \n
  • PostgreSQL 在将密码哈希为 MD5 时,会使用用户名对密码加盐,然后将文本“md5”添加到生成的哈希值中。

    \n
  • \n
  • 示例:“md5”+md5(密码+用户名)

    \n
  • \n
  • 在重击中:

    \n
    echo -n "passwordStringUserName" | md5sum | awk \'{print "md5"$1}\'\n
    Run Code Online (Sandbox Code Playgroud)\n

    输出:

    \n
    md5d6a35858d61d85e4a82ab1fb044aba9d\n
    Run Code Online (Sandbox Code Playgroud)\n
  • \n
  • 在 PowerShell 中:

    \n
    [PSCredential] $Credential = Get-Credential\n\n$StringBuilder = New-Object System.Text.StringBuilder\n\n$null = $StringBuilder.Append(\'md5\');\n\n[System.Security.Cryptography.HashAlgorithm]::Create(\'md5\').ComputeHash([System.Text.Encoding]::ASCII.GetBytes(((ConvertFrom-SecureStringToPlainText -SecureString $Credential.Password) + $Credential.UserName))) | ForEach-Object {\n    $null = $StringBuilder.Append($_.ToString("x2"))\n}\n\n$StringBuilder.ToString();\n\n## OUTPUT\nmd5d6a35858d61d85e4a82ab1fb044aba9d\n
    Run Code Online (Sandbox Code Playgroud)\n
  • \n
  • 所以最后我们的ALTER USER命令看起来像

    \n
    ALTER USER UserName WITH PASSWORD \'md5d6a35858d61d85e4a82ab1fb044aba9d\';\n
    Run Code Online (Sandbox Code Playgroud)\n
  • \n
  • 相关链接(请注意,我只会链接到最新版本的文档。对于较旧的版本,它会进行一些更改,但 MD5 仍然受支持。)

    \n
  • \n
  • 创建角色

    \n
  • \n
  • \n
    \n

    密码始终以加密方式存储在系统目录中。ENCRYPTED 关键字没有任何作用,但为了向后兼容而被接受。加密方法由配置参数password_encryption决定。如果提供的密码字符串已经采用 MD5 加密或 SCRAM 加密格式,则无论 password_encryption 为何,都会按原样存储(因为系统无法解密指定的加密密码字符串,因此需要以不同的格式对其进行加密)。这允许在转储/恢复期间重新加载加密密码。

    \n
    \n
  • \n
  • 密码加密的配置设置

    \n
  • \n
  • PostgreSQL 密码认证文档

    \n
  • \n
  • 构建 PostgreSQL 密码 MD5 哈希值

    \n
  • \n
\n


Yor*_*iev 5

以及使用 Bash 和 Expect 的完全自动化方式(在本示例中,我们在操作系统和 PostgreSQL 运行时级别上为新配置的 PostgreSQL 密码配置了新的 PostgreSQL 管理员):

  # 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 ;
 "
Run Code Online (Sandbox Code Playgroud)


Fly*_*ngV 5

域名注册地址:

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

Example:

ALTER USER "username.lastname" WITH PASSWORD 'password'; 
Run Code Online (Sandbox Code Playgroud)

合理的:

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


And*_*ich 5

我使用的是 Windows(Windows Server 2019;PostgreSQL 10),因此不支持local类型连接 ( pg_hba.conf:) 。local all all peer

以下内容应该适用于 Windows 和 Unix 系统:

  1. 备份pg_hba.confpg_hba.orig.conf例如
  2. pg_hba.conf仅用此创建:host all all 127.0.0.1/32 trust
  3. 重启pg(服务)
  4. 执行psql -U postgres -h 127.0.0.1
  5. 输入(在 pgctl 控制台中)alter user postgres with password 'SomePass';
  6. pg_hba.conf从上面1恢复


小智 5

将用户“postgres”的密码更改为“postgres”:

# ALTER USER postgres WITH ENCRYPTED PASSWORD '<NEW-PASSWORD>';
Run Code Online (Sandbox Code Playgroud)