Oracle用戶的單張表的讀寫權限控制


在oracle數據庫的用戶下,一張表需要做讀寫控制,只能讀和寫,不能刪除和修改。開發人員開始想從用戶權限上去實現。
經過一番討論,判讀從權限上去實現該需求是不合適的。
這個用戶下很多表,根本不會被一個人控制的。用戶本身有一個權限組resource,可以對其下所有表進行增刪改查。
如果要用權限來實現,那么就得將這個組去掉。這樣,該用戶下的其他表就得一個一個授權。還得考慮到以后新建的表。如何處理又是個問題。

因此,判斷該解決方式不合適。

這種單獨一張表的讀寫控制,不知道審計能不能實現。我想到一種另外的控制方法,讓表只能讀寫,不能刪改。這個方法就是利用觸發器。
在表的每一行紀錄進行增刪改之前做判斷,如果是增,則不做任何處理,如果是刪除或者修改,直接rollback。
這樣就實現了這種讀寫控制。

觸發器代碼如下:

 

create or replace trigger trg_test_insert_select
  before insert or  update or  delete on t_test  
  for each row
declare
  -- local variables here
begin
    CASE
    WHEN INSERTING THEN
      DBMS_OUTPUT.PUT_LINE('Inserting');
    WHEN UPDATING THEN
      DBMS_OUTPUT.PUT_LINE('Updating');
      rollback;
    WHEN DELETING THEN
      DBMS_OUTPUT.PUT_LINE('Deleting');
      rollback;
  END CASE;

end trg_test_insert_select;

 

 


測試結果如下:

SQL> insert into t_test(a) select sysdate from dual;
 
1 row inserted
 
SQL> commit;
 
Commit complete
 
SQL> delete from t_test;
 
delete from t_test
 
ORA-04092: ROLLBACK 不能在觸發器中
ORA-06512: 在 "SCOTT.TRG_TEST_INSERT_SELECT", line 12
ORA-04088: 觸發器 'SCOTT.TRG_TEST_INSERT_SELECT' 執行過程中出錯
 
SQL> update t_test set a=sysdate+1;
 
update t_test set a=sysdate+1
 
ORA-04092: ROLLBACK 不能在觸發器中
ORA-06512: 在 "SCOTT.TRG_TEST_INSERT_SELECT", line 9
ORA-04088: 觸發器 'SCOTT.TRG_TEST_INSERT_SELECT' 執行過程中出錯
 
注意,在應用開發時,需要將這個表的操作進行封裝,異常捕獲很重要。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM