资讯动态

1-4 用户、角色与权限体系:role/user、grant/revoke、角色继承实战

发布时间:2026/10/27 18:38:57 来源:尧图企业网站定制
系列专栏PostgreSQL 从零到生产实战教程阅读前置无基础门槛适合PG初学者、后端开发、运维工程师核心收获彻底搞懂PG角色与用户区别、权限分级库级/Schema级/对象级、GRANT/REVOKE授权撤销、角色继承机制、pg_hba.conf访问控制全配置全程可落地实战。很多开发者在使用PostgreSQL时权限管理一直是高频踩坑点分不清Role和User、授权后不生效、子角色无法继承父角色权限、本地能连远程连不上数据库等问题。本文从零拆解PG完整权限体系从核心概念、权限分级、命令实操、角色继承、访问控制配置全方位讲解所有代码可直接复制运行看完彻底吃透PG权限底层逻辑与实战用法。一、PG核心概念Role 与 User 的本质区别1.1 核心底层逻辑PostgreSQL没有独立的用户体系所有账号统一为Role角色我们常说的User只是具备LOGIN登录权限的特殊Role。官方定义User Role LOGIN 属性这是区别于MySQL的核心关键点MySQL用户和角色是分离体系。1.2 两类角色详细对比角色类型核心属性使用场景创建语句普通Role角色组默认 NOLOGIN无登录权限仅用于权限归集统一管理权限批量授权给多个用户不直接登录数据库CREATE ROLE 角色名;User登录用户具备 LOGIN 属性可密码登录数据库业务账号、开发账号、运维登录账号CREATE USER 用户名;1.3 超级用户与普通用户权限差异1. 超级用户Superuser默认超级用户为postgres拥有数据库所有权限不受权限规则限制可修改系统配置、访问所有数据、授权所有权限。创建自定义超级用户CREATE ROLE admin_super WITH LOGIN PASSWORD 123456 SUPERUSER;生产环境严禁随意创建超级用户仅保留默认postgres超级用户即可。2. 普通用户无SUPERUSER属性默认仅拥有自身默认权限所有库、表、Schema操作均需要手动授权是业务系统的主流账号类型。-- 标准普通业务用户 CREATE ROLE dev_user WITH LOGIN PASSWORD dev123 INHERIT;二、PG权限三级体系库级、Schema级、对象级PostgreSQL权限严格分为三个层级权限自上而下生效高级权限不包含低级权限需要单独授权这是权限踩坑的核心原因。2.1 库级权限Database 级别控制用户对整个数据库的连接、创建子对象权限核心权限CONNECT、CREATE、TEMPORARY。常用实战授权-- 授予用户连接指定数据库权限 GRANT CONNECT ON DATABASE test_db TO dev_user; -- 授予用户在数据库中创建Schema权限 GRANT CREATE ON DATABASE test_db TO dev_user;2.2 Schema级权限模式级别Schema是数据库的子命名空间相当于“文件夹”控制用户对Schema的使用、创建对象权限核心权限USAGE、CREATE。高频坑点用户有库连接权限无Schema USAGE权限依然无法查询表数据。-- 授予Schema访问权限必须授权否则查表报错 GRANT USAGE ON SCHEMA public TO dev_user; -- 授予Schema内创建表、视图权限 GRANT CREATE ON SCHEMA public TO dev_user;2.3 对象级权限表/视图/函数 级别精准控制单表、单视图的增删改查、修改结构权限是最小粒度权限控制。核心权限SELECT、INSERT、UPDATE、DELETE、ALTER、TRUNCATE等。-- 授予单表增删改查权限 GRANT SELECT,INSERT,UPDATE,DELETE ON TABLE user_info TO dev_user; -- 授予Schema下所有表的查询权限批量授权 GRANT SELECT ON ALL TABLES IN SCHEMA public TO dev_user;三、核心命令实战GRANT 授权 / REVOKE 撤销权限3.1 GRANT 两种核心用法GRANT在PG中有两大场景授予对象权限、授予角色成员关系角色继承核心。1. 授予数据库对象权限语法GRANT 权限列表 ON 对象类型 对象名 TO 角色/用户;全量实战示例-- 1. 库级授权 GRANT CONNECT ON DATABASE test_db TO dev_user; -- 2. Schema级授权 GRANT USAGE,CREATE ON SCHEMA public TO dev_user; -- 3. 对象级批量授权 GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO dev_user;2. 授予角色归属权限角色继承前置将父角色授予子用户让子用户继承父角色所有权限。-- 创建父角色权限组无登录权限 CREATE ROLE dev_group NOLOGIN; -- 将父角色授予普通用户完成权限绑定 GRANT dev_group TO dev_user;3.2 REVOKE 撤销权限实战REVOKE是GRANT的反向操作可精准撤销各级权限、角色归属语法与GRANT完全对应。-- 撤销表查询权限 REVOKE SELECT ON TABLE user_info FROM dev_user; -- 撤销Schema访问权限 REVOKE USAGE ON SCHEMA public FROM dev_user; -- 撤销用户的角色归属取消继承权限 REVOKE dev_group FROM dev_user;四、PG角色继承机制核心重点4.1 继承核心规则1、角色默认开启INHERIT继承属性可自动继承所属父角色的所有权限2、若角色设置NOINHERIT则不会自动继承父角色权限必须手动切换角色才能使用3、权限继承支持多级嵌套A继承BB继承CA自动拥有C权限。4.2 完整继承实战案例业务场景创建超级权限组、只读权限组多个用户批量继承组权限统一管控。-- 1. 创建层级角色组 CREATE ROLE read_group NOLOGIN; -- 只读组 CREATE ROLE write_group NOLOGIN; -- 读写组 -- 2. 给父角色授权 GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_group; GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO write_group; -- 3. 创建普通用户默认INHERIT开启 CREATE ROLE user1 WITH LOGIN PASSWORD user1123; CREATE ROLE user2 WITH LOGIN PASSWORD user2123; -- 4. 绑定角色自动继承权限 GRANT read_group TO user1; GRANT write_group TO user2; -- 5. 验证user1仅能查询user2可增删改查4.3 NOINHERIT 特殊场景实战适用于需要临时切换权限、禁止自动继承的高安全场景-- 创建禁止自动继承的用户 CREATE ROLE temp_user WITH LOGIN PASSWORD temp123 NOINHERIT; -- 绑定父角色权限组 GRANT write_group TO temp_user; -- 此时temp_user默认无write_group权限需要手动切换角色 SET ROLE write_group; -- 切换后可使用所有权限退出切换重置角色 RESET ROLE;五、pg_hba.conf 访问控制配置详解连接权限管控前面讲解的是数据库内部权限而pg_hba.conf是PG的外部访问控制白名单控制「谁能连接、从哪连接、用什么方式连接数据库」是远程连接失败的核心配置文件。5.1 配置文件位置Linux默认路径/var/lib/pgsql/版本号/data/pg_hba.confDocker环境挂载目录下的data文件夹Windows安装目录/data/pg_hba.conf5.2 配置语法规则单行配置格式数据库 用户名 客户端地址 认证方式核心字段说明数据库指定可连接的数据库名all代表所有库用户名指定可连接的角色/用户all代表所有用户客户端地址IP/网段0.0.0.0/0代表所有IP认证方式md5密码认证、trust免密、peer本地认证5.3 生产常用配置模板# 1. 本地本机免密登录默认配置 local all all peer # 2. 局域网所有IP密码登录开发环境常用 host all all 192.168.0.0/16 md5 # 3. 所有外网IP密码登录生产谨慎开启 host all all 0.0.0.0/0 md5 # 4. 指定用户、指定IP访问指定数据库最安全生产配置 host test_db dev_user 10.0.0.0/24 md55.4 配置生效与常见问题修改配置后必须重载生效无需重启数据库-- SQL命令重载 SELECT pg_reload_conf();常见报错解决远程连接提示 no pg_hba.conf entry百分百是该文件未添加对应IP白名单。六、生产权限最佳实践1、角色分层管理禁止直接给业务用户授权创建只读/读写/管理员角色组用户继承角色权限2、最小权限原则普通用户不授予SUPERUSER、CREATE等高危权限按需分配库、Schema、表权限3、默认开启INHERIT业务用户默认开启继承简化权限管理高安全场景按需关闭4、严格管控pg_hba.conf生产禁止0.0.0.0/0全局放行仅开放业务服务器IP网段5、定期清理权限及时回收离职人员账号、废弃角色权限避免权限冗余。七、配套代码GitHub开源地址本文所有实战SQL脚本、pg_hba.conf配置模板、权限测试案例已上传GitHub可直接下载复用GitHub仓库地址可自行替换个人仓库地址包含内容用户、角色批量创建脚本三级权限授权/撤销完整脚本角色继承多级嵌套实战案例生产级pg_hba.conf配置文件总结1、PG中User是带LOGIN属性的Role角色用于权限归集用户用于实际登录2、权限分为库级、Schema级、对象级三级独立授权缺一不可3、GRANT/REVOKE管控权限与角色归属INHERIT属性决定权限是否自动继承4、pg_hba.conf控制外部连接权限是远程连接报错的核心排查点5、生产优先使用角色继承管理权限实现批量、统一、安全的权限管控。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑