Files
testmd/PG数据库忘记了管理员账号和密码.md

115 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
date: 2026-1-10 14:54:51
updated: 2026-1-10 14:54:51
title: PG数据库忘记了管理员账号和密码处理方式
---
## 一、核心原理(无需原密码)
PostgreSQL 支持**系统 postgres 用户免密本地登录**,这是超级管理员级别的兜底权限,完全绕过数据库层面的账号密码校验,是重置管理员账号密码的核心依据,也是官方推荐的安全重置方式。
## 二、完整重置步骤(按顺序执行,必成功)
### 步骤 1切换系统 postgres 用户,免密进入 PG 18 终端(核心)
直接执行以下命令,**无需输入任何密码**,即可登录 PG 18 数据库超级管理员终端(解决「忘记账号密码」核心问题):
```bash
# 核心命令指定18版本端口默认5432免密登录
sudo -u postgres psql -p 5432
```
✅ 执行成功后,终端会进入 PG 专属命令行,提示符变为:`postgres=#` → 表示已获取最高权限。
### 步骤 2重置「默认管理员 postgres」密码最常用
PG 默认的超级管理员账号就是 `postgres`99% 的场景重置这个账号即可,在上述 `postgres=#` 终端中执行以下 SQL直接复制
```sql
-- 重置postgres管理员密码替换【你的新密码】为自定义密码必填
ALTER USER postgres WITH PASSWORD '你的新密码';
-- 示例ALTER USER postgres WITH PASSWORD 'Pg@123456';
```
✅ 执行成功提示:`ALTER ROLE` → 密码重置完成。
### 步骤 3【兜底】若忘记自定义管理员账号 → 查看所有数据库用户
如果你的业务用了**非默认 postgres**的自定义管理员账号(忘记账号名),在 PG 终端执行以下命令,**列出所有数据库用户**,找到你的管理员账号:
```sql
-- 查看PG所有用户包含管理员/普通用户)
\du
```
✅ 输出示例(`Role name` 列就是账号名,`Superuser` 为`yes`的就是管理员):
```plaintext
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
testadmin | Superuser, Create DB | {} -- 这就是你的自定义管理员账号
```
### 步骤 4【可选】重置自定义管理员账号密码
如果步骤 3 查到了自定义管理员账号(比如`testadmin`),继续在 PG 终端执行重置命令:
```sql
-- 格式ALTER USER 你的自定义账号 WITH PASSWORD '新密码';
ALTER USER testadmin WITH PASSWORD '你的新密码';
```
### 步骤 5退出 PG 终端,配置生效
执行完所有重置操作后,输入以下命令退出 PG 终端,回到系统命令行:
```sql
\q
```
## 三、关键验证:用新密码登录测试(必做)
执行以下命令,用**重置后的账号 + 密码**登录 PG验证是否生效
```bash
# 本地连接测试(替换端口/账号/密码为你的实际信息)
psql -h 127.0.0.1 -p 5432 -U postgres -d postgres
```
执行后会提示输入密码,输入你刚设置的新密码,✅ 成功进入 `postgres=#` 终端 → 重置完成!
## 四、附加解决:远程 / 客户端仍无法用新密码连接(高频坑)
重置密码后,本地能登录但**Navicat/DBeaver/ 后端服务**无法连接,是 PG 的**访问权限配置拦截**,只需补充 2 步(适配你的 18 版本):
### 1. 放行密码认证权限(修改 pg_hba.conf
```bash
sudo vim /etc/postgresql/18/main/pg_hba.conf
```
找到文件末尾的认证规则,**确保存在以下配置**(无则手动添加):
```ini
# 允许密码方式连接(必须配置,否则新密码无效)
host all all 0.0.0.0/0 scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
```
### 2. 重启 PG 18 服务,所有配置生效
```bash
sudo systemctl restart postgresql@18-main.service
```
## 极简总结(核心命令速查)
```bash
# 1. 免密登录PG18
sudo -u postgres psql -p 5432
# 2. 重置默认管理员密码PG终端内执行
ALTER USER postgres WITH PASSWORD '你的新密码';
# 3. 退出+重启服务
\q
sudo systemctl restart postgresql@18-main.service
```
按以上步骤操作,无论你是忘记管理员**账号**、**密码**,还是两者都忘,都能 100% 重置恢复,且完美适配你的 Debian+PG18 环境!