隨筆 - 175  文章 - 202  trackbacks - 0
          <2010年3月>
          28123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          第一個(gè)Blog,記錄哈哈的生活

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Java links

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          編譯 Trigger 出錯(cuò),錯(cuò)誤的原因是找不到sequence,但是在 sql 里面使用這個(gè)sequence非常正常。找了半天原因,另一個(gè)同事試了一下給這個(gè)sequence授權(quán),就可以編譯通過了。
          疑惑了很久,為什么sql中可以用,編譯trigger就不能用了呢。
          查了一些資料,才明白。
          是因?yàn)?Oracle 在編譯Procedu的時(shí)候,只檢查當(dāng)前用戶的權(quán)限,而不管角色。所以,即使這個(gè)用戶是DBA,也沒有用,必須要對這個(gè)用戶授權(quán)。這就是顯式授權(quán)。
          我在CSDN上找到了一個(gè)很好的文章,解釋了顯式授權(quán)和隱式授權(quán)的區(qū)別。
          附在下面。






          來自CSDN博客,http://blog.csdn.net/pashine/archive/2009/12/21/5050060.aspx


          oracle 對象的授權(quán)
          Oracle授權(quán)

           

          一、授權(quán)語法


          GRANT 語法:

          1.顯式授權(quán)(直接將對象授權(quán)給用戶)
           GRANT privilege [, ...] ON object [, ...]  TO  { Public| Group | Username|role} [WITH GRANT OPTION ] 
            
          2.隱式授權(quán)(通過將角色授權(quán)給用戶)
           GRANT role TO  { Public| Group | Username|role}

          語法說明:

          privilege (權(quán)限)
             可能的權(quán)限有:
               SELECT--訪問聲明的表/視圖的所有列/字段.
               INSERT--向聲明的表中插入所有列字段.
               UPDATE--更新聲明的所有列/字段.
               DELETE --從聲明的表中刪除所有行.
               RULE   在表/視圖上定義規(guī)則 (參見 CREATE RULE 語句).
               ALL 賦予所有權(quán)限.

          object 賦予權(quán)限的對象名.
              可能的對象是: 
               table (表)
               view (視圖)
               sequence (序列)
               index (索引)
          Public    代表是所有用戶的簡寫.
          Group     將要賦予權(quán)限的組GROUP .目前的版本中,組必須是用下面方法顯式創(chuàng)建的.
          Username  將要賦予權(quán)限的用戶名.PUBLIC 是代表所有用戶的簡寫.
          role      某個(gè)角色,(如DBA)
          WITH GRANT OPTION 允許向別人賦予同樣權(quán)限,被授權(quán)的用戶可以繼續(xù)授權(quán).


          描述
              對象創(chuàng)建后,除了創(chuàng)建者外,除非創(chuàng)建者賦予(GRANT)權(quán)限,其他人沒有訪問對象的權(quán)限。
              GRANT 允許對象的創(chuàng)建者給某用戶或某組或所有用戶(PUBLIC)某些特定的權(quán)限。不需要給創(chuàng)建者賦予(GRANT)對象的權(quán)限,創(chuàng)建者自動擁有對象的所有權(quán)限,包括刪除它的權(quán)限。

          說明

          Oracle不允許在過程中使用未經(jīng)顯式授權(quán)的對象. 要使用另一用戶的對象,必須通過另一用戶給自己顯示授權(quán)。

          因?yàn)镺racle在編譯存儲過程時(shí)并不檢查定義者擁有的角色,只是檢查其被顯式授予的權(quán)限,而DBA也是一種角色,所以即使是DBA,也需要顯式授權(quán)。

          二、授權(quán)方式 (顯式和隱式)


            對象授權(quán)有兩種模式,顯式和隱式: 
          顯示授權(quán)和隱式授權(quán)的區(qū)別是:顯示授權(quán)是直接把對象授權(quán)給用戶,隱式授權(quán)是給用戶授予角色的方式來實(shí)現(xiàn)授權(quán)。

          1. 顯式授權(quán)是直接用GRANT語句進(jìn)行授權(quán)。
           語法:GRANT 某種權(quán)限 TO 用戶
          如:
            CONN  USER1/Password
            GRANT SELECT  ON TABLE1 TO USER2;    --- 將user1的表TABLE1的select 權(quán)限顯示授權(quán)給user2
            GRANT UPDATE  ON TABLE1 TO USER2;    --- 將user1的表TABLE1的update權(quán)限顯示授權(quán)給user2


            注:用system/manager登錄是沒法授權(quán)的,要使USER2用戶能在存儲過程里面訪問USER1用戶的表,必須以USER1用戶(該用戶有dba權(quán)限)登錄,然后授權(quán)就可以了。
            SQL>grant select on USER1.MA_USERINFO to USER2

          2.隱式授權(quán)則是通過ROLE來授權(quán)。
           語法:GRANT 某個(gè)角色 TO 用戶
          如: 
            CONN  USER1 
            GRANT SELECT ON TABLE1 TO ROLE1;     --- 將USER1的表TABLE1的select權(quán)限顯示授權(quán)給Role1
            CONN  SYSTEM 
            GRANT ROLE1 TO USER2;                --- 給USER2授與Role1的權(quán)限。


          三、收回權(quán)限


             語法:
                 revoke 權(quán)限 from 用戶;

             例子:

            revoke select on table1 from User1; 收回查詢select表的權(quán)限;
            revoke all    on table1 from User1;
              grant  connect to xujin;
            revoke  connect  from xujin

                revoke  ROLE1    from USER2;

          End

          posted on 2010-03-05 11:25 哈哈的日子 閱讀(1142) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 万山特区| 宣城市| 任丘市| 巴青县| 报价| 常宁市| 威宁| 固始县| 四子王旗| 金溪县| 鹤山市| 武胜县| 南充市| 赫章县| 金平| 舟曲县| 会理县| 宜宾县| 大田县| 香河县| 乡城县| 三门县| 温泉县| 新龙县| 太和县| 洛南县| 栖霞市| 岫岩| 宾阳县| 游戏| 鄂伦春自治旗| 宁武县| 茌平县| 大埔区| 友谊县| 宝清县| 长春市| 永泰县| 调兵山市| 珲春市| 无为县|