查詢Oracle正在執行和執行過的SQL語句(一) v$session 表的權限

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

在非系統用戶底下建觸發器時引用v$session記錄類型時出現問題
錯誤:「表和視圖不存在」 sql

可是在 pl/sql 中是能夠運行 select * from v$session 的 session

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

須要如下處理: 函數

可直接受權

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所說的作法 it

在存儲對象中引用字典表(視圖)必須單獨受權
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是視圖 io

這個問題,本質上,是pl/sql程序的特色的問題
在 pl/sql程序設計一書中有講到,因爲 pl/sql 的編譯的一些特性,oracle 採起了 角色在   存儲過程、函數、包 等有名pl/sql 中 不起做用的策略,必須直接受權才生效,因此即便有dba角色在存儲過程當中也是無效的 編譯

相關文章
相關標籤/搜索