ubuntu pgadmin权限分配技巧
导读:Ubuntu 上 pgAdmin 权限分配技巧 一 核心原则与准备 理解 PostgreSQL 的角色 Role模型:分为可登录的登录角色与仅用于权限聚合的组角色;通过角色成员关系与INHERIT实现权限复用与继承,避免逐对象授权。 在...
Ubuntu 上 pgAdmin 权限分配技巧
一 核心原则与准备
- 理解 PostgreSQL 的角色 Role模型:分为可登录的登录角色与仅用于权限聚合的组角色;通过角色成员关系与INHERIT实现权限复用与继承,避免逐对象授权。
- 在 Ubuntu 上安装并连接:执行
sudo apt update & & sudo apt install pgadmin4,浏览器访问 http://127.0.0.1:5050 登录 pgAdmin,连接到目标 PostgreSQL(主机 localhost、端口 5432、默认管理员 postgres)。 - 规划最小权限:按“连接 → 使用 → 读写/只读”分层授权,优先用组角色封装策略,再分配给具体登录用户。
二 推荐的权限分配流程
- 创建组角色(复用策略)
- 在 pgAdmin:Servers → 目标实例 → Roles → Create → Role,勾选 NOLOGIN,在“Privileges/SQL”中授予通用权限(如
GRANT USAGE ON SCHEMA public TO dev_group;)。 - 命令行:
CREATE ROLE dev_group WITH NOLOGIN;
- 在 pgAdmin:Servers → 目标实例 → Roles → Create → Role,勾选 NOLOGIN,在“Privileges/SQL”中授予通用权限(如
- 创建登录用户并加入组
- 在 pgAdmin:Roles → Create → User,勾选 LOGIN,设置密码;在 Role Memberships 将用户加入组角色(如 dev_group)。
- 命令行:
CREATE USER dev_user WITH LOGIN PASSWORD 'SecurePass123'; GRANT dev_group TO dev_user;
- 授予数据库级入口权限
- 命令行:
GRANT CONNECT ON DATABASE mydb TO dev_user;
- 命令行:
- 授予模式与对象权限
- 命令行:
GRANT USAGE ON SCHEMA public TO dev_user; - 现有表:
GRANT SELECT, INSERT ON ALL TABLES IN SCHEMA public TO dev_group; - 未来表(默认权限):
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT ON TABLES TO dev_group;
- 命令行:
- 按需细化到列/序列/函数
- 列级:
GRANT SELECT (id, name) ON TABLE t TO dev_user; - 序列:
GRANT USAGE, SELECT ON SEQUENCE seq1 TO dev_user; - 函数:
GRANT EXECUTE ON FUNCTION f() TO dev_user;
- 列级:
- 验证
- 在 pgAdmin 的 Query Tool 以该用户执行
SELECT 1;、SELECT * FROM employees LIMIT 1;,确认权限生效。
- 在 pgAdmin 的 Query Tool 以该用户执行
三 常见场景与最小权限模板
| 场景 | 最小授权要点 | 示例 SQL |
|---|---|---|
| 只读用户 | CONNECT、USAGE、对现有与未来表的 SELECT | GRANT CONNECT ON DATABASE mydb TO r_user;
GRANT USAGE ON SCHEMA public TO r_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO r_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO r_user;
|
| 读写用户 | 在只读基础上增加 INSERT/UPDATE/DELETE | GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO rw_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT INSERT, UPDATE, DELETE ON TABLES TO rw_user;
|
| 仅访问部分表 | 仅对指定表授予权限 | GRANT SELECT, INSERT ON TABLE t1, t2 TO part_user;
|
| 应用连接账号 | 禁止登录数据库控制台,仅用于连接池/应用 | CREATE ROLE app_conn WITH LOGIN PASSWORD 'AppPass!' NOINHERIT;
GRANT CONNECT ON DATABASE mydb TO app_conn;
(按需再授予 USAGE 与对象权限) |
| 运维/DBA | 临时提升权限或分权管理 | CREATE ROLE ops WITH LOGIN PASSWORD 'OpsPass!';
GRANT pg_read_all_data, pg_write_all_data TO ops;
(谨慎授予,遵循最小权限) |
四 安全与排错要点
- 认证与访问控制
- 编辑 pg_hba.conf(位于 $PGDATA),例如:
- 本地:
local all all peer - 本机回环:
host all all 127.0.0.1/32 md5 - IPv6 回环:
host all all ::1/128 md5
- 本地:
- 使配置生效:
pg_ctl reload。
- 编辑 pg_hba.conf(位于 $PGDATA),例如:
- 默认权限与未来对象
- 使用 ALTER DEFAULT PRIVILEGES 为指定 schema 的“将来创建”的对象设置默认权限,避免每次新建表都手工授权。
- 撤销与回收
- 撤销对象权限:
REVOKE SELECT ON TABLE t FROM u; - 撤销默认权限:
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE SELECT ON TABLES FROM u;
- 撤销对象权限:
- 查看与诊断
- 在 psql 中:
\dp或\z查看对象权限;\du查看角色;\l查看数据库。
- 在 psql 中:
- 变更生效与验证
- 多数权限在 pgAdmin 保存后即生效;如未生效,可在 SQL 工具中手动执行对应 GRANT/REVOKE 并复核对象/默认权限。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu pgadmin权限分配技巧
本文地址: https://pptw.com/jishu/748183.html
