在 CentOS 上用 pgAdmin 管理权限的完整指南
一 概念与准备
- 权限分为三层:
- 系统层:操作系统用户与端口访问;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 → 右键 Create → Login/Group Role。
- 在“Definition”页设置:用户名、密码;在“Privileges”页可勾选 LOGIN、必要时勾选 CREATEDB/CREATEROLE;在“Membership”页可将用户加入现有角色以实现权限复用。
- 创建组角色(用于权限分组):
- 新建角色,不勾选 LOGIN,在“Members”页添加成员用户;后续对组角色授予权限,组成员自动继承。
- 分配权限(库/模式/表/函数):
- 方式一(图形界面):在目标对象(如数据库、模式、表)上右键 Properties → Permissions → Add → 选择用户/角色 → 勾选权限(如 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。