Oracle-PROCEDURE权限解读
問題
存過中有查詢dba_相關的數據字典視圖,編譯時卻提示 ‘表或視圖不存在’,編譯不通過。
但是報錯的語句在SQL中確實可以查到的,說明問題并不是提出給出的’表或視圖不存在’導致的。
這里需要注意SQL權限和存過的權限是不同的。
我們查詢的是sys用戶下的數據字典,需要顯示授權
雖然cc用戶也是DBA用戶。
解決辦法
oracle存儲過程默認定義者權限,但ROLE對存儲過程不可見。
因此需要給cc用戶顯示賦權。 使用authid current_user也不行。
使用sys用戶
grant select any dictionary to cc;重新編譯,通過
知識引申
oracle存儲過程分兩種,DR(Definer’s Rights ) Procedure和IR(Invoker’s Rights ) Procedure。
在執行存儲過程時,我們可能會遇到權限問題
- AUTHID DEFINER (定義者權限):指編譯存儲對象的所有者。也是默認權限模式。
- AUTHID CURRENT_USER(調用者權限):指擁有當前會話權限的模式,這可能和當前登錄用戶相同或不同(alter session set current_schema 可以改變調用者Schema)
在數據庫中創建存儲過程時,定義者權限是缺省模式。
當指定AUTHID CURRENT_USER關鍵字后,便是調用者權限存儲過程.
它們之間最根本的差異在于role能否在存儲過程中生效
定義者權限存儲過程問題
定義者權限存儲過程role無效,必須要有顯式授權。即便是擁有dba role,還是不能訪問不同用戶的表。
有時候可能需要進行非常多的授權才能執行存儲過程,稍顯麻煩。
oracle給我們提供了在存儲過程中使用role權限的方法:
修改存儲過程,加入Authid Current_User時存儲過程可以使用role權限(調用者權限)。
栗子
編譯通過
執行失敗。
方法一:使用sys用戶賦權限
SQL> conn sys/****** as sysdba; Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 Connected as sys@cc AS SYSDBASQL> grant create table to cc;Grant succeeded重新執行
SQL> exec p_test_proc_priv;PL/SQL procedure successfully completed方法二 :修改存儲過程,加入Authid Current_User時存儲過程可以使用role權限。
現在先回收掉權限,改用另外的方式
SQL> conn sys/****** as sysdba; Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 Connected as sys@cc AS SYSDBA SQL> revoke create table from cc;Revoke succeeded重新執行后:
SQL> exec p_test_proc_priv;begin p_test_proc_priv; end;ORA-01031: insufficient privileges ORA-06512: at "CC.P_TEST_PROC_PRIV", line 4 ORA-06512: at line 2直白的說,就是讓這個存過擁有當前用戶的權限,如果這個用戶可以create table,那么這個存過通過authid current_user,也獲得該用戶的權限。
修改存過
記得先把已經 exec 執行存過創建的表 drop掉,否則報錯。
ORACLE權限相關
查看一個用戶的所有系統權限(包含角色的系統權限)
select privilege from dba_sys_privs where grantee='DATAUSER' union select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='DATAUSER' );查看Oracle提供的系統權限
select name from sys.system_privilege_map a order by a.name ;oracle 11g中 209條數據
總結
以上是生活随笔為你收集整理的Oracle-PROCEDURE权限解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle-PFILE和SPFILE解
- 下一篇: Oracle-Soft Parse/Ha