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

如何查询PostgreSQL数据库中拥有提升权限的用户/角色?

查询PostgreSQL中拥有表修改/创建/删除权限的用户/角色

1. 查询所有普通表的所有者

表所有者默认拥有该表的ALTER、DROP、CREATE(关联模式权限)等完整管理权限,可通过以下语句获取:

SELECT
    n.nspname AS schema_name,
    c.relname AS table_name,
    u.rolname AS owner_name
FROM
    pg_catalog.pg_class c
JOIN
    pg_catalog.pg_authid u ON c.relowner = u.oid
JOIN
    pg_catalog.pg_namespace n ON c.relnamespace = n.oid
WHERE
    c.relkind = 'r' -- 仅查询普通表,需视图可改为'v'
    AND n.nspname NOT IN ('pg_catalog', 'information_schema') -- 排除系统模式
ORDER BY
    schema_name, table_name;

2. 查询拥有表ALTER/DROP权限的角色

通过has_table_privilege函数直接校验角色对表的ALTER、DROP权限,包含继承自其他角色的权限:

-- 查询拥有ALTER权限的角色
SELECT
    n.nspname AS schema_name,
    c.relname AS table_name,
    u.rolname AS role_name,
    'ALTER' AS permission_type
FROM
    pg_catalog.pg_class c
JOIN
    pg_catalog.pg_namespace n ON c.relnamespace = n.oid
CROSS JOIN
    pg_catalog.pg_authid u
WHERE
    c.relkind = 'r'
    AND n.nspname NOT IN ('pg_catalog', 'information_schema')
    AND has_table_privilege(u.rolname, c.oid, 'ALTER')

UNION ALL

-- 查询拥有DROP权限的角色
SELECT
    n.nspname AS schema_name,
    c.relname AS table_name,
    u.rolname AS role_name,
    'DROP' AS permission_type
FROM
    pg_catalog.pg_class c
JOIN
    pg_catalog.pg_namespace n ON c.relnamespace = n.oid
CROSS JOIN
    pg_catalog.pg_authid u
WHERE
    c.relkind = 'r'
    AND n.nspname NOT IN ('pg_catalog', 'information_schema')
    AND has_table_privilege(u.rolname, c.oid, 'DROP')

ORDER BY
    schema_name, table_name, role_name, permission_type;

3. 查询拥有模式级CREATE权限的角色

创建表需要对应模式的CREATE权限,可通过以下语句获取:

SELECT
    n.nspname AS schema_name,
    u.rolname AS role_name,
    'CREATE TABLE' AS permission_type
FROM
    pg_catalog.pg_namespace n
JOIN
    pg_catalog.pg_authid u ON has_schema_privilege(u.rolname, n.nspname, 'CREATE')
WHERE
    n.nspname NOT IN ('pg_catalog', 'information_schema')
ORDER BY
    schema_name, role_name;

4. 查询超级用户角色

超级用户拥有所有数据库对象的权限,可单独排查:

SELECT rolname AS superuser_role FROM pg_catalog.pg_authid WHERE rolsuper = true;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:03:16