<< 返回文章列表

数据恢复| SYS都无能为力?那些同义词的故事

2017年12月21日
杨廷琨
2193

【云和恩墨,提供7*24最专业的数据恢复(Oracle,MySQL,SQL server)服务,致力于为您的数据库系统做最后一道安全防护!服务热线:010-59007017-7030】数据恢复|数据库运维|性能优化|安全保障|Oracle培训|MySQL培训


你在平时是否注意到这么一个现象:

SYS用户在ALL_SYNONYMS视图中查询不到其他用户同义词的信息,但是在DBA_SYNONYMS视图中可以查询到。


问题出在哪里?

那是不是数据字典出现了不一致?

因为对于SYS用户而言,没有什么对象是没有权限的,显然任何对象都应该可以在ALL_视图中查询到。


于是,做了一个简单的测试让这个问题重现。


image.png

image.png

image.png

image.png


上面的测试模拟了SYS用户在ALL_SYNONYMS视图中查询不到TEST用户的S_2同义词,但是在DBA_SYNONYMS视图中可以查询到的情况。


原因

造成这个现象的原因其实很简单,DBA开头的视图表示的数据库中存在的所有对象,显然是可以查询到S_2同义词的,而ALL开头的视图表示的当前用户下或者当前用户有权限访问的对象,对于普通同义词而言,由于SYS拥有SELECT ANY TABLE权限,因此同义词的基表对于SYS来说是有权限访问的,所以同义词也理应在ALL_SYNONYMS视图中出现,但是对于基于数据库链的同义词则不然,由于S_2同义词依赖TEST用户下的私有同义词TESTDATA,而SYS用户是没有办法访问这个数据库链的,因此S_2在ALL_SYNONYMS中不出现是正常的。