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

          第一個Blog,記錄哈哈的生活

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Java links

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

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






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


          oracle 對象的授權
          Oracle授權

           

          一、授權語法


          GRANT 語法:

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

          語法說明:

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

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


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

          說明

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

          因為Oracle在編譯存儲過程時并不檢查定義者擁有的角色,只是檢查其被顯式授予的權限,而DBA也是一種角色,所以即使是DBA,也需要顯式授權。

          二、授權方式 (顯式和隱式)


            對象授權有兩種模式,顯式和隱式: 
          顯示授權和隱式授權的區別是:顯示授權是直接把對象授權給用戶,隱式授權是給用戶授予角色的方式來實現授權。

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


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

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


          三、收回權限


             語法:
                 revoke 權限 from 用戶;

             例子:

            revoke select on table1 from User1; 收回查詢select表的權限;
            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)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 黄石市| 五原县| 靖安县| 大石桥市| 天门市| 冀州市| 永修县| 车险| 吕梁市| 安乡县| 花莲县| 建平县| 新蔡县| 盐边县| 建水县| 汉阴县| 台北市| 共和县| 梁河县| 会同县| 云安县| 新化县| 安阳市| 安达市| 高清| 怀集县| 临泉县| 外汇| 白玉县| 卓资县| 绥宁县| 凌源市| 九寨沟县| 靖江市| 长阳| 沁源县| 明光市| 光山县| 临桂县| 芦山县| 剑河县|