AD 域組的最低 SQL 登錄權限
我創建了一個在後台使用 SQL Server 2008 R2 數據庫的 Web 應用程序。應用程序使用集成安全 SSPI 連接到數據庫,因此使用者需要授予對數據庫伺服器的訪問權限。
應該使用該應用程序的所有使用者都是特定 AD 域組的成員。
這就是我所做的
- 我在 SQL Server 級別添加了一個新的安全登錄,並提供了 AD 域組名稱,該名稱顯示為一個組(基於圖示)
2. 然後我打開了這個伺服器登錄屬性對話框並打開了使用者映射設置,在那裡我檢查了我希望這個 AD 域組的使用者訪問的特定數據庫(見下圖中) 3. 在下面的列表中顯示了選中公共的****數據庫角色成員資格。 4. 我將數據庫中的所有對象創建為具有securityadmin權限的單獨 SQL Server 使用者,並為每個對象提供了 schema dbo ,如下所示:
create table dbo.SomeTable ... create procedure dbo.SomeProcedure ...
- 所有數據庫操作僅通過儲存過程完成。應用程序不直接訪問任何表。
基於這些事實(帶有我的對象的 dbo 架構、AD 域組安全登錄、僅儲存過程執行)我想知道應該在 AD 域組伺服器登錄上設置哪個角色成員身份以使用我的數據庫。
使用者應該有權執行儲存過程。另一方面,這些可以做其他所有事情。對錶的 CRUD 操作,執行使用者定義的函式並相互呼叫。
問題
設置db_datareader和db_datawriter(如下所示)是不夠的,正如我的使用者得到的錯誤螢幕所暗示的那樣(儲存過程應該不存在)?
如何在我的 AD 域組上設置安全權限,以便它能夠查看
dbo
對象並執行這些儲存過程?
解決方案
應用 db_datareader 和 db_datawriter 是不夠的,因為它們都沒有被授予儲存過程執行權。您應該為數據庫中的每個儲存過程授予執行權限,或者……相當乏味。
如果您的數據庫是 SQL Server 2005 或更高版本(我的是 SQL Server 2008 R2,所以我已經介紹過了),您可以用更少的努力做到這一點:
- 創建一個名為db_executor的新數據庫角色
create role db_executor
- 授予數據庫中所有儲存過程的儲存過程執行權限
grant execute to db_executor
如果您只想授予特定於模式的儲存過程的執行權限,那麼最後一次呼叫應該執行為(調整模式名稱 - dbo - 根據需要):
grant execute on schema::dbo to db_executor
就是這樣。然後您所要做的就是將您的使用者(或者在我的情況下是一個組)設置為該角色的成員,並且事情按預期工作。