oracle 把A使用者所有表的檢視許可權賦給B使用者(批量賦權)
阿新 • • 發佈:2019-01-27
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';
一般採用第三種方法,許可權控制比較精細。