Debian系统pgAdmin权限设置
导读:Debian 上 pgAdmin 权限设置 一 权限模型与前置准备 权限分为两层: 操作系统层:控制谁能登录 Debian、谁能访问 pgAdmin 的 Web 服务与配置文件; PostgreSQL 层:控制数据库角色对库、模式、表、...
Debian 上 pgAdmin 权限设置
一 权限模型与前置准备
- 权限分为两层:
- 操作系统层:控制谁能登录 Debian、谁能访问 pgAdmin 的 Web 服务与配置文件;
- 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; - 权限:对目标 schema 的
USAGE与对表的SELECT;对序列的USAGE, SELECT;必要时对视图SELECT。
- 角色:
- 读写应用用户(业务写入):
- 角色:
app_rw; - 权限:目标 schema 的
USAGE, CREATE;对表的SELECT, INSERT, UPDATE, DELETE;对序列的USAGE, SELECT, UPDATE。
- 角色:
- 管理员(维护/迁移):
- 使用 postgres 或具备相应对象所有权的角色;
- 避免将应用账号设为超级用户。
- 安全删除离职人员账号:
- 先
REASSIGN OWNED转移其名下对象,再DROP OWNED清理残留权限,最后删除角色。
- 先
五 安全加固与运维建议
- 强制 HTTPS 与强口令策略,限制数据库与 pgAdmin 的对外暴露面;
- 通过 Nginx/Apache 反向代理统一接入与鉴权,必要时结合企业 SSO/LDAP;
- 定期审计:
- 角色与权限清单:
\du+、表级权限查询; - 对关键对象设置 REVOKE 基线并回归测试;
- 角色与权限清单:
- 变更前备份(含数据库与 pgAdmin 配置),变更后在测试环境验证。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian系统pgAdmin权限设置
本文地址: https://pptw.com/jishu/768901.html
