温馨提示×

centos上pgadmin如何管理权限

小樊
36
2025-12-13 17:43:11
栏目: 智能运维

在 CentOS 上用 pgAdmin 管理权限的完整指南

一 概念与准备

  • 权限分为三层:
    1. 系统层:操作系统用户与端口访问;2) pgAdmin 层:pgAdmin 自身的登录与用户(用于登录 Web 界面);3) PostgreSQL 层:数据库对象权限(库、模式、表、函数等)。
  • 常用端口与环境:pgAdmin 4 Web 默认端口为 5050(若以 Web 模式部署,也可能使用 80/443);PostgreSQL 默认端口 5432
  • 建议:避免使用 postgres 超级用户直接对外操作,遵循最小权限原则,通过角色统一管理权限。

二 系统与服务访问配置

  • 防火墙放行:
    • 放行 pgAdmin 端口(示例为 5050):
      sudo firewall-cmd --permanent --add-port=5050/tcp
      sudo firewall-cmd --reload
    • 若以 Web 模式部署并启用 80/443
      sudo firewall-cmd --permanent --add-port=80/tcp
      sudo firewall-cmd --permanent --add-port=443/tcp
      sudo firewall-cmd --reload
  • SELinux:
    • 允许 httpd 与数据库网络连通(常见于 pgAdmin Web 服务场景):
      sudo setsebool -P httpd_can_network_connect_db 1
  • 启动服务:
    • 启动 pgAdmin 服务:sudo systemctl start pgadmin4
    • 启动/重启 PostgreSQL:sudo systemctl start|restart postgresql
  • 访问测试:浏览器打开 http://<服务器IP>:5050(或 http://<服务器IP>/pgadmin4 若以 Web 模式部署)。

三 在 pgAdmin 中管理 PostgreSQL 用户与角色

  • 登录 pgAdmin:使用安装时设置的 pgAdmin 主密码 登录 Web 界面。
  • 创建登录角色/用户:
    • 左侧对象浏览器 → Login/Group Roles → 右键 CreateLogin/Group Role
    • 在“Definition”页设置:用户名、密码;在“Privileges”页可勾选 LOGIN、必要时勾选 CREATEDB/CREATEROLE;在“Membership”页可将用户加入现有角色以实现权限复用。
  • 创建组角色(用于权限分组):
    • 新建角色,不勾选 LOGIN,在“Members”页添加成员用户;后续对组角色授予权限,组成员自动继承。
  • 分配权限(库/模式/表/函数):
    • 方式一(图形界面):在目标对象(如数据库、模式、表)上右键 Properties → PermissionsAdd → 选择用户/角色 → 勾选权限(如 CONNECT、USAGE、SELECT、INSERT、UPDATE、DELETE、EXECUTE、ALL)→ Save
    • 方式二(SQL 编辑器):在 pgAdmin 的 Query Tool 执行 GRANT/REVOKE,见下文示例。
  • 验证权限:
    • 在 psql 中:\du 查看角色;\z 表名 查看表权限;连接测试是否能按预期访问对象。

四 常用权限 SQL 示例(可在 pgAdmin Query Tool 执行)

  • 创建只读角色并授予到用户:
    CREATE ROLE readonly NOLOGIN;
    GRANT CONNECT ON DATABASE mydb TO readonly;
    GRANT USAGE ON SCHEMA public TO readonly;
    GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
    – 将来新建表也自动可 SELECT(可选)
    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
    GRANT readonly TO db_user;
  • 创建读写角色并授予到用户:
    CREATE ROLE readwrite NOLOGIN;
    GRANT CONNECT ON DATABASE mydb TO readwrite;
    GRANT USAGE ON SCHEMA public TO readwrite;
    GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO readwrite;
    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO readwrite;
    GRANT USAGE, CREATE ON SCHEMA public TO readwrite;
    GRANT readwrite TO dev_user;
  • 数据库级授权(谨慎授予 ALL):
    GRANT ALL PRIVILEGES ON DATABASE mydb TO admin_user;
  • 撤销权限:
    REVOKE ALL PRIVILEGES ON DATABASE mydb FROM some_user;
    REVOKE SELECT ON TABLE mytable FROM readonly;
  • 将用户加入角色(权限继承):
    GRANT readonly TO report_user;
    GRANT readwrite TO app_user;
  • 常用检查:
    \du
    \z mytable

五 访问控制与安全加固

  • 基于主机的访问控制(pg_hba.conf):
    • 仅允许内网网段访问所有库:
      host all all 192.168.1.0/24 md5
    • 本地使用 peer/md5
      host all all 127.0.0.1/32 md5
    • 修改后重载:sudo systemctl reload postgresql
  • SSL 加密(postgresql.conf):
    ssl = on
    ssl_cert_file = ‘/var/lib/pgsql/data/server.crt’
    ssl_key_file = ‘/var/lib/pgsql/data/server.key’
  • 安全建议:
    • pgAdmin 主密码 与数据库账户设置强密码;
    • 避免使用 postgres 超级用户作为应用连接账户;
    • 通过角色实现权限复用与最小化授权;
    • 定期审计:在 psql 使用 \du、\z 或查询系统视图(如 pg_roles、information_schema.table_privileges)核对权限;
    • 定期更新系统与软件包:sudo yum update -y。

0