当前位置: 首页 > news >正文

如何查询pg账号权限 能否创建模式 删表建表

在 PostgreSQL 中,要查询一个账号(角色)是否具备「创建模式(Schema)」「删除表」「创建表」等权限,可以分两步:


✅ 第一步:确认角色本身是否有权限

1. 查看角色是否具备 CREATE 权限(能否建表、建 Schema)
-- 查看角色是否具备数据库级的 CREATE 权限(影响能否建 Schema)
SELECT has_database_privilege('your_role_name', 'your_database_name', 'CREATE');-- 查看角色是否具备某个 Schema 的 CREATE 权限(影响能否在该 Schema 中建表)
SELECT has_schema_privilege('your_role_name', 'your_schema_name', 'CREATE');
2. 查看角色是否具备 USAGE 权限(能否访问 Schema)
SELECT has_schema_privilege('your_role_name', 'your_schema_name', 'USAGE');
3. 查看角色是否具备表级的权限(如 SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER)
-- 查看对某张表的权限
SELECT has_table_privilege('your_role_name', 'your_table_name', 'DELETE');

✅ 第二步:查看角色是否通过「角色成员身份」继承权限

如果角色是通过「属于某个组角色」来继承权限的,你还需要查它所属的组角色:

-- 查看某角色属于哪些组角色
SELECT roleid::regrole, member::regrole, admin_option
FROM pg_auth_members
WHERE member = 'your_role_name'::regrole;

然后对组角色重复第一步的权限检查。


✅ 第三步:用系统视图快速扫一遍权限

查看角色在所有 Schema 上的权限:
SELECT n.nspname AS schema_name,r.rolname AS role_name,p.perm AS privilege_type
FROM pg_namespace n
JOIN aclexplode(n.nspacl) p ON true
JOIN pg_roles r ON p.grantee = r.oid
WHERE r.rolname = 'your_role_name';
查看角色在所有表上的权限:
SELECT schemaname, tablename, privilege_type
FROM information_schema.table_privileges
WHERE grantee = 'your_role_name';

✅ 总结:判断逻辑

操作所需权限
创建 Schema数据库级的 CREATE 权限
在某 Schema 中建表Schema 的 CREATE + USAGE 权限
删除表表的 DELETE 权限(或表的所有者)
创建表Schema 的 CREATE + USAGE 权限

✅ 示例:检查用户 app_user 能否在 public 中建表

SELECT has_schema_privilege('app_user', 'public', 'CREATE') AS can_create_table;

如需更细粒度控制(如判断是否是超级用户、是否拥有 CREATEDB/CREATEROLE 等),可查:

SELECT *
FROM pg_roles
WHERE rolname = 'your_role_name';
http://www.dtcms.com/a/283783.html

相关文章:

  • Vim多列打开不同文件操作指南
  • 什么是AI-AIGC-AGI-Agent?基本概念与区别的详细解析
  • 【SAP SD】跨公司销售、第三方销售、STO采购(公司间合同配件)
  • 【困难】题解力扣23:合并K个升序链表
  • 删除百度同步空间桌面图标
  • 面试高频题 力扣 200.岛屿数量 洪水灌溉 深度优先遍历 暴力搜索 C++解题思路 每日一题
  • 用Amazon Q Developer命令行工具(CLI)快捷开发酒店入住应用程序
  • 图片画廊浏览(侧重 CSS 网格布局和模态框交互)
  • onUnload页面卸载和onPageScroll监听页面滚动
  • EPLAN 电气制图(十): 绘制继电器控制回路从符号到属性设置(上)
  • C++编程学习(第九天)
  • FastAdmin系统框架通用操作平滑迁移到新服务器的详细步骤-优雅草卓伊凡
  • btstack移植之安全配对(二)
  • 【Linux-云原生-笔记】LVS(Linux virual server)相关
  • C strtok函数应用
  • c++ 模板元编程
  • 深入解析Hadoop HDFS高可用性:原理、故障切换与元数据同步
  • 【AI论文】T-LoRA:无过拟合的单图像扩散模型定制化方案
  • MailAgentProcess.getInstance
  • 进程终止机制详解:退出场景、退出码与退出方式全解析
  • Django中get()与filter()对比
  • 3D材质总监的“光影魔法”:用Substance Sampler AI,“擦除”照片中的光影
  • 3D Gaussian Splatting (3DGS) 从入门到精通:安装、训练与常见问题全解析
  • 如何构建一个基于大模型的实时对话3D数字人?
  • 【代码随想录】+ leetcode hot100:栈与队列算法专题总结、单调栈
  • 【leetcode】852. 山脉数组的封顶索引
  • MySQL数据库主从复制
  • 如何将 ONLYOFFICE 文档集成到使用 Laravel 框架编写的 PHP 网络应用程序中
  • 7.事务操作
  • 第2章通用的高并发架构设计——2.6 高并发写场景方案1:数据分片之数据库分库分表