編譯 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
哈哈的日子 閱讀(1141)
評論(0) 編輯 收藏