Security

AD 域組的最低 SQL 登錄權限

  • July 19, 2011

我創建了一個在後台使用 SQL Server 2008 R2 數據庫的 Web 應用程序。應用程序使用集成安全 SSPI 連接到數據庫,因此使用者需要授予對數據庫伺服器的訪問權限。

應該使用該應用程序的所有使用者都是特定 AD 域組的成員。

這就是我所做的

  1. 我在 SQL Server 級別添加了一個新的安全登錄,並提供了 AD 域組名稱,該名稱顯示為一個組(基於圖示)

伺服器登錄為組 2. 然後我打開了這個伺服器登錄屬性對話框並打開了使用者映射設置,在那裡我檢查了我希望這個 AD 域組的使用者訪問的特定數據庫(見下圖中) 3. 在下面的列表中顯示了選中公共的****數據庫角色成員資格。 4. 我將數據庫中的所有對象創建為具有securityadmin權限的單獨 SQL Server 使用者,並為每個對象提供了 schema dbo ,如下所示:

create table dbo.SomeTable ...
create procedure dbo.SomeProcedure ...
  1. 所有數據庫操作僅通過儲存過程完成。應用程序不直接訪問任何表。

基於這些事實(帶有我的對象的 dbo 架構、AD 域組安全登錄、僅儲存過程執行)我想知道應該在 AD 域組伺服器登錄上設置哪個角色成員身份以使用我的數據庫。

使用者應該有權執行儲存過程。另一方面,這些可以做其他所有事情。對錶的 CRUD 操作,執行使用者定義的函式並相互呼叫。

問題

設置db_datareaderdb_datawriter(如下所示)是不夠的,正如我的使用者得到的錯誤螢幕所暗示的那樣(儲存過程應該不存在)?

如何在我的 AD 域組上設置安全權限,以便它能夠查看dbo對象並執行這些儲存過程?

使用者的數據庫成員資格

解決方案

應用 db_datareader 和 db_datawriter 是不夠的,因為它們都沒有被授予儲存過程執行權。您應該為數據庫中的每個儲存過程授予執行權限,或者……相當乏味。

如果您的數據庫是 SQL Server 2005 或更高版本(我的是 SQL Server 2008 R2,所以我已經介紹過了),您可以用更少的努力做到這一點:

  1. 創建一個名為db_executor的新數據庫角色
create role db_executor
  1. 授予數據庫中所有儲存過程的儲存過程執行權限
grant execute to db_executor

如果您只想授予特定於模式的儲存過程的執行權限,那麼最後一次呼叫應該執行為(調整模式名稱 - dbo - 根據需要):

grant execute on schema::dbo to db_executor

就是這樣。然後您所要做的就是將您的使用者(或者在我的情況下是一個組)設置為該角色的成員,並且事情按預期工作。

引用自:https://serverfault.com/questions/290981