You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 16.0权限校验异常及跨集群权限查询问题

问题原因分析

1. \z命令查不到权限但information_schema.role_table_grants能查到

  • \z命令的显示规则限制:PostgreSQL的\z(或等效的\dp)元命令仅显示直接绑定到表对象的权限条目,且仅展示当前用户有权限查看的权限信息。比如你用dev1执行\z时,若不是超级用户、表所有者data_migration,也没有明确权限查看其他角色的权限,就看不到data_migration_ro的权限条目;而information_schema.role_table_grants会包含批量授予、角色继承的权限,因此能正常查询到。
  • 未指定Schema前缀:如果执行\z时仅输入my_table,未添加dm_backup.前缀,且当前搜索路径不包含dm_backup,PostgreSQL会找不到目标表,自然无权限结果返回。正确命令应为\z dm_backup.my_table。
  • 权限被覆盖:若表所有者data_migration在你授权后,手动修改过my_table的权限(比如撤销过相关权限),会覆盖之前通过GRANT SELECT ON ALL TABLES批量授予的权限,导致\z无法显示。

2. 非自建集群中postgres用户查询information_schema.role_table_grants失效

  • 云厂商的权限裁剪:多数云托管PostgreSQL集群(如RDS类服务)会对默认postgres用户做权限限制,不会赋予完整的超级用户权限,可能禁止其查看其他用户创建的Schema下的权限信息,导致查询返回空结果。
  • Schema权限缺失:如果非自建集群里postgres未被授予dm_backupSchema的USAGE权限,即使是管理员用户也无法查询该Schema下的表权限,需先执行GRANT USAGE ON SCHEMA dm_backup TO postgres;再尝试查询。
  • 视图的过滤逻辑:information_schema.role_table_grants本身会过滤掉当前用户无权访问的对象。若postgres在非自建集群中对dm_backup.my_table无任何访问权限,视图会直接返回空结果。

内容的提问来源于stack exchange,提问作者Bill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:52:22