天天看點

v$session 的權限

oracle 觸發器中 用 v_$session 問題讨論  

在非系統使用者底下建觸發器時引用v$session記錄類型時出現問題

錯誤:“表和視圖不存在”

但是在 pl/sql 中是可以運作 select * from v$session 的

v$session是同義詞,v_$session是視圖

需要以下處理:

可直接授權

sys   :   grant   select on v_$session to   youruser;

說明:

這是個很好的問題

一個普通使用者,具有了select any dictionary的權限後,就可以通路任何一個系統視圖,包括v$session,由于dba角色包含了select any dictionary的權限,是以你的hospital使用者select * from v$session是沒問題的

但是你在PL/SQL中,要參照一個表rowtype或者在定義cursor的時候使用到某個表,那你得在這個表上有select權,盡管你的dba角色有select any table的權限,但由于在9i中規定

在初始化參數O7_DICTIONARY_ACCESSIBILITY取預設值(false)的情況下,一個使用者即使有select any table的權限,卻還是不能通路sys對象的,除非

1 把O7_DICTIONARY_ACCESSIBILITY設定為true,也就是偶說的做法

或者

2 直接把sys對象的select權授予給這個使用者,也就是biti所說的做法

在存儲對象中引用字典表(視圖)必須單獨授權

SQL> select synonym_name,table_name from dba_synonyms where synonym_name like '%SESSION%';

SYNONYM_NAME                TABLE_NAME

------------------------------ ------------------------------

V$SESSION                   V_$SESSION

v$session是同義詞,v_$session是視圖

這個問題,本質上,是pl/sql程式的特點的問題

在 pl/sql程式設計一書中有講到,由于 pl/sql 的編譯的一些特性,oracle 采取了 角色在   存儲過程、函數、包 等有名pl/sql 中 不起作用的政策,必須直接授權才生效,是以即使有dba角色在存儲過程中也是無效的