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

如何查询PostgreSQL物化视图的列级SELECT权限?

查询PostgreSQL物化视图的列级SELECT权限

要查看用户alice对物化视图recent_sales_mv的列级SELECT权限,可通过PostgreSQL系统目录表组合查询,以下是两种实用方案:

方式一:精准筛选目标用户的列权限

SELECT
    n.nspname AS 模式名称,
    c.relname AS 对象名称,
    a.attname AS 列名称,
    r.rolname AS 被授权用户,
    'SELECT' AS 权限类型
FROM
    pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
JOIN pg_attribute a ON c.oid = a.attrelid
JOIN pg_roles r ON a.attacl @> ARRAY[r.rolname || '=r/' || current_user::text]::aclitem[]
WHERE
    c.relname = 'recent_sales_mv'
    AND c.relkind = 'm' -- 筛选物化视图
    AND r.rolname = 'alice'
    AND a.attnum > 0 -- 排除系统列
    AND NOT a.attisdropped; -- 排除已删除列

方式二:查看所有列的权限明细

如果需要查看该物化视图所有列的完整权限记录(含其他用户权限),可使用:

SELECT
    n.nspname AS 模式名称,
    c.relname AS 对象名称,
    a.attname AS 列名称,
    unnest(a.attacl) AS 权限详情
FROM
    pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
JOIN pg_attribute a ON c.oid = a.attrelid
WHERE
    c.relname = 'recent_sales_mv'
    AND c.relkind = 'm'
    AND a.attnum > 0
    AND NOT a.attisdropped
    AND a.attacl IS NOT NULL;

关键系统表说明

  • pg_class:存储数据库对象(表、视图、物化视图等)元数据,relkind = 'm'用于定位物化视图。
  • pg_namespace:关联获取对象所属的模式。
  • pg_attribute:存储列信息,通过attnum > 0和NOT a.attisdropped过滤无效列。
  • pg_roles:记录数据库用户/角色信息,attacl是存储列权限的数组,其中=r/代表SELECT权限(r为read的缩写)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:22:10