当前位置: 首页 > 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 有所不同,但通过这些系统视图可以获取到同等详细的信息。

相关文章:

  • 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变换)
  • 国家发改委:将开展市场准入壁垒清理整治行动
  • 远香湖畔“戏”味浓,“吾嘉有戏”探索戏剧与图书跨界融合
  • 特朗普激发加拿大爱国热情:大选提前投票人数创纪录,魁北克分离情绪被冲淡
  • A股三大股指涨跌互现:人形机器人产业链爆发,两市成交超1.2万亿元
  • 京东美团商战,能惠及骑手吗?
  • 同比增长1.2倍!一季度货物贸易项下跨境资金净流入2063亿美元