1. 程式人生 > >oracle 把A使用者所有表的檢視許可權賦給B使用者(批量賦權)

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

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