對於一些oracle的普通用戶需要查詢某個視圖,但是因爲安全考慮不能把dba權限賦予普通用戶,那隻能把相關視圖的查詢權限賦予給普通用戶,下面就來說一下怎麼給普通用戶授予視圖的查詢權限。
1.給用戶授予某個視圖的查詢權限
SQL> grant select on v$mystat to test1;
grant select on v$mystat to test1
*
ERROR at line 1:
ORA-02030: can only select from fixed tables/views
這個錯誤可能很多人都遇到過,爲什麼會報這個錯誤呢?因爲v$這類我們經常查的視圖都是v_$開頭視圖的同義詞。
select synonym_name,table_name from dba_synonyms where synonym_name='V$MYSTAT';
SYNONYM_NAME TABLE_NAME
------------------------------ ------------------------------
V$MYSTAT V_$MYSTAT
所以我們需要直接授予用戶v_$的查詢權限
SQL> grant select on v_$mystat to test1;
Grant succeeded.
##這樣 test1用戶就擁有了 查詢v$mystat視圖的權限了
收回權限
revoke select on v_$mystat from test1;
2.給用戶授予select any dictionary權限
SQL> grant select any dictionary to test1;
Grant succeeded.
##給用戶授予select any dictionary 權限,那麼用戶就能訪問所有的視圖,不要輕易給普通用戶授予該權限。
3.給public 授予某個視圖的查詢權限
SQL> grant select on v_$database to test1;
Grant succeeded.
##這樣數據庫裏所有的用戶都具有查詢v$database視圖的權限了
4.給用戶授予select any table 權限
##如果把該權限賦予給某用戶,並且數據庫O7_DICTIONARY_ACCESSIBILITY參數值爲true,那麼用戶可以查詢數據庫裏的所有表,視圖等,不要賦予普通用戶()
5.查看用戶權限
select * from dba_sys_privs where grantee='TEST1';
select * from dba_tab_privs where grantee='TEST1';
select * from dba_role_privs where grantee='TEST1';
參考文章:http://blog.csdn.net/shaochenshuo/article/details/46362813