开心六月综合激情婷婷|欧美精品成人动漫二区|国产中文字幕综合色|亚洲人在线成视频

    1. 
      
        <b id="zqfy3"><legend id="zqfy3"><fieldset id="zqfy3"></fieldset></legend></b>
          <ul id="zqfy3"></ul>
          <blockquote id="zqfy3"><strong id="zqfy3"><dfn id="zqfy3"></dfn></strong></blockquote>
          <blockquote id="zqfy3"><legend id="zqfy3"></legend></blockquote>
          打開(kāi)APP
          userphoto
          未登錄

          開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

          開(kāi)通VIP
          使用 Authid Current_User 為調(diào)用者授權(quán)
           
          我在一些技術(shù)論壇里面,常常看到有朋友問(wèn)這種問(wèn)題: 為什么我的用戶具有DBA權(quán)限,卻無(wú)法在存儲(chǔ)過(guò)程里面創(chuàng)建一張普通表呢?
           
          下面就結(jié)合具體案例來(lái)談?wù)勥@個(gè)問(wèn)題:
           
          SQL> conn eric/eric;
          Connected.
          SQL> select * from dba_role_privs where grantee=‘ERIC‘;
           
          GRANTEE                        GRANTED_ROLE                   ADM DEF
          ------------------------------ ------------------------------ --- ---
          ERIC                           DBA                            NO  YES
          ERIC                           CONNECT                        NO  YES
          ERIC                           RESOURCE                       NO  YES
          ERIC                           RECOVERY_CATALOG_OWNER         NO  YES
          可以看到,用戶eric擁有 DBA 權(quán)限!
           
           
          用此用戶創(chuàng)建一個(gè)存儲(chǔ)過(guò)程:
          create or replace procedure p_CreateTable
          as
          begin
           execute immediate ‘create table test_tb(id number)‘;
          end p_CreateTable;
          /
          Procedure created.

          運(yùn)行時(shí)會(huì)發(fā)現(xiàn),系統(tǒng)提示權(quán)限不足(insufficient privileges)!
          SQL> exec p_CreateTable;
          BEGIN p_CreateTable; END;
           
          *
          ERROR at line 1:
          ORA-01031: insufficient privileges
          ORA-06512: at "ERIC.P_CREATETABLE", line 3
          ORA-06512: at line 1

           
          由上可以看到,即使擁有DBA role,也不能創(chuàng)建表。
          role在存儲(chǔ)過(guò)程中不可見(jiàn)!

          查閱資料發(fā)現(xiàn):
          Oracle8i以前的版本,所有已編譯存儲(chǔ)對(duì)象,包括packages, procedures, functions, triggers, views等,只能以定義者(Definer)身份解析運(yùn)行;
          而Oracle8i及其后的新版本,Oracle引入調(diào)用者(invoker)權(quán)限,使得對(duì)象可以以調(diào)用者身份和權(quán)限執(zhí)行。

          遇到這種情況,通常解決方法是進(jìn)行顯式的系統(tǒng)權(quán)限: grant create table to eric;
          但是,此方法太笨,因?yàn)橛锌赡軋?zhí)行一個(gè)存儲(chǔ)過(guò)程,需要很多不同權(quán)限(oracle對(duì)權(quán)限劃分粒度越來(lái)越細(xì))。
           
          最好的方法是,利用 oracle 提供的方法,在創(chuàng)建存儲(chǔ)過(guò)程時(shí),加入 Authid Current_User 條件進(jìn)行權(quán)限分配。
           
          create or replace procedure p_CreateTable Authid Current_User
          as
          begin
           execute immediate ‘create table test_tb(id number)‘;
          end p_CreateTable;
          /
          Procedure created.
           
          SQL> exec p_CreateTable;
           
          PL/SQL procedure successfully completed.

          SQL> desc test_tb
           Name                                      Null?    Type
           ----------------------------------------- -------- ----------------------------
           ID                                                 NUMBER

           成功啦?。?!
           

          由此可以引申出一個(gè)問(wèn)題:
           
          如果用戶B要執(zhí)行A用戶的某存儲(chǔ)過(guò)程,傳統(tǒng)的解決方案是:
           
          A用戶將此存儲(chǔ)過(guò)程的執(zhí)行權(quán)限賦予B用戶:
          grant execute on p_test to B;
           
          在B用戶下創(chuàng)建一個(gè)同義詞:
          create synonym p_test for a.p_test;
           
          然后B用戶就可以直接執(zhí)行p_test了.

          但是,如果使用 Authid Current_User 選項(xiàng),在創(chuàng)建時(shí)給調(diào)用者授權(quán),就簡(jiǎn)單多了!
          本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
          打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
          猜你喜歡
          類似文章
          關(guān)于Oracle存儲(chǔ)過(guò)程執(zhí)行權(quán)限問(wèn)題的解決
          Oracle存儲(chǔ)過(guò)程ORA
          關(guān)于authid current_user
          如何在存儲(chǔ)過(guò)程中擁有role的權(quán)限
          (3)存儲(chǔ)過(guò)程中調(diào)用EXECUTE IMMEDIATE的“權(quán)限不足”問(wèn)題
          如何跟蹤某應(yīng)用下發(fā)生的sql操作細(xì)節(jié)
          更多類似文章 >>
          生活服務(wù)
          分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
          綁定賬號(hào)成功
          后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
          如果VIP功能使用有故障,
          可點(diǎn)擊這里聯(lián)系客服!

          聯(lián)系客服