☰
磐维数据库授权问题总结
2026/10/7 20:03:24 网站建设 项目流程

近期在 PanWeiDB‑V3.0‑S3.5.0 版本做 Schema 与数据表权限分配时,先后遇到两次权限报错,经过实操排查,现已定位全部诱因并且落地解决方案,现将踩坑经验、原理、命令以及注意事项整理如下,方便后续运维参考。

一、第一次故障:已经授予表查询权限,访问数据表提示 schema 权限拒绝

1. 操作经过

使用 omm 超级管理员执行下述语句,授予用户 test2 可以查询 test1 模式下全部数据表,同时配置新建表的默认权限:

GRANT SELECT ON ALL TABLES IN SCHEMA test1 TO test2; ALTER DEFAULT PRIVILEGES IN SCHEMA test1 GRANT SELECT ON TABLES TO test2;

切换至 test2 账号执行查询select * from test1.test1;,抛出permission denied for schema test1。

2. 故障根源

磐维数据库权限分为两层独立权限:Schema(模式)准入权限、数据表对象权限。

  1. GRANT SELECT仅管控数据表;
  2. 想要进入架构读取表,用户必须拥有该 Schema 的USAGE权限。

只分配表查询权限并不代表能够访问模式,因此必须单独授权架构访问权限:

GRANT USAGE ON SCHEMA test1 TO test2;

授权完成之后 test2 即可正常读取现有数据表 test1。

二、第二次故障:配置默认权限,新建数据表依旧查询报错

1. 操作经过

  1. 登录 test1 用户,在 test1 模式下新建数据表 test2;
  2. 使用 test2 访问select * from test1.test2;,提示permission denied for relation test2。

此前已经执行ALTER DEFAULT PRIVILEGES IN SCHEMA test1 GRANT SELECT ON TABLES TO test2;,预期新建数据表自动分配查询权限,实际并未生效。

2. 核心原理

ALTER DEFAULT PRIVILEGES的生效对象为当前执行这条 SQL 的数据库角色。

本次由 omm 执行默认权限配置,则规则只适用于 omm 后续新建的数据表;

数据库每个角色自带独立的新建对象默认权限策略,test1 创建数据表不会继承 omm 的默认授权规则。

3. 解决办法

语法增加FOR ROLE参数,专门指定建表用户 test1,配置它创建对象时的默认权限:

ALTER DEFAULT PRIVILEGES FOR ROLE test1 IN SCHEMA test1 GRANT SELECT ON TABLES TO test2;

配置结束之后,omm、test1 两个账号在 test1 架构下新建数据表,都会自动授予 test2 查询权限。

三、完整标准授权脚本

以后需要让普通用户读取指定 Schema 全部表格时,一次性执行全套语句,规避遗漏:

--1.授予模式进入权限 GRANT USAGE ON SCHEMA test1 TO test2; --2.授予当下已经存在所有数据表的查询权限 GRANT SELECT ON ALL TABLES IN SCHEMA test1 TO test2; --3.超级管理员omm新建表自动授权 ALTER DEFAULT PRIVILEGES IN SCHEMA test1 GRANT SELECT ON TABLES TO test2; --4.业务建表账号test1新建表自动授权 ALTER DEFAULT PRIVILEGES FOR ROLE test1 IN SCHEMA test1 GRANT SELECT ON TABLES TO test2;

四、运维排查命令

  1. 查询 Schema 权限
SELECT grantee, privilege_type FROM information_schema.schema_privileges WHERE schema_name='test1';
  1. 查询全部角色默认对象权限
SELECT * FROM pg_default_acl;

查看字段 defaclrole,可以区分不同建表角色对应的默认权限规则。

五、运维经验总结

  1. Schema USAGE 权限和表权限相互独立,访问表之前必须拥有模式准入权限;
  2. 默认新建对象权限是按角色隔离,谁执行 alter‑default‑privileges 就给谁配置规则;多账号会在同一个 schema 建表时,需要逐个配置 FOR‑ROLE;
  3. 快照引用泄漏属于软件提示告警,和权限故障无关,排查权限问题无需优先处理该日志;
  4. 分区表、子表、视图需要单独授权,普通表授权不会自动同步权限至分区子表。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询