【恩墨学院】SYS都无能为力?那些同义词的故事...

SYS都无能为力?那些同义词的故事

编辑手记:事实上即使在SYS用户下建立同名的同义词,指向同一个远端数据库的同一个用户,S_2同义词仍然在ALL_SYNONYMS中不会出现,对于同义词S_2而言,SYS用户和TEST用户访问的时候依赖的数据库链并不相同,即使两个数据库链是等同的,对于同义词访问而言也是不同的。本文转载自杨廷琨老师的博客。

 

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

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

 

问题出在哪里?

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

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

 

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

 


恩墨学院-专注oracle大数据培训

恩墨学院-专注oracle大数据培训

恩墨学院-专注oracle大数据培训

 恩墨学院-专注oracle大数据培训

上面的测试模拟了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_2ALL_SYNONYMS中不出现是正常的。

 

联系我们

  • 全国统一咨询热线:400-660-8755
  • QQ咨询:点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
  • QQ群咨询:279589917
  • 邮箱:training@enmotech.com
  • 联系人:姜老师