2009-07-13 75 views
2

我目前正在開發一個小型企業數據庫應用程序,我們計劃在下一次爲其實現多用戶訪問。如何在行的基礎上實現數據庫訪問控制

數據庫主要包含項目(在項目表中),其中包含一些包含附加信息的連接表。

我們的客戶關於多用戶操作的一個要求是主要基於項目級別(即用戶只能訪問某些項目)的細粒度訪問控制。我想知道如何實現這一點。

什麼讓情況變得更加困難是數據庫訪問主要發生在構建所需SQL查詢(類似於nhibernate)的自行開發的持久層中。

我能想出的唯一解決方案是在數據庫內部實現存取過程的存儲過程(或視圖讀取?)。由於我們的持久層當前依賴於對錶的完全訪問,這意味着要爲每個表實現一個讀取視圖,一個插入和一個刪除命令,並更改持久層以便使用這些命令(而不是構建INSERT/DELETE查詢) 。

我不知道是否有不需要改變我們的代碼,任何其他解決方案...

回答

1

這樣的事情是很有挑戰性得到的權利。除此之外,像這樣的需求是構建在一個打包系統之上的一個原因 - 他們已經有了一些你還沒有寫過的bug。

如果您必須自己做,那麼我建議您專注於獲得安全性方面的權利,並擔心以後更改代碼。由於不希望更改代碼,因此您不希望危及安全性。

您可能會安排一個額外的信息傳遞到存儲過程。根據您的SQL Server版本,這可能是一段XML或一個表值參數。它將包括確定用戶應具有的訪問權限所需的全部信息。也許只是一個用戶ID,但誰知道?

您希望創建使用此信息來過濾基於訪問返回的行集的視圖和/或表值函數。

1

一個簡單但粗略的方法是使用WITH CHECK OPTION爲每個用戶組創建一個VIEW。您可能還需要在這些VIEW s上觸發INSTEAD OF觸發器,以便爲INSERT,UPDATEDELETE操作提供更復雜的邏輯。

相關問題