ALL_OBJECTS describes all objects accessible to the current user. 描述當前用戶有訪問權限的所有對象
DBA_OBJECTS describes all objects in the database. 描述了數據庫中的所有對象
USER_OBJECTS describes all objects owned by the current user. 描述了當前用戶所擁有的所有對象
千萬不要覺得all_*和dba_*視圖都是所有對象的意思, all_*和權限有關;
所以出現【不同用戶訪問all_objects視圖,相同過濾條件,結果不同 (例如:"A用戶訪問all_objects視圖過濾B.T1表有數據,而C用戶也訪問all_objects視圖過濾B.T1表卻沒有數據" )】是正常的,是因爲C用戶沒有訪問B.T1表權限,用dba_objects可以解決;
所以適當的選擇 dba_*和all_*視圖。
大概有三中辦法:
1:grant select any table to B;(此種方法控制不太精確,sys、system等一些表也能查看)
2:grant select on A.tableName1 to public;grant select on A.tableName2 to public;.....................(有多少個表執行多少次),此方法比較麻煩
3:隱式遊標賦權:
select 'GRANT SELECT ON A.'||object_name||' to B;' from dba_objects where owner='A' and object_type='TABLE';
一般採用第三種方法,權限控制比較精細。