Permissions

使用者權限的最大粒度(表中的某些行?)

  • September 10, 2013

我們目前的系統架構相當簡單。有一個在網關之間移動的全域設備列表。這個想法是將設備的全域列表儲存在一個表中,這樣任何網關都可以讀取有關任何設備的資訊,但只能寫入駐留在其特定網關上的設備。

目前,這必須在客戶端邏輯中強制執行,這顯然不是我想要的,出於一些重要(和不太重要)的原因。我更希望它在伺服器級別強制執行。

是否存在使這種權限粒度可定義的通用數據庫?

您可以授予對視圖和儲存過程的訪問權限,而無需授予對基礎表的直接訪問權限(請參閱https://stackoverflow.com/questions/4134740/grant-select-permission-on-a-view-but-not-on-underlying -類似問題中的一些細節)。這肯定適用於從視圖中讀取,儘管我不確定是否要寫給它們(很難知道它們是否應該寫特定的東西,所以你可能不得不用INSTEAD OF觸發器來管理它而不是完成它為你)。

正確設置權限後,使用者只能訪問過程/視圖向他們公開的內容,因此您可以通過為不同的使用者提供不同的過程/視圖來控制他們的訪問,每個過程/視圖都有不同的過濾子句。如果您為每個使用者(或使用者類別)提供自己的架構,您甚至可以為不同的視圖/程序提供相同的名稱,因此您不需要在其他地方為 User1、User2、…、UserN 提供不同的程式碼/配置,因為它們都可以執行SELECT <something> FROM FilteredView並獲得結果(使用者 1 可能會從視圖u1.FilterdeView中看到結果,使用者 2 和使用者 3 可能將reports其作為預設模式,因此它們可以從中獲取結果reports.FilteredView,依此類推)。

我對此的了解是特定於 MSSQL 的,但我很確定其他主要 DMBS(例如 Oracle 或 postgres)具有非常相似的訪問粒度控制。

引用自:https://dba.stackexchange.com/questions/49498