当前位置: 首页 > 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.lryc.cn/news/591292.html

相关文章:

  • xss防御策略
  • 从 0 到 1 玩转 XSS - haozi 靶场:环境搭建 + 全关卡漏洞解析
  • OpenCV中VideoCapture 设置和获取摄像头参数和Qt设计UI控制界面详解代码示例
  • 用Python实现神经网络(二)
  • 前端0知识docker临危之被迫弄docker教程
  • NumPy, SciPy 之间的区别
  • ota之.加密算法,mcu加密方式
  • 量化环节:Cont‘d
  • C++网络编程 6.I/0多路复用-epoll详解
  • 现在遇到一个问题 要使用jmeter进行压测 jmeter中存在jar包 我们还要使用linux进行发压,这个jar包怎么设计使用
  • cherry使用MCP协议Streamable HTTP实践
  • RSTP:快速收敛的生成树技术
  • 笔试——Day11
  • 退休时间计算器,精准预测养老时间
  • GraphQL的N+1问题如何被DataLoader巧妙化解?
  • leetcode 3202. 找出有效子序列的最大长度 II 中等
  • Spring整合MyBatis详解
  • kimi故事提示词 + deepseekR1 文生图提示
  • [yotroy.cool] 记一次 spring boot 项目宝塔面板部署踩坑
  • Qt5 与 Qt6 详细对比
  • modbus 校验
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | PasswordGenerator(密码生成器)
  • EPLAN 电气制图(十): 绘制继电器控制回路从符号到属性设置(上)
  • Everything(文件快速搜索)下载与保姆级安装教程
  • Spring IoCDI_2_使用篇
  • JAVA中的Map集合
  • Linux内存系统简介
  • AI关键词SEO最新实战全攻略提升排名
  • ubuntu--curl
  • Java学习-----消息队列