伺服器層級角色
適用於: SQL Server Azure 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## 會持有檢視伺服器狀態的權限。 屬於此角色的登入會具備該資料庫的使用者帳戶 (master
和 WideWorldImporters
) 接著,此使用者也會擁有這些兩個資料庫中依繼承檢視資料庫狀態的權限。
您可以將伺服器層級主體 (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 (撤銷) 伺服器層級權限。 如果 securityadmin 擁有資料庫的存取權,也會有 GRANT 、DENY 和 REVOKE 資料庫層級權限。 此外,securityadmin 可以重設 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:processadmin、serveradmin、setupadmin 以及 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## 固定伺服器角色的成員可以連線到任何資料庫,而不需要資料庫中的使用者帳戶才能連線。 若要拒絕特定資料庫的 [連線] 權限,使用者可以為資料庫中的這個登入建立相符的使用者帳戶,然後 [拒絕] 資料庫使用者的 [連線] 權限。 此DENY 權限會覆寫來自這個角色的 GRANT CONNECT 權限。 |
##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 FREEPROCCACHE 、DBCC 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 和更早版本) 的權限。
重要
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 擴充功能時,安裝:
建立伺服器層級角色:SQLArcExtensionServerRole
建立資料庫層級角色:SQLArcExtensionUserRole
將 NT AUTHORITY\SYSTEM* 帳戶新增至每個角色
在每個資料庫的資料庫層級對應 NT AUTHORITY\SYSTEM*
為已啟用功能授與最低權限
*您也可以設定 Azure Arc 啟用的 SQL Server,以最低權限模式執行 (預覽版中提供)。 如需最低權限模式的詳細資料,請參閱<以最低權限執行透過 Azure Arc 啟用的 SQL Server (預覽版)>。
此外,當特定功能不再需要這些角色時,SQL Server 的 Azure 擴充功能會撤銷這些角色的權限。
SqlServerExtensionPermissionProvider
是 Windows 工作。 它會在偵測到 SQL Server 時授與或撤銷權限:
- 主機上已安裝新的 SQL Server 執行個體
- 不會解除安裝 SQL Server 執行個體。
- 執行個體層級功能已啟用或停用,或更新設定
- 延伸項目服務已重新啟動
注意
在 2024 年 7 月發佈之前,SqlServerExtensionPermissionProvider
是排程的工作。 每小時執行一次。
如需詳細資訊,請參閱設定適用於 SQL Server 的 Azure 延伸模組之 Windows 服務帳戶和權限。
如果您卸載適用於 SQL Server 的 Azure 擴充功能,則會移除伺服器和資料庫層級角色。
如需了解權限,請參閲權限。