oracle 把A用戶所有表的查看權限賦給B用戶(批量賦權)

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';

一般採用第三種方法,權限控制比較精細。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章