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

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

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

     

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

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

     

    问题出在哪里?

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

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

     

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

     


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

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

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

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

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

     

    原因

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

     

    联系我们

    • 全国统一咨询热线:400-660-8755
    • QQ咨询:点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
    • QQ群咨询:279589917
    • 邮箱:[email protected]
    • 联?#31561;耍航?#32769;师
    黑龙江快乐十分历史记录