2015-10-13 27 views
0

我開始研究Oracle數據庫安全性(11G)的一些功能,並且創建了一個小型虛擬銀行數據庫。其中一個表是 「交易」 這樣的欄目:Oracle數據庫安全 - 僅插入特定值

  • TRANS_ID
  • DATE
  • 說明
  • TYPE 等

我將要創建這樣的用戶作爲客戶和銀行櫃員,但我想限制他們可以做的事情。我的問題是:我可以允許用戶將數據插入到TRANSACTIONS表中,但僅當它是特定類型或具有特定說明時纔可以?

例如,我希望我的銀行櫃員用戶能夠只插入「FEE REVERSAL」和提款或存款。這就像創建一個角色一樣簡單,如:

CREATE ROLE TELLER_ROLE IDENTIFIED BY TELLER; 
GRANT UPDATE ON TRANSACTIONS TO TELLER_ROLE 
WHERE TRANSACTION.TRANSACTION_TYPE = 'FEE REVERSAL'; 

或者我應該以這種不同的方式?

+5

如果你想要這個級別的粒度控制,你最好只允許用戶通過一個存儲過程插入/刪除/更新,你可以允許或不允許一個很好的程度 – kevinsky

回答

0

將ROLES分配給用戶對於限制他們在數據庫中可以執行的操作非常重要,但我覺得您正在尋找更多的數據約束來執行。根據您在前端使用的內容,您可以限制其選項,甚至可以利用存儲過程只傳遞某些值,但爲了在數據庫級別強制執行數據完整性,您將需要使用CONSTRAINTS。下面的例子;

ALTER TABLE transactions 
ADD CONSTRAINT check_teller_transaction 
    CHECK (record_action IN ('FEE REVERSAL', 'WITHDRAWAL', 'DEPOSIT'));