Debian 上 pgAdmin 用户权限设置
一 概念与准备
- 明确两类权限:
- 操作系统层:Linux 系统用户与 pgAdmin4 服务/进程的运行身份(影响能否登录 Web、读写配置与日志)。
- 数据库层:PostgreSQL 的 角色/用户 与 ACL(决定能否连接库、读写表、创建对象等)。
- 准备与安装要点(如尚未完成):
- 更新系统并安装依赖,添加 pgAdmin4 APT 仓库,安装软件包,执行 /usr/pgadmin4/bin/setup-web.sh 完成初始化,随后通过浏览器访问 http://服务器IP/pgadmin4 登录 Web 界面。以上步骤为后续权限配置的基础。
二 操作系统层权限设置
- 创建仅供 pgAdmin 使用的系统账号(可选,提升隔离性):
- 新增用户:sudo adduser pgadmin(按提示设置密码与家目录)。
- 如需以该用户运行服务,可在服务单元或反向代理配置中指定运行身份。
- 限制 pgAdmin Web 访问面:
- 仅允许内网或跳板机访问,例如使用 ufw:sudo ufw allow from 192.168.1.0/24 to any port 80,443 proto tcp;必要时仅开放 443/HTTPS。
- 建议启用 HTTPS 并配置反向代理或内置证书,避免明文传输凭据。
- 最小权限原则:
- pgAdmin 配置文件与日志目录仅对运行用户可读写;不要以 root 直接运行 pgAdmin Web 进程。
三 数据库层权限设置(通过 pgAdmin 或 psql)
- 在 pgAdmin 中创建并管理角色/用户与权限:
- 使用左侧对象浏览器定位到目标数据库/模式/表,打开对象的 Properties → ACL 或使用 ACL 权限快速设置向导 授予/回收权限(如 SELECT、INSERT、UPDATE、DELETE、USAGE、CREATE 等)。
- 常用 SQL 示例(可在 pgAdmin 的查询工具执行):
- 创建只读用户并授予对 public 模式的 USAGE 与对现有表的 SELECT:
- CREATE ROLE readonly WITH LOGIN PASSWORD ‘******’;
- GRANT USAGE ON SCHEMA public TO readonly;
- GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
- ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
- 撤销某用户对 public 模式所有表的 SELECT:
- REVOKE SELECT ON ALL TABLES IN SCHEMA public FROM user1;
- 查看角色权限与表级权限明细:
- \du+(在 psql 中查看角色与其权限)
- SELECT table_catalog, table_schema, table_name, privilege_type FROM information_schema.table_privileges WHERE grantee = ‘user1’;
- 安全删除角色(先转移对象所有权,再清理权限):
- REASSIGN OWNED BY user1 TO new_role;
- DROP OWNED BY user1;
- 最小权限实践:
- 按“最小够用”分配权限;对生产库避免使用超级用户连接;对模式与表级权限分别授予,必要时使用默认权限(ALTER DEFAULT PRIVILEGES)固化后续对象权限。
四 审计与回收
- 审计与核查:
- 使用 \du+ 查看角色权限概况;通过 information_schema.table_privileges 查询某用户在各表上的具体权限,便于核查与回收。
- 安全清理:
- 删除或交接账号前,先执行 REASSIGN OWNED 与 DROP OWNED,避免残留对象所有权与权限影响后续维护。