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

【Oracle】Oracle权限迷宫破解指南:2步定位视图依赖与授权关系

在Oracle数据库中,视图(View)是数据库对象中非常重要的一部分,它不仅可以简化复杂查询,还能增强数据安全性。然而,在日常维护或权限管理中,我们常常会遇到这样的问题:某个表上有哪些视图依赖?这些视图又被授予了哪些用户?

今天,我们就来聊聊两个非常实用的Oracle系统视图:DBA_DEPENDENCIESDBA_TAB_PRIVS,并结合实际SQL语句,带你轻松掌握如何查看视图的依赖关系和权限分配。


一、问题背景:视图从何而来?又授权给了谁?

1.1 查看某个表上创建了哪些视图

在数据库中,一个表可能被多个视图引用。如果你是DBA或者系统管理员,想了解某个表被哪些视图所依赖,可以通过 DBA_DEPENDENCIES 视图来查找。

SELECT OWNER,NAME,TYPE,REFERENCED_OWNER,REFERENCED_NAME,REFERENCED_TYPE,REFERENCED_LINK_NAME,DEPENDENCY_TYPE
FROM dba_dependencies
WHERE referenced_name = 'TABLE_NAME';

查询结果字段说明:

字段名字段含义描述
OWNER依赖对象的拥有者(即创建该对象的用户),如视图、函数、存储过程等的创建者
NAME依赖对象的名称,例如视图名、函数名、存储过程名等。表示该对象依赖于某个对象(如表)
TYPE依赖对象的类型,常见的类型有 VIEW(视图)、FUNCTION(函数)、PROCEDURE(存储过程)等
REFERENCED_OWNER被引用对象的拥有者(即该依赖对象所依赖的对象的创建者),如表的拥有者
REFERENCED_NAME被引用对象的名称,例如表名、视图名等,表示当前查询中依赖的原始对象名称
REFERENCED_TYPE被引用对象的类型,如 TABLE(表)、VIEW(视图)、FUNCTION(函数)等
REFERENCED_LINK_NAME如果被引用的对象是远程数据库对象(通过数据库链接访问),则显示数据库链接名称,否则为 NULL
DEPENDENCY_TYPE依赖关系类型,通常是 HARD(硬依赖),表示编译时明确依赖,某些情况下也可能是 SOFT(软依赖)

📌 示例解释:
如果某条记录中 name = 'EMPLOYEE_INFO'type = 'VIEW'referenced_name = 'EMPLOYEES',表示视图 EMPLOYEE_INFO 依赖于表 EMPLOYEES


1.2 查看某个视图被授予了哪些用户和权限

SELECT GRANTEE,OWNER,TABLE_NAME,GRANTOR,PRIVILEGE,GRANTABLE,HIERARCHY
FROM dba_tab_privs
WHERE owner = 'USERNAME' AND table_name = 'TABLE_NAME';

查询结果字段说明:

字段名字段含义描述
GRANTEE被授予权限的用户或角色名称,即该权限的接收者
OWNER被授权对象(表或视图)的拥有者,即创建该对象的用户
TABLE_NAME被授权的表名或视图名称,表示对哪个对象授予了权限
GRANTOR授予权限的用户,即谁执行了 GRANT 操作
PRIVILEGE授予的具体权限类型,如 SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)等
GRANTABLE是否允许被授权用户将权限再授予他人,值为 YES 或 NO
HIERARCHY是否允许在层级权限中使用,例如在授予 SELECT 权限时,是否允许授予对子表的访问权限。通常为 NO

📌 示例解释:
如果某条记录中 GRANTEE = 'SALES'PRIVILEGE = 'SELECT'GRANTABLE = 'YES',表示用户 SALES 被授予了对该视图的查询权限,并且可以将该权限再授予其他用户。

二、进阶技巧:结合视图与权限分析,打造权限审计利器

你可以将这两个查询结合起来,形成一个完整的“视图依赖与授权”分析脚本,用于权限审计或系统维护。

SELECTd.name AS view_name,d.type AS view_type,d.referenced_name AS base_table,d.referenced_type AS base_type,p.grantee,p.privilege,p.grantable
FROMdba_dependencies d
LEFT JOINdba_tab_privs p
ONd.name = p.table_name AND d.owner = p.owner
WHEREd.referenced_name = 'EMPLOYEES';

查询结果字段说明:

字段名字段含义描述
view_name视图名称
view_type视图类型,如 VIEW、FUNCTION 等
base_table视图所依赖的基础表名
base_type基础对象的类型,如 TABLE、VIEW 等
grantee被授权用户(如果未授权则为 NULL)
privilege授予的权限类型(如 SELECT、INSERT)
grantable是否允许再授权(YES/NO)

📌 用途:
该查询可以用于一次性查看某个表被哪些视图引用,以及这些视图又被授予了哪些用户,适用于权限审计、系统维护等场景。

📌 一句话总结:

DBA_DEPENDENCIES 告诉你对象之间的“关系网”,DBA_TAB_PRIVS 告诉你权限的“流向图”,两者结合,可以全面掌握数据库对象的依赖与权限分布。


如果你是DBA、系统管理员或者数据库开发人员,掌握这两个视图的使用,将极大提升你在数据库维护、权限管理、安全审计等方面的能力!

📌 推荐扩展阅读:

  • ALL_DEPENDENCIES:查看当前用户有权限访问的依赖关系。
  • ALL_TAB_PRIVS:查看当前用户可访问的权限授予情况。
  • USER_DEPENDENCIES / USER_TAB_PRIVS:仅查看当前用户拥有的对象依赖与权限。
http://www.xdnf.cn/news/16325.html

相关文章:

  • QML WorkerScript
  • 高版本Android跨应用广播通信实例
  • MBPO 算法:让智能体像人一样 “先模拟后实操”—强化学习(17)
  • Linux进程间通信:管道机制全方位解读
  • 卫星物联网:使用兼容 Arduino 的全新 Iridium Certus 9704 开发套件深入探索
  • 如何判断钱包的合约签名是否安全?
  • MySQL基础02
  • 常见半导体的介电常数
  • 【ROS1】09-ROS通信机制——参数服务器
  • 接口多态之我的误解
  • 高可用架构模式——异地多活设计步骤
  • k8s之ingress定义https访问方式
  • 精通Python PDF裁剪:从入门到专业的三重境界
  • Vue工程化 ElementPlus
  • 分布式推客系统开发全解:微服务拆分、佣金结算与风控设计
  • 强制缓存与协商缓存
  • 如何衡量测试的有效性?(如缺陷发现率、逃逸率等)
  • Transformer 位置编码对比
  • pytorch-geometric包(torch_scatter、torch_sparse、torch_cluster)
  • 【性能测试】Jmeter+Grafana+InfluxDB+Prometheus Windows安装部署教程
  • 保障工业核心命脉:深度解读工业交换机QoS的“智能流量治理”之道
  • LeetCode 刷题【12. 整数转罗马数字】
  • Spring Bean生命周期七步曲:定义、实例化、初始化、使用、销毁
  • Android Studio历史版本快速下载(二次修改记录)
  • 面试150 搜索二维矩阵
  • Android集成Google Map
  • 黑马头条项目详解
  • springboot项目如何写出优雅的service?
  • AI时代,我的编程工作搭子
  • TreeMap一致性哈希环设计与实现 —— 高可用的数据分布引擎