【Oracle】-【ORA-01031】-建立基於資料字典表的檢視無許可權的問題

bisal發表於2013-08-05
執行

SQL> create or replace view redo_size as 

  2  select name, value from v$statname n, v$sesstat t, v$session s 

  3  where s.audsid = sys_context('USERENV','SESSIONID')

  4    and t.sid = s.sid

  5    and n.statistic#=t.statistic#

  6    and n.name = 'redo size';

select name, value from v$statname n, v$sesstat t, v$session s

                                                   *

ERROR at line 2:

ORA-01031: insufficient privileges


但單獨執行

SQL> select name, value from v$statname n, v$sesstat t, v$session s 

  2  where s.audsid = sys_context('USERENV','SESSIONID')

  3    and t.sid = s.sid

  4    and n.statistic#=t.statistic#

  5    and n.name = 'redo size';

NAME          VALUE

redo size      2452

是可以的。


當前使用者的許可權包括:

ALTER SESSION

CREATE SESSION

UNLIMITED TABLESPACE


網上有帖子說:

1、賦予此方案物件SELECT ANY TABLE 的許可權。-這裡嘗試後依舊報錯。

2、使用grant select on v$statname to star,嘗試後也是報錯。

3、grant select any dictionary to test;-需l給使用者授權檢視任何字典的許可權。嘗試後可以建立。


我的理解:star這個使用者可以單獨訪問v$statname、v$sesstat、v$session這些字典表,但CREATE VIEW時不行,根據惜分飛的文章介紹,有可能是因為是因為不同schema的問題,總結的:

1)在同一個schema下,有查詢許可權,就可以建立檢視。

2)在不同schema下,即使有了查詢許可權,建立檢視,還是會提示ORA-01031。

文章中介紹需要sys賬戶將資料字典的訪問許可權賦予star使用者,但這裡還要注意的是V$SESSION是一個public的同義詞,根據前幾篇部落格介紹的方法,可以看到它封裝的是x$ksuse這個表,好像沒看到過將這種表賦予使用者許可權的?


這個問題的解決方法是賦予使用者select any dictionary的許可權。但除此之外是否還有其它方法?請高手指點!


>經過高手指教,這個問題最簡單的方法就是用sys賬戶登入,grant select on v_$statname ... to user,將v$引用的v_$許可權賦予使用者,就可以了。select any dictionary這個許可權最好不要輕易賦予普通使用者

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-767783/,如需轉載,請註明出處,否則將追究法律責任。

相關文章