恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Windows下忘记PostgreSQL密码?修改pg_hba.conf快速重置

  • 首页
  • 资讯中心
  • /
  • Windows下忘记PostgreSQL密码?修改pg_hba.conf快速重置

相关资讯

lo 库 Fill 函数深度解析:基于 Go 1.18+ 泛型的切片克隆填充 2026/9/13 3:46:10
adk-python 代码单元设计文档模板:为 ADK 核心模块撰写“按实现如实记录“的架构设计文档 2026/9/13 3:41:09
BT下载加速完整指南:配置109个公共Tracker列表,快速提升下载速度 2026/9/13 3:41:09

最新资讯

RCGV范式:提升AI提问效果的工程化方法
TDengine 基本概念详解:以智能电表为例掌握采集量、标签、超级表、子表与虚拟表
清除 Copilot 与 Recall 卡住了?RemoveWindowsAI 社区求助的完整排障流程
eino reasoning_content 完整指南:5 分钟拿到模型的思考过程
Shell变量详解:基础概念与高级用法
Daily Focus Board 的神经多样性友好设计:Daily Focus Board 背后 Executive-Function 设计原则全解析

今日推荐

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本周热门

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

Windows下忘记PostgreSQL密码?修改pg_hba.conf快速重置

发布时间:2026/9/13 3:46:10
Windows下忘记PostgreSQL密码?修改pg_hba.conf快速重置 1. 先搞清楚为什么改一个配置文件就能重置 postgres 密码在 Windows 上折腾 PostgreSQL 的朋友十有八九都栽过同一个跟头安装的时候图省事设了一个自以为永远忘不了的 postgres 超级用户密码结果三个月后再打开项目脑子一片空白。更尴尬的是明明这台机器上还跑着好几个服务数据库里有不少重要数据却不能删了重装——因为重装意味着数据目录清空那损失可就大了。其实 PostgreSQL 在这一点上比很多商业数据库要“宽容”得多。你不需要重装也不需要找什么密码破解工具只需要改动一个文本配置文件就能绕过现有的密码校验重新把这个“超级管理员”的钥匙拿回来。这个配置文件就是pg_hba.conf全称是 PostgreSQL Host-Based Authentication也就是基于主机的认证配置文件。pg_hba.conf的作用简单来说就是一张“访问控制表”。PostgreSQL 在允许任何客户端连接之前都会先读这张表逐行匹配“哪个 IP、哪个用户、要连哪个数据库”然后根据匹配到的规则决定使用哪种认证方式。这些认证方式包括trust完全信任不需要密码、password明文密码、md5MD5 加密密码、scram-sha-256更安全的加密方式等。重置密码的核心逻辑就是这么一句话临时把本地连接的认证方式从scram-sha-256或md5改成trust重启服务后以无密码方式登录然后执行ALTER USER重置密码最后再把配置改回去恢复安全状态。整个过程就像一个酒店前台换了临时门禁卡先让保洁进去打扫打扫完再把严格的门禁恢复。这个方案适用于 Windows 和 Linux 几乎所有主流的 PostgreSQL 版本从 9.x 到 17 都没有问题。唯一要注意的是不同版本的默认认证方式不太一样但修改pg_hba.conf的套路完全一致。这篇文章要解决的问题就是围绕“Windows 环境 PostgreSQL 默认用户 postgres 忘记密码”这一个具体场景把从找配置文件到验证新密码的每一步都给你拆开讲透。2. 实操步骤Windows 下重置 postgres 密码的完整流程2.1 第一步定位 pg_hba.conf 文件的确切位置在动手之前最关键的一件事是先搞清楚 PostgreSQL 的数据目录在哪里因为pg_hba.conf和postgresql.conf都放在数据目录下。绝大多数人忘记密码往往也顺带忘了自己当初把数据库装在了哪个盘、哪个路径所以第一步我会给你几条实用的找文件路径的方法。方法一通过 Windows 服务管理器查看。按下Win R输入services.msc回车在服务列表里找到名称类似postgresql-x64-16版本号根据你的安装情况而定的服务。右键点击选择“属性”在“可执行文件的路径”这一栏你会看到类似这样的信息D:\Program Files\PostgreSQL\16\bin\pg_ctl.exe runservice -N postgresql-x64-16 -D D:\Program Files\PostgreSQL\16\data -w这里的-D参数后面跟着的就是数据目录也就是pg_hba.conf所在的目录。方法二直接查看安装目录。大部分 Windows 安装包默认路径是C:\Program Files\PostgreSQL\版本号\data。如果你在安装时自定义过路径去你自定义的位置找即可。如果实在找不到用 Windows 的“文件资源管理器”搜索功能在安装盘内直接搜索pg_hba.conf文件文件名是这个不会变。方法三用pg_ctl查看。打开命令提示符切换到 PostgreSQL 的 bin 目录然后执行pg_ctl status -D D:\Program Files\PostgreSQL\16\data如果数据目录正确命令会返回服务运行状态和进程 ID。这个命令也能顺带验证你找到的路径到底对不对。注意数据目录是 PostgreSQL 的核心资产里面有基础数据文件、WAL 日志、配置文件等。路径没找对后面所有操作都白搭。务必先通过服务管理器确认不要靠猜。2.2 第二步备份配置改成 trust 认证方式找到pg_hba.conf后不要急着改先复制一份备份。这算是我个人的职业习惯了——凡是动数据库的配置文件备份永远是第一优先级。你可以直接在文件管理器里复制粘贴一份命名为pg_hba.conf.bak或者用命令copy D:\Program Files\PostgreSQL\16\data\pg_hba.conf D:\Program Files\PostgreSQL\16\data\pg_hba.conf.bak然后右键pg_hba.conf选择“编辑”或“打开方式”里的“记事本”。如果你装了 Notepad 或 VS Code也可以用这些编辑器打开但务必以管理员身份运行编辑器否则可能没有权限保存修改。文件打开后往下翻找到最底部以# TYPE DATABASE USER ADDRESS METHOD开头的配置区域。这一段的默认内容大致是这样的# TYPE DATABASE USER ADDRESS METHOD # local is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 # IPv6 local connections: host all all ::1/128 scram-sha-256重点来了把最后三行的认证方式全部改成trust。具体来说就是把scram-sha-256如果是旧版本可能是md5替换成trust修改后内容如下# TYPE DATABASE USER ADDRESS METHOD local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust这里解释一下为什么要三行都改。第一行的local对应 Unix 域套接字连接第二行对应 IPv4 的本地地址127.0.0.1第三行对应 IPv6 的本地回环::1。在 Windows 下psql 客户端默认通过 IPv4 的 localhost 连接所以第二行是关键但为了稳妥起见三行一起改成trust不会有任何副作用反正后面会改回来。trust认证方式的含义一句话概括只要连接来源匹配这条规则PostgreSQL 就直接放行不要求任何密码验证。所以修改为trust之后数据库在短时间内是“裸奔”状态。你不必太紧张因为我们只在本地连接而且改完后马上就把密码重置并改回安全认证了。2.3 第三步重启 PostgreSQL 服务让配置生效pg_hba.conf的修改不会自动生效必须重启 PostgreSQL 服务让进程重新加载配置。Windows 下重启服务有几种方式我按推荐程度排列方式一命令行重启。打开命令提示符建议以管理员身份运行执行net stop postgresql-x64-16 net start postgresql-x64-16注意服务名要跟你实际的服务一致可以在服务管理器里看到完整的服务名。方式二服务管理器重启。在服务管理器中选中 PostgreSQL 服务点击左侧的“重启动”链接。这个操作相当于停止再启动简单方便。方式三用 pg_ctl 重启。如果你已经定位到了 bin 目录更可控的方式是D:\Program Files\PostgreSQL\16\bin\pg_ctl.exe reload -D D:\Program Files\PostgreSQL\16\data这个命令只重新加载配置文件不会中断当前连接适合服务正在进行业务访问的场景。不过这里我建议使用 stop/start 的“硬重启”因为我们在做密码重置要确保服务以新配置完整启动。坑位预警服务管理器里点“重启”如果报错很有可能是你在配置文件里写错了内容比如把trust拼成了turst。这时候 PostgreSQL 会拒绝启动去 Windows 事件查看器里能看到具体的报错原因。改回来就能恢复正常。2.4 第四步无密码登录重置 postgres 用户密码服务成功重启后就可以打开命令提示符来执行密码重置了。先切换到 PostgreSQL 的 bin 目录cd /d D:\Program Files\PostgreSQL\16\bin然后执行psql -U postgres -h 127.0.0.1这里需要注意几个细节。-U postgres指定以超级用户 postgres 身份连接-h 127.0.0.1指的是通过 TCP/IP 连接到本地地址这样可以确保走的是host那条认证规则而不是可能的其他协议分支。不带-h参数psql 在 Windows 下会默认走 localhost 的 TCP 连接其实也问题不大但写上这个参数能让行为更明确。由于我们已经把认证方式改成了trust所以这时系统不会提示输入密码而是直接进入 SQL 交互界面。命令提示符会变成psql (16.x) Type help for help. postgres#确认你已经进入了数据库接下来执行密码重置命令ALTER USER postgres WITH PASSWORD 你的新密码;这里有一个资深建议要直接给你新密码不要用太弱的组合比如123456、postgres这类一眼就能猜出来的密码。前面既然已经花这么大功夫找回密码就别因为图省事而在安全上留下漏洞。至少包含大小写字母、数字和特殊字符长度在 12 位以上比较稳妥。比如ALTER USER postgres WITH PASSWORD MyNewPass_2025!;执行之后你会看到ALTER ROLE的响应说明密码修改成功。此时不确定是否生效的话可以执行\q退出 psql然后重新连接一次测试一下但这一步不急先继续下一步把认证配置改回来因为安全窗口不能一直开着。2.5 第五步改回认证方式重启并验证密码改完之后立刻回到pg_hba.conf文件把那三行的trust改回原来的认证方式。如果原来的配置文件被人手动改过认证方式是什么就改回什么如果是最初的默认安装那就改回scram-sha-256。注意 PostgreSQL 10 之前的旧版本默认是md510 及以上版本默认是scram-sha-256小版本之间可能会有细微差异但按原样恢复即可。修改完并保存后再次重启 PostgreSQL 服务net stop postgresql-x64-16 net start postgresql-x64-16此时重新用 psql 登录命令跟刚刚一模一样psql -U postgres -h 127.0.0.1这次系统会提示输入密码输入你在第四步设置的新密码如果能正常进入postgres#的提示符说明重置成功一切恢复正常。为了保险起见你还可以再用 pgAdmin 或者你项目里的连接串测试一下连接确认不是只有 psql 这一条路能通。重要提醒很多新手在改回配置时只改回了一部分或者把host那行改了没注意local那行结果后续应用连接报错这很难排查。所以最后一步修改完毕后仔细检查一下文件内容尤其是确认里面没有任何一行残留trust状态的规则。3. 常见问题与排查技巧实录3.1 配置文件路径找不到该怎么办忘记密码的同时往往也忘了安装路径。除了前面说的服务管理器查看方式还可以试试用 Windows 自带的“ Everything”这类的文件搜索工具或者直接在资源管理器里输入%ProgramFiles%\PostgreSQL看有没有 PostgreSQL 文件夹。如果安装时用了非默认路径搜索pg_hba.conf是最直接的办法。但有一种情况需要特别留意同一台机器上可能装了多个版本的 PostgreSQL。比如原来装了 12后来又装了 16两个版本的服务可能都在运行而你要访问的那个数据目录到底属于哪个服务不能靠猜。这时候必须回到服务管理器确认你要连接的那个 PostgreSQL 实例的-D参数指向哪里。如果两个实例的数据目录你都有权限改但pg_hba.conf文件被你弄混了改了半天连的还是另一个实例那问题就变得复杂了。所以操作之前先执行一句简单查询确认实例身份psql -U postgres -h 127.0.0.1 -p 5432 -c SHOW data_directory;如果你的实例不是默认端口 5432换成实际端口即可。这个 SQL 会直接返回当前连接的数据目录路径跟服务管理器里-D的参数做比对就能确定自己有没有找对文件。3.2 修改配置后服务启动失败把scram-sha-256改成trust之后服务重启时如果报“服务无法启动”或“进程意外终止”大概率是配置文件写错了。常见错误有几种一是拼写错误比如把trust写成turst二是修改时误删了行首的host或local关键字三是文件编码问题Windows 自带的记事本保存时会默认使用带 BOM 的 UTF-8 编码而 PostgreSQL 要求纯文本格式BOM 可能会导致解析失败。解决方式是到事件查看器中查看 PostgreSQL 的日志。打开事件查看器在“Windows 日志 → 应用程序”里找到 PostgreSQL 相关的错误条目系统会明确告诉你是哪一行哪一处出现了语法错误。如果定位不到也可以直接看 PostgreSQL 的数据目录下的log文件夹那里面有更详细的启动日志。另外修改pg_hba.conf时建议不要用 Windows 自带的记事本而是使用 VS Code、Notepad 等支持 UTF-8 无 BOM 编码的编辑器。这个细节看起来不起眼但真的拯救过不少人。3.3 改了 trust 但连接还提示要密码这种情况通常不是pg_hba.conf的问题而是连接类型没有匹配到修改的那一条规则。比如你只改了host all all 127.0.0.1/32 trust但 psql 连接时带的地址是localhost在某些网络环境下localhost会被解析成 IPv6 的::1刚好匹配到host all all ::1/128那条而那条你没改于是还是要密码。解决方式有两种第一种是把::1/128和127.0.0.1/32都改成trust前面我建议你三行全改就是为了避免这种坑第二种是在连接命令里显式指定-h 127.0.0.1强制走 IPv4 连接。如果你通过远程主机连接还得检查 ADDRESS 那列的网段是否覆盖了对方 IP。还有一个小概率场景你修改pg_hba.conf后重启的是客户端机器而不是数据库服务。这听起来很傻但在 Windows 上确实有人混淆了“重启服务”和“重启电脑”弄了半天发现配置根本就没重新加载。3.4 修改密码成功但应用连不上数据库这种情况往往是应用侧的连接串还保留着旧密码或者连接串里使用的账号不是 postgres而是其他数据库账号。在应用连接串里如果你用了userIdpostgres那么重置密码后必须同步更新连接串。如果你用的是其他账号比如app_user那这次密码重置跟该账号没有关系问题就出在别的地方。还有一种可能你应用连接 PostgreSQL 走的是专属的连接池或中间件。比如项目里有 PgBouncer它维持的数据库连接是预先创建的即使你改了密码连接池里的连接也不会立即断开但新连接可能因为旧密码缓存而失败。遇到这种场景要同时重启连接池清掉旧连接缓存。3.5 版本差异带来的问题md5 与 scram-sha-256PostgreSQL 的密码认证方式经历了几次演变。PostgreSQL 10 及之前版本默认认证方式是md5PostgreSQL 10 之后尤其是 14 开始默认变成了scram-sha-256。这两种方式在底层的加密算法不同pg_hba.conf里写的方法名也不同。重置密码时如果你在pg_hba.conf里写的是scram-sha-256但你的客户端驱动比较旧不支持该认证方式也会报错。但很多旧版本的驱动可能不支持 SCRAM-SHA-256如果在重置密码后发现老客户端连不上最直接的排查就是在配置文件里临时把认证方式换成md5试试能通的话確認就是驱动兼容性的问题了。不过要记住这种方式属于降级操作只建议在排查阶段临时使用业务长期使用还是升级驱动更靠谱。4. 一些值得知道的延伸经验4.1 如何判断你的密码是“忘了”还是“被改了”有时候不是你自己忘了密码而是有人或某个脚本改掉了 postgres 账号的密码。对于单机开发环境来说这不太常见但如果是团队共用的服务器其他人为了完成某个需求随手设置了新的数据库密码却没告诉你这种情况也时有发生。判断方法很简单如果你用旧密码连接时报“password authentication failed”而你的印象里确实没改过密码那就要考虑是不是团队协作里出现过账号变更。你也可以查看 PostgreSQL 日志看有没有可疑的ALTER USER操作记录。不过日志里默认不会记录具体 SQL 内容所以更实际的做法是把密码保管在团队共用的密码管理工具里避免个人记忆。4.2 日常应该怎么避免“忘记密码”的尴尬基于我自己的经验密码管理要借助工具而不是靠大脑。把数据库密码存在统一的密码管理器中或者写入项目的.env文件记得加入.gitignore是避免“忘记密码”的最靠谱方式。如果你有多个环境的数据库开发、测试、生产建议密码统一规则但各不相同至少不同的环境不要共用一组密码。另外安装 PostgreSQL 时设置的密码不要与操作系统用户密码相同否则一旦泄露影响面会成倍扩大。4.3 更安全的密码找回方式临时修改 pg_hba.conf 的注意事项我见过有的同事为了图方便把pg_hba.conf的本地连接长期设为trust这样开发时随时可以免密登录。我强烈不建议这么做因为一旦机器被恶意软件控制数据库就等于裸奔。正确做法是临时改、改完立刻恢复并且恢复之后最好执行一次pg_ctl reload而不是简单的 stop/start这样可以做到不中断业务。在实际生产环境的 PostgreSQL 上如果忘记了超级用户密码处理流程基本一致但要更加谨慎。生产环境操作前应联系业务方确认窗口期并且最好有人复核配置文件的修改。同一个套路在 Linux 上的操作用的是vi / pg_ctl reloadWindows 上的差别主要在路径和服务管理方式核心逻辑完全相同。4.4 Windows 下 PostgreSQL 服务管理的几个常用命令把这次用到的命令整理下来方便以后直接复制:: 查看服务状态 sc query postgresql-x64-16 :: 停止服务 net stop postgresql-x64-16 :: 启动服务 net start postgresql-x64-16 :: 用 pg_ctl 重新加载配置 D:\Program Files\PostgreSQL\16\bin\pg_ctl.exe reload -D D:\Program Files\PostgreSQL\16\data :: 用 pg_ctl 重启服务前提是服务没有以 Windows 服务方式注册 D:\Program Files\PostgreSQL\16\bin\pg_ctl.exe restart -D D:\Program Files\PostgreSQL\16\data注意pg_ctl restart和net stop / net start的效果并不完全一样。pg_ctl是直接操作实例进程如果服务已经注册成了 Windows 服务用pg_ctl restart可能会与服务管理器的状态信息不一致所以日常优先用net stop / net start更稳妥。4.5 重置密码后还需要检查的事项密码重置成功后有几件后续事项建议顺手做完。第一检查pg_hba.conf中是否还有其他不必要的信任规则。严格的生产环境里host all all 0.0.0.0/0 trust这类行是绝对禁止的。第二确认你需要连接的客户端用的是 TCP 还是 Unix 域套接字。Windows 平台通常用的是 TCP所以host规则覆盖到了就行local规则在 Windows 上几乎用不到但保留scram-sha-256也无妨。第三如果你的项目里有用到数据库迁移工具比如 Flyway 或 Liquibase它们可能缓存了数据库口令。密码重置后记得清掉这些工具的本地缓存或者更新环境变量中配置的数据库口令。第四如果是团队项目别忘了告诉大家密码已更新。可以使用公司的密码管理工具更新记录避免其他人还在用旧密码而连接失败。5. 最后的最后分享一点个人经验处理过多次“忘记 postgres 密码”的问题后我养成了一个习惯只要是新安装的 PostgreSQL第一件事就是把pg_hba.conf备份到机器的其他磁盘同时把安装路径、数据目录、服务名都记录在一个 Markdown 文件里。这样哪怕三年后再遇到这台机器也不用从零开始排查。这次在 Windows 上的处理过程中我觉得最值得注意的就是配置文件修改前的备份。因为pg_hba.conf不仅是认证配置它里面可能还有历史遗留的自定义规则比如某个应用专用的连接 IP 白名单。如果直接改完忘记备份后续排错时你根本不知道自己改了什么、影响到了什么。备份文件不会占多少空间却能在关键时刻帮你恢复环境。另外如果你在改密码的过程中遇到了一些不明原因的报错先别急着搜索把日志打开一句一句读一遍。PostgreSQL 的日志已经写得足够清晰了大多数问题的答案都在日志里。学会看日志比会背十篇教程都管用。按这个流程操作下来Windows 下重置 PostgreSQL 默认用户密码这件事理论上不会超过十五分钟。希望这篇文章能帮你顺利找回那把钥匙也希望大家以后都不要再有这个需求。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号