2009-08-21 22 views
3

我有一個簡單的.NET 3.5應用程序,用於使用ODBCDataSet更改某些數據庫字段。現在Feature Creep問我是否可以根據用戶的數據庫權限隱藏或顯示標籤和其他控件。如何測試用戶對數據庫的權限

理想情況下,我想僅在使用Windows用戶組的SQL Server上控制權限,並且該應用程序不具有任何內置身份驗證或權限系統 - 它只是使用登錄用戶的Windows帳戶數據庫連接。因此,它必須「測試」權限以確定是否顯示用戶的選項卡。例如,如果他們對某個表具有「寫入」權限,則可以看到編輯它的選項卡;如果沒有,選項卡不會爲它們加載。

這真的是我需要幫助的部分:如何列出或測試用戶對ODBCDataSet的權限?

+2

Feature Creep ...聽起來像是一個Dilbert角色。您可以將用戶的權限存儲在單獨的表中嗎? – Beth 2009-08-21 18:45:35

+0

其中一個更復雜的情況可能是如果用戶具有「讀取/選擇」權限而不是「寫入/更新」,並且我希望避免必須執行實際更新,特別是如果某些表不能有無關記錄。 但是添加存儲過程或單獨的表將是無害的。 Hrm ...我喜歡它。 哦,我確實認爲Feature Creep是Dilbert中的一個客人角色。我一直喜歡將其人格化的想法。 :) – ewall 2009-08-21 20:49:36

回答

1

您可以隨時嘗試/趕上對數據庫的調用。這將驗證用戶到數據庫,然後創建一個存儲過程來返回所有可訪問的表。

+0

好奇你最終結束了。我沒有花時間研究查詢用戶訪問的實際情況,我只知道有變通方法(即測試更新/選擇/等)。 – madcolor 2009-08-21 20:59:21

2

您是否反對讓您的應用程序知道Windows用戶組?一般來說,我們一直使用AD組來保證安全性,就像您在.NET代碼中的數據庫AND中一樣。顯示/隱藏功能就是要點。此外,即使由於某些原因他們設法顯示該功能,數據庫還會檢查其角色並防止操作。我個人認爲檢查.NET代碼中的角色成員資格是最簡單的解決方案(您可以使用IsInRole方法執行此操作)。

但是,如果有理由不能或不想讓應用程序知道組名,萬一它們發生變化,我理解。可能沒有ODBC方法檢查,因爲任何方法都可能是專有和/或數據庫相關的(SQL Server等)......除此之外,您必須編寫代碼以嘗試插入/更新命令在已知的測試記錄上,看看它是否會返回一個SqlException,我猜。

相關問題