我正在尋找允許用戶只讀(SELECT)訪問數據庫的最佳方式(最佳實踐)和/或最少的管理工作,以及使用數據庫中定義的任何標量UDF。我可以通過僅將db_datareader角色分配給用戶登錄來完成我的任務的第一部分。但是,用戶無法在此數據庫中看到或執行任何Scalar UDF(SQL Server 2008 R2)。我知道你可以運行GRANT EXECUTE ON My_UDF TO MY_USER,它可以工作,它將允許用戶訪問。但是,這有兩個問題。首先,我們有數百個UDF,我們需要遍歷所有這些UDF,從而爲每個UDF提供用戶EXECUTE。其次,無論何時創建新的UDF,我們都需要再次向該READ-ONLY用戶發出該命令。SELECT只訪問SQL Server,訪問執行任何標量UDF
目標是給用戶儘可能少的權限,但仍允許他們執行SELECT(無UPDATE,INSERT或DELETE),並能夠在其SELECTS中使用任何UDF。
我建議你有第三個問題,這是一個更大的問題,你有數百個標量UDF。 Scalar UDF在性能上非常糟糕。您應該考慮將盡可能多的內容轉換爲內聯表值函數。不要將它與多語句表函數混淆,這些函數實際上比標量函數更糟糕。如果你對這些udfs堅持不懈,也許你可以爲它們創建一個模式。這將使訪問更容易處理。 – 2014-09-18 15:51:42
我同意這是一個問題,但我不能做任何事情。這些是由我們的ERP系統產生的(我們在高等教育),用戶已經變得依賴他們。由於ERP創建和使用它們,我會猶豫將它們轉移到另一個模式中。 – bucknasty 2014-09-18 16:00:37
呃。然後,你所能做的就是使用sql爲你生成你的權限。只需查詢sys.objects並構建sql語句即可。然後,您可以複製並粘貼(以選擇性刪除行)或創建一個大的動態sql語句並運行它。 – 2014-09-18 16:02:22