伺服器層級角色

適用於:SQL ServerAzure SQL 受控執行個體Analytics Platform System (PDW)

SQL Server 會提供伺服器層級角色來協助您管理伺服器的權限。 這些角色是將其他主體組成群組的安全性主體。 伺服器層級角色的權限範圍為整個伺服器 (「角色」就像是 Windows 作業系統中的「群組」)。

SQL Server 2019 和舊版本提供九個固定伺服器角色。 權限一旦授與給固定伺服器角色 (除了公開角色外),即無法變更。 從 SQL Server 2012 (11.x) 開始,您就可以建立使用者定義伺服器角色,並將伺服器層級權限加入使用者定義伺服器角色。 SQL Server 2022 (16.x) 隨附 10 個額外伺服器角色,這些角色已特別以最低權限原則設計,其前綴詞 ##MS_和尾綴詞 ## 可區分它們與其他一般使用者建立的主體和自訂伺服器角色。 這些新角色包含適用於伺服器範圍的權限,但也可以繼承至個別資料庫 (##MS_LoginManager## 伺服器角色除外。)

如同內部部署 SQL Server,伺服器權限是以階層方式進行組織。 這些伺服器層級角色所持有的權限可以傳播至資料庫權限。 若要使權限能夠在資料庫層級有效地使用,登入必須是伺服器層級角色 ##MS_DatabaseConnector## 的成員 (從 SQL Server 2022 (16.x) 開始,這會授與 [CONNECT] 給所有資料庫),或是在個別資料庫中具有使用者帳戶。 這也適用於 master 資料庫。 考量下列範例:伺服器層級角色 ##MS_ServerStateReader## 會持有檢視伺服器狀態的權限。 屬於此角色的登入會具備該資料庫的使用者帳戶 (masterWideWorldImporters) 接著,此使用者也會擁有這些兩個資料庫中依繼承檢視資料庫狀態的權限。

您可以將伺服器層級主體 (SQL Server 登入、Windows 帳戶和 Windows 群組) 新增至伺服器層級角色。 固定伺服器角色的每個成員可以對相同的角色增加其他登入。 使用者定義伺服器角色的成員無法將其他伺服器主體加入至此角色。

固定伺服器層級角色

注意

SQL Server 2022 (16.x) 之前引進的這些伺服器層級角色無法在 Azure SQL Database 或 Azure Synapse Analytics 中使用。 權限管理有特殊 Azure SQL 資料庫伺服器角色,相當於 SQL Server 2022 (16.x) 中引進的伺服器層級角色。 如需 SQL Database 的詳細資訊,請參閱控制和授與資料庫存取權

下表顯示固定伺服器層級角色及其功能。

固定伺服器層級角色 描述
sysadmin sysadmin 固定伺服器角色的成員可以執行伺服器中的所有活動。
serveradmin serveradmin 固定伺服器角色的成員可以變更全伺服器組態選項及關閉伺服器。
securityadmin securityadmin 固定伺服器角色的成員可以管理登入及其屬性。 他們可以 GRANT (授與)、DENY (拒絕) 和 REVOKE (撤銷) 伺服器層級權限。 如果他們擁有資料庫的存取權,也可以 GRANTDENYREVOKE 資料庫層級權限。 此外,他們可以重設 SQL Server 登入的密碼。

重要事項:授與資料庫引擎之存取權和設定使用者權限的能力,可讓安全性管理員指派大部分的伺服器權限。 您應該將 securityadmin 角色視為相當於 系統管理員 角色。 或者,從 SQL Server 2022 (16.x) 開始,請考慮使用新的固定伺服器角色 ##MS_LoginManager##
processadmin processadmin 固定伺服器角色的成員可以結束在 SQL Server 執行個體中執行的流程。
setupadmin setupadmin 固定伺服器角色的成員可以使用 Transact-SQL 陳述式加入和移除連結的伺服器。 (使用 Management Studio 時需要 sysadmin 成員資格)。
bulkadmin bulkadmin 固定伺服器角色的成員可以執行 BULK INSERT 陳述式。

Linux 上的 SQL Server 不支援 bulkadmin 角色或 ADMINISTER BULK OPERATIONS 權限。 只有 sysadmin 可以針對 Linux 上的 SQL Server 執行大量插入。
diskadmin diskadmin 固定伺服器角色是用來管理磁碟檔案。
dbcreator dbcreator 固定伺服器角色的成員可以建立、改變、卸除及還原任何資料庫。
public 每一個 SQL Server 登入都屬於公開伺服器角色。 未授與或拒絕將安全性實體物件的特定權限給伺服器主體時,使用者會繼承該物件上授與給公開的權限。 只有當您想要將任何物件提供給所有使用者使用時,才指派該物件的 public 權限。 您無法變更公開的成員資格。

注意:public 的實作方式不同於其他角色,您可以授與、拒絕或撤銷 public 固定伺服器角色的權限。

重要

下列伺服器角色所提供的大部分權限不適用於 Azure Synapse Analytics:processadminserveradminsetupadmin 以及 diskadmin

於 SQL Server 2022 中引進的固定伺服器層級角色

下表顯示 SQL Server 2022 (16.x) 及其功能引進的其他固定伺服器層級角色。

注意

這些伺服器層級的權限不適用於 Azure SQL 受控執行個體 或 Azure Synapse Analytics。 ##MS_PerformanceDefinitionReader##MS_ServerPerformanceStateReader####MS_ServerSecurityStateReader## 是在 SQL Server 2022 (16.x) 引進,且無法在 Azure SQL Database 中使用。

固定伺服器層級角色 描述
##MS_DatabaseConnector## ##MS_DatabaseConnector## 固定伺服器角色的成員可以連線到任何資料庫,而不需要資料庫中的使用者帳戶才能連線。

若要拒絕特定資料庫的 [連線] 權限,使用者可以為資料庫中的這個登入建立相符的使用者帳戶,然後 [拒絕] 資料庫使用者的 [連線] 權限。 此 [拒絕] 權限會覆寫來自這個角色的 [授與連線] 權限。
##MS_LoginManager## ##MS_LoginManager## 固定伺服器角色的成員可以建立、刪除,以及修改登入。 與舊的固定伺服器角色 securityadmin 相反,此角色不允許成員具有 GRANT 權限。 這是更為受限的角色,可協助遵守最低權限原則。
##MS_DatabaseManager## ##MS_DatabaseManager## 固定伺服器角色的成員可以建立和刪除資料庫。 建立資料庫的 ##MS_DatabaseManager## 角色成員會變成該資料庫的擁有者,讓使用者能夠像 dbo 使用者一樣連線至該資料庫。 dbo 使用者具有資料庫的所有資料庫權限。 ##MS_DatabaseManager## 角色成員不一定有權限可存取非其所有的資料庫。 此伺服器角色具有與 SQL Server 中 dbcreator 角色相同的權限,但我們建議使用新角色,因為此角色也存在於 Azure SQL 資料庫中,因此有助於在不同環境中使用相同的指令碼。
##MS_ServerStateManager## 固定伺服器角色 ##MS_ServerStateManager## 的成員和 ##MS_ServerStateReader## 角色具有相同權限。 此外,其還持有更改伺服器狀態的權限,該權限可允許您存取幾個管理作業,例如:DBCC FREEPROCCACHEDBCC FREESYSTEMCACHE ('ALL')DBCC SQLPERF()
##MS_ServerStateReader## ##MS_ServerStateReader## 固定伺服器角色的成員可針對檢視伺服器狀態,讀取由其涵蓋的所有動態管理檢視 (DMV) 和函式,並在任何資料庫上具有個別檢視資料庫狀態的權限,其中該角色的成員會具有使用者帳戶。
##MS_ServerPerformanceStateReader## ##MS_ServerPerformanceStateReader## 固定伺服器角色的成員可針對檢視伺服器效能狀態,讀取由其涵蓋的所有動態管理檢視 (DMV) 和函式,並在任何資料庫上具有個別檢視資料庫效能狀態的權限,其中該角色的成員會具有使用者帳戶。 這是 ##MS_ServerStateReader## 伺服器角色可存取的子集,可協助遵守最低權限原則。
##MS_ServerSecurityStateReader## ##MS_ServerSecurityStateReader## 固定伺服器角色的成員可針對檢視伺服器安全性狀態,讀取由其涵蓋的所有動態管理檢視 (DMV) 和函式,並在任何資料庫上個別檢視資料庫安全性狀態,其中該角色的成員會具有使用者帳戶。 這是 ##MS_ServerStateReader## 伺服器角色可存取的一小部分,有助於遵守最低權限原則。
##MS_DefinitionReader## ##MS_DefinitionReader## 固定伺服器角色的成員可針對檢視任何定義,讀取所涵蓋的所有目錄檢視,並在任何資料庫上具有個別檢視定義的權限,其中該角色的成員會具有使用者帳戶。
##MS_PerformanceDefinitionReader## ##MS_PerformanceDefinitionReader## 固定伺服器角色的成員可針對[檢視任何效能定義],讀取所涵蓋的所有目錄檢視,並在任何資料庫上具有個別 [檢視效能定義] 權限,其中該角色的成員會具有使用者帳戶。 這是 ##MS_DefinitionReader## 伺服器角色可存取的小型子集。
##MS_SecurityDefinitionReader## 固定伺服器角色 ##MS_SecurityDefinitionReader## 的成員,可讀取由 [檢視任何安全性定義] 所涵蓋的所有目錄檢視,並在資料庫上個別具有 [檢視安全性定義] 權限,其中該角色的成員會具有使用者帳戶。 這是 ##MS_DefinitionReader## 伺服器角色可存取的一小部分,有助於遵守最低權限原則。

固定伺服器角色的權限

每個固定伺服器角色都擁有指派給它的特定權限。

SQL Server 2022 中新固定伺服器角色的權限

下表顯示指派給伺服器層級角色的權限。 只要使用者可以連線到個別資料庫,則也會顯示其繼承的資料庫層級權限。

固定伺服器層級角色 伺服器層級權限 資料庫層級權限
##MS_DatabaseConnector## CONNECT ANY DATABASE CONNECT
##MS_LoginManager## CREATE LOGIN
ALTER ANY LOGIN
N/A
##MS_DatabaseManager## CREATE ANY DATABASE
ALTER ANY DATABASE
ALTER
##MS_ServerStateManager## ALTER SERVER STATE
VIEW SERVER STATE
檢視伺服器效能狀態
檢視伺服器安全性狀態
VIEW DATABASE STATE
檢視資料庫效能狀態
檢視資料庫安全性狀態
##MS_ServerStateReader## VIEW SERVER STATE
檢視伺服器效能狀態
檢視伺服器安全性狀態
VIEW DATABASE STATE
檢視資料庫效能狀態
檢視資料庫安全性狀態
##MS_ServerPerformanceStateReader## 檢視伺服器效能狀態 檢視資料庫效能狀態
##MS_ServerSecurityStateReader## 檢視伺服器安全性狀態 檢視資料庫安全性狀態
##MS_DefinitionReader## VIEW ANY DATABASE
VIEW ANY DEFINITION
檢視任何效能定義
檢視任何安全性定義
VIEW DEFINITION
檢視效能定義
檢視安全性定義
##MS_PerformanceDefinitionReader## 檢視任何效能定義 檢視效能定義
##MS_SecurityDefinitionReader## 檢視任何安全性定義 檢視安全性定義

SQL Server 2019 和更早版本的伺服器角色權限

下圖顯示指派給舊版伺服器角色 (SQL Server 2019 和更早版本) 的權限。
Diagram showing fixed server role permissions.

重要

CONTROL SERVER 權限與 系統管理員 固定伺服器角色類似但不完全相同。 權限不代表角色成員資格,角色成員資格也不會授與權限。 (例如 CONTROL SERVER 不代表 sysadmin 固定伺服器角色的成員資格)。不過,角色與相等權限之間有時候可以互相模擬。 大部分 DBCC 命令與許多系統程序都需要系統管理員固定伺服器角色的成員資格。

伺服器層級權限

只有伺服器層級權限可加入至使用者定義伺服器角色。 若要列出伺服器層級權限,請執行以下陳述式。 伺服器層級權限為:

SELECT * FROM sys.fn_builtin_permissions('SERVER') ORDER BY permission_name;

如需權限的詳細資訊,請參閱權限 (資料庫引擎)sys.fn_builtin_permissions (Transact-SQL)

使用伺服器層級角色

下表將說明可用來處理伺服器層級角色的命令、檢視和函數。

功能 類型 Description
sp_helpsrvrole (Transact-SQL) 中繼資料 傳回伺服器層級角色的清單。
sp_helpsrvrolemember (Transact-SQL) 中繼資料 傳回伺服器層級角色成員的相關資訊。
sp_srvrolepermission (Transact-SQL) 中繼資料 顯示伺服器層級角色的權限。
IS_SRVROLEMEMBER (Transact-SQL) 中繼資料 指出 SQL Server 登入是否為指定伺服器層級角色的成員。
sys.server_role_members (Transact-SQL) 中繼資料 針對每個伺服器層級角色的每個成員,各傳回一個資料列。
CREATE SERVER ROLE (Transact-SQL) Command 建立使用者定義伺服器角色。
ALTER SERVER ROLE (Transact-SQL) Command 變更伺服器角色的成員資格或變更使用者定義伺服器角色的名稱。
DROP SERVER ROLE (Transact-SQL) Command 移除使用者定義伺服器角色。
sp_addsrvrolemember (Transact-SQL) Command 加入一個登入,做為伺服器層級角色的成員。 已被取代。 請改用 ALTER SERVER ROLE
sp_dropsrvrolemember (Transact-SQL) Command 從伺服器層級角色移除 SQL Server 登入,或是 Windows 使用者或群組。 已被取代。 請改用 ALTER SERVER ROLE

Azure Arc 所啟用 SQL Server 的特定角色

當您安裝適用於 SQL Server 的 Azure 擴充功能時,安裝:

  1. 建立伺服器層級角色:SQLArcExtensionServerRole
  2. 建立資料庫層級角色:SQLArcExtensionUserRole
  3. 將 NT AUTHORITY\SYSTEM 帳戶新增至每個角色
  4. 在每個資料庫的資料庫層級對應 NT AUTHORITY\SYSTEM
  5. 為已啟用功能授與最低權限

此外,當特定功能不再需要這些角色時,SQL Server 的 Azure 擴充功能會撤銷這些角色的權限。

如果您卸載適用於 SQL Server 的 Azure 擴充功能,則會移除伺服器和資料庫層級角色。

如需了解權限,請參閲權限