1. 程式人生 > >把檢視查詢許可權授予普通使用者

把檢視查詢許可權授予普通使用者

  可以一些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';

##注意從public 收回相關表的查詢許可權,以及收回select any table許可權後要檢查資料庫中是否有procedure,package,function失效,如果有需要重新編譯

$ORACLE_HOME/rdbms/admin/utlrp.sql