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

PostgreSQL 中的权限视图

PostgreSQL 中的权限视图

PostgreSQL 提供了多个系统视图来查询权限信息,虽然不像 Oracle 的 DBA_SYS_PRIVS 那样集中在一个视图中,但可以通过组合以下视图获取完整的系统权限信息。

一 主要权限相关视图

Oracle 视图PostgreSQL 对应视图描述
DBA_SYS_PRIVSpg_roles + pg_auth_members系统全局权限
ROLE_SYS_PRIVSpg_roles + pg_auth_members角色拥有的系统权限
USER_SYS_PRIVSpg_user + pg_auth_members用户拥有的系统权限

二 PostgreSQL 核心权限视图

2.1 pg_roles / pg_user - 角色/用户基本信息

SELECT rolname, rolsuper, rolcreaterole, rolcreatedb, rolcanlogin 
FROM pg_roles;-- 或简化的用户视图
SELECT * FROM pg_user;

2.2 pg_auth_members - 角色成员关系

SELECT roleid::regrole AS role, member::regrole AS member, grantor::regrole AS grantor
FROM pg_auth_members;

2.3 自定义查询 (类似 DBA_SYS_PRIVS)

SELECT r.rolname AS grantee,CASE WHEN r.rolsuper THEN 'SUPERUSER'WHEN r.rolcreaterole THEN 'CREATE ROLE'WHEN r.rolcreatedb THEN 'CREATE DB'WHEN r.rolcanlogin THEN 'LOGIN'ELSE 'OTHER'END AS privilege,'SYSTEM' AS admin_option
FROM pg_roles r
WHERE r.rolsuper OR r.rolcreaterole OR r.rolcreatedb OR r.rolcanlogin;

三 特定权限检查查询

3.1 检查超级用户权限

SELECT usename FROM pg_user WHERE usesuper;

3.2 检查创建数据库权限

SELECT rolname FROM pg_roles WHERE rolcreatedb;

3.3 检查创建角色权限

SELECT rolname FROM pg_roles WHERE rolcreaterole;

3.4 检查登录权限

SELECT rolname FROM pg_roles WHERE rolcanlogin;

四 对象级权限视图

PostgreSQL 还提供对象级别的权限视图,类似于 Oracle 的 DBA_TAB_PRIVS

4.1 information_schema.role_table_grants

SELECT * FROM information_schema.role_table_grants;

4.2 information_schema.role_column_grants

SELECT * FROM information_schema.role_column_grants;

4.3 pg_namespace - schema 权限

SELECT nspname, nspowner::regrole FROM pg_namespace;

五 权限管理对比表

功能OraclePostgreSQL
超级用户DBA_SYS_PRIVS 中的 SYSDBApg_roles.rolsuper
创建角色CREATE ROLE 权限pg_roles.rolcreaterole
创建数据库CREATE DATABASE 权限pg_roles.rolcreatedb
登录权限CREATE SESSION 权限pg_roles.rolcanlogin
角色授权GRANT 语句pg_auth_members 视图

六 实用权限查询示例

6.1 综合权限报告

SELECT r.rolname AS role,CASE WHEN r.rolsuper THEN 'YES' ELSE 'NO' END AS superuser,CASE WHEN r.rolcreaterole THEN 'YES' ELSE 'NO' END AS create_role,CASE WHEN r.rolcreatedb THEN 'YES' ELSE 'NO' END AS create_db,CASE WHEN r.rolcanlogin THEN 'YES' ELSE 'NO' END AS can_login,array(SELECT b.rolname FROM pg_auth_members m JOIN pg_roles b ON m.roleid = b.oid WHERE m.member = r.oid) AS member_of
FROM pg_roles r
ORDER BY 1;

6.2 查找具有特定权限的角色

-- 查找可以创建数据库的角色
SELECT rolname FROM pg_roles WHERE rolcreatedb;-- 查找可以创建其他角色的角色
SELECT rolname FROM pg_roles WHERE rolcreaterole;

PostgreSQL 的权限系统虽然与 Oracle 有所不同,但通过这些系统视图可以获取到同等详细的信息。

http://www.dtcms.com/a/153222.html

相关文章:

  • JavaScript 异步编程与请求取消全指南
  • 11.原型模式:思考与解读
  • DMG 文件隐写
  • React Native 安卓端 android Image 播放gif webp 动态图
  • 学习MySQL的第十一天
  • 把dll模块注入到游戏进程的方法_挂起进程注入
  • c加加学习之day06->STL标准库->day01
  • 从零开始在Win上添加一块QEMU开发板(四)实现简单USART
  • AD16如何对同值元件进行排序
  • 2024武汉邀请赛B.Countless Me
  • 【Java 数据结构】泛型
  • 【银河麒麟高级服务器操作系统】磁盘只读问题分析
  • X0405-ASEMI电源AI器件专用X0405
  • C#中实现JSON解析器
  • SSH 反向隧道访问内网服务
  • 【网络】TCP/IP协议学习
  • 【蓝桥杯】可分解的正整数
  • Linux学习笔记之动静态库
  • Java基础 — 运算符与输入器
  • css3新特性第七章(3D变换)
  • OpenBMC:BmcWeb login认证
  • vscode插件系列-2、认识vscode
  • Golang 闭包学习
  • 数论知识啊
  • 电子处方模块开发避坑指南:从互联网医院系统源码实践出发
  • 办公人导航网站
  • JavaWeb:HtmlCss
  • Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素
  • STM32F407 HAL库使用 DMA_Normal 模式实现 UART 循环发送(无需中断)
  • 【axios取消请求】如何在token过期后取消未响应的请求