温馨提示×

Debian系统pgAdmin权限设置

小樊
34
2025-12-10 15:22:03
栏目: 智能运维

Debian 上 pgAdmin 权限设置

一 权限模型与前置准备

  • 权限分为两层:
    1. 操作系统层:控制谁能登录 Debian、谁能访问 pgAdmin 的 Web 服务与配置文件;
    2. PostgreSQL 层:控制数据库角色对库、模式、表、视图等的访问。
  • 建议准备:
    • 一个用于管理数据库的 超级用户角色(postgres)
    • 若干按业务划分的 受限角色
    • 一个用于登录 pgAdmin 的 操作系统用户(如仅用于访问 Web 界面)。
  • 安装与初始化(如尚未完成):
    • 安装 pgAdmin4 与 Web 模式初始化脚本;
    • 通过浏览器访问 http://服务器IP/pgadmin4,设置 pgAdmin 主密码
    • 在 pgAdmin 中“Add New Server”连接本地或远程的 PostgreSQL(主机、端口 5432、维护库 postgres、用户名与密码)。

二 操作系统层访问控制

  • 仅允许受控用户访问 pgAdmin:
    • 创建专用系统用户(示例:pgadmin),仅赋予必要权限;
    • 将需要访问 pgAdmin 的人员加入该用户组,避免直接使用 root
    • 示例:
      • 添加用户:sudo adduser pgadmin
      • 修改密码:sudo passwd pgadmin
      • 加入组:sudo usermod -aG pgadmin your_user
  • 网络与反向代理:
    • 若需对外网开放,建议用 Nginx/Apache 反向代理 并启用 HTTPS,而非直接暴露 pgAdmin 端口;
    • 示例 Nginx 片段:
      • location / { proxy_pass http://127.0.0.1:5050; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
    • 防火墙放行代理端口(如 80/443),而非直接放行 5050
  • 文件与目录权限:
    • 限制 pgAdmin 配置与日志目录的访问权限,仅允许 pgadmin 用户或 root 读取/写入。

三 PostgreSQL 层权限设置

  • 角色与数据库:
    • 创建受限角色并授予最小必要权限;
    • 示例:
      • 创建只读角色:CREATE ROLE readonly WITH LOGIN PASSWORD 'ro_pass';
      • 创建读写角色:CREATE ROLE app_rw WITH LOGIN PASSWORD 'rw_pass';
      • 创建业务库:CREATE DATABASE appdb OWNER app_rw;
  • 模式与默认权限:
    • 新建业务模式并设定默认权限,避免新对象默认被 public 访问;
    • 示例:
      • CREATE SCHEMA app AUTHORIZATION app_rw;
      • ALTER DEFAULT PRIVILEGES IN SCHEMA app GRANT SELECT ON TABLES TO readonly;
      • ALTER DEFAULT PRIVILEGES IN SCHEMA app GRANT ALL ON TABLES TO app_rw;
      • ALTER DEFAULT PRIVILEGES IN SCHEMA app GRANT USAGE, CREATE ON SCHEMAS TO app_rw;
  • 授予与回收:
    • 授予连接与模式使用:
      • GRANT CONNECT ON DATABASE appdb TO readonly, app_rw;
      • GRANT USAGE ON SCHEMA app TO readonly, app_rw;
    • 授予读写角色对现有对象权限:
      • GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA app TO app_rw;
      • GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA app TO app_rw;
    • 撤销过度授权(示例):
      • REVOKE SELECT ON ALL TABLES IN SCHEMA public FROM user1;
  • 审计与回收:
    • 查看角色权限:\du+
    • 查询表级权限明细:
      • 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;
  • 在 pgAdmin 中操作:
    • 通过“对象浏览器”定位对象,在“属性”页的 ACL 区域设置权限;
    • 可使用“ACL 权限快速设置向导”批量配置。

四 常见场景与最小权限示例

  • 只读用户(报表/查询):
    • 角色:readonly
    • 权限:对目标 schemaUSAGE 与对表的 SELECT;对序列的 USAGE, SELECT;必要时对视图 SELECT
  • 读写应用用户(业务写入):
    • 角色:app_rw
    • 权限:目标 schemaUSAGE, CREATE;对表的 SELECT, INSERT, UPDATE, DELETE;对序列的 USAGE, SELECT, UPDATE
  • 管理员(维护/迁移):
    • 使用 postgres 或具备相应对象所有权的角色;
    • 避免将应用账号设为超级用户。
  • 安全删除离职人员账号:
    • REASSIGN OWNED 转移其名下对象,再 DROP OWNED 清理残留权限,最后删除角色。

五 安全加固与运维建议

  • 强制 HTTPS 与强口令策略,限制数据库与 pgAdmin 的对外暴露面;
  • 通过 Nginx/Apache 反向代理统一接入与鉴权,必要时结合企业 SSO/LDAP
  • 定期审计:
    • 角色与权限清单:\du+、表级权限查询;
    • 对关键对象设置 REVOKE 基线并回归测试;
  • 变更前备份(含数据库与 pgAdmin 配置),变更后在测试环境验证。

0