Oracle-PROCEDURE許可權解讀____Oracle

來源:互聯網
上載者:User
問題

存過中有查詢dba_相關的資料字典視圖,編譯時間卻提示 ‘表或視圖不存在’,編譯不通過。

但是報錯的語句在SQL中確實可以查到的,說明問題並不是提出給出的’表或視圖不存在’導致的。

這裡需要注意SQL許可權和存過的許可權是不同的。

我們查詢的是sys使用者下的資料字典,需要顯示授權
雖然cc使用者也是DBA使用者。

 select * from dba_role_privs where grantee='CC';

解決辦法

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 SYSDBASQL> revoke create table from cc;Revoke succeeded

重新執行後:

SQL> exec p_test_proc_priv;begin p_test_proc_priv; end;ORA-01031: insufficient privilegesORA-06512: at "CC.P_TEST_PROC_PRIV", line 4ORA-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條資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.