在 CentOS 上使用 pgAdmin 管理 PostgreSQL 用户
一 环境准备与登录
- 安装与启动 pgAdmin(Web 模式,推荐):
- 添加官方仓库并安装:sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm
- 安装组件:sudo dnf install -y pgadmin4-web
- 初始化:sudo /usr/pgadmin4/bin/pgadmin4-web-setup.sh(设置管理员邮箱与密码)
- 启动与开机自启:sudo systemctl start pgadmin4 && sudo systemctl enable pgadmin4
- 访问地址:http://<服务器IP>/
- 连接目标 PostgreSQL:
- 在 pgAdmin 左侧右键 Servers → Create → Server,填写名称、主机(IP 或域名)、端口(默认 5432)、维护数据库(如 postgres)、用户名(如 postgres)与密码,保存连接。
二 创建与编辑数据库用户
- 创建登录角色(用户):
- 左侧展开 Servers → 选中已连接的服务器 → 展开 Login/Group Roles → 右键 Create → Role…
- General:填写 Name(如 newuser)
- Definition:设置 Password(建议勾选加密保存)
- Privileges:按需勾选角色属性(如 Can login、Create databases、Create roles 等)
- 保存后,该登录角色即可用于连接数据库
- 修改用户属性与权限:
- 在 Login/Group Roles 中右键目标用户 → Properties
- General:可修改用户名
- Definition:可重设密码
- Privileges / Membership:调整数据库级权限,或将用户加入某个角色以继承权限。
三 授予与回收对象权限
- 授予数据库权限(示例):
- 展开目标数据库(如 mydb)→ 右键 Properties → 切换到 Privileges 或 Users 页签
- 选择或添加目标用户,勾选需要的权限(如 CONNECT、CREATE、以及对模式/表的 SELECT/INSERT/UPDATE/DELETE 等)
- 保存生效
- 回收权限(示例 SQL,可在 pgAdmin 的 Query Tool 执行):
- REVOKE ALL PRIVILEGES ON DATABASE mydb FROM newuser;
- 说明:
- 对象级权限(表、视图、序列等)通常在具体对象上设置,也可通过角色进行批量授权与回收。
四 角色与成员管理
- 创建角色(用于权限分组):
- Login/Group Roles → Create → Role…,设置角色名与通用权限(如 Can login、Create databases 等)
- 将用户加入角色(继承权限):
- 在目标用户 Properties → Membership → Add → 选择角色 → Save
- 适用场景:开发组、只读组、运维组等按职责划分权限,便于统一维护。
五 安全与常见问题
- 安全建议:
- 遵循最小权限原则,日常业务使用普通用户,超级用户(如 postgres)仅用于管理
- 在 Server → Properties → Connections 勾选 Use SSL 加密传输
- 定期审查用户与角色权限,及时回收不再使用的账户
- 远程访问与防火墙:
- 若 pgAdmin 与 PostgreSQL 不在同一主机,需确保网络可达并开放 5432/TCP
- 启用 firewalld 时放行 HTTP(80/443)与 PostgreSQL(5432):
- sudo firewall-cmd --permanent --add-service=http
- sudo firewall-cmd --permanent --add-port=5432/tcp
- sudo firewall-cmd --reload
- 故障排查要点:
- 无法登录 PostgreSQL:检查 pg_hba.conf 的认证方式(常见为 md5 或 scram-sha-256)、监听地址与端口(postgresql.conf 中 listen_addresses 与 port)
- 修改认证方式或监听后需重启 PostgreSQL 生效
- SELinux 环境下,必要时调整布尔值(如允许 httpd 访问网络)以排除访问受限问题。