伺服器層級角色
本文內容
適用於:SQL Server
Azure SQL 受控執行個體
Analytics Platform System (PDW)
SQL Server 會提供伺服器層級角色來協助您管理伺服器的權限。 這些角色是將其他主體組成群組的安全性主體。 伺服器層級角色的權限範圍為整個伺服器 (「角色」就像是 Windows 作業系統中的「群組」)。
SQL Server 2019 (15.x) 和舊版提供了九個固定伺服器角色。 權限一旦授與給固定伺服器角色 (除了公開角色外),即無法變更。 從 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##
保留權限 VIEW SERVER STATE
。 屬於此角色成員的登入,在 master
和 WideWorldImporters
資料庫中具有使用者帳戶。 此使用者也透過繼承在那兩個資料庫中擁有 VIEW DATABASE STATE
權限。
您可以將伺服器層級主體 (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 登入都屬於公開伺服器角色。 當伺服器主體未授與或拒絕安全性實體物件的特定許可權時,用戶會繼承授與給該物件上 公用 的許可權。 只有當您想要讓所有使用者都能使用物件時,才將 公用 許可權指派給任何物件。 您無法變更公用 中的成員資格。 注意:公用 的實施方式與其他角色不同,而且可以從 公用 固定伺服器角色授予、拒絕或撤銷許可權。 |
重要
下列伺服器角色所提供的大部分許可權都不適用於 Azure Synapse Analytics - processadmin、serveradmin、setupadmin和 diskadmin。
下表顯示 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## 固定伺服器角色的成員可以連線到任何資料庫,而不需要資料庫中的使用者帳戶連線。若要拒絕特定資料庫的 CONNECT 許可權,使用者可以為資料庫中的這個登入建立相符的使用者帳戶,然後 DENY 資料庫使用者 CONNECT 許可權。 此 DENY 許可權會取代來自此角色的 GRANT CONNECT 許可權。 |
##MS_LoginManager## |
##MS_LoginManager## 固定伺服器角色的成員可以建立、刪除和修改登入。 與舊的固定伺服器角色 securityadmin 相反,此角色不允許成員具有 GRANT 權限。 這是更為受限的角色,可協助遵守最低權限原則。 |
##MS_DatabaseManager## |
##MS_DatabaseManager## 固定伺服器角色的成員可以建立和刪除資料庫。 建立資料庫之 ##MS_DatabaseManager## 角色的成員會成為該資料庫的擁有者,這可讓使用者以 dbo 使用者身分連接到該資料庫。
dbo 使用者具有資料庫的所有資料庫權限。
##MS_DatabaseManager## 角色的成員不一定有權存取他們不擁有的資料庫。 此伺服器角色在 SQL Server 中具有與 dbcreator 角色相同的許可權,但建議您在先前角色上使用這個新角色,因為此角色也存在於 Azure SQL Database 中,因此有助於在不同環境中使用相同的腳本。 |
##MS_ServerStateManager## |
##MS_ServerStateManager## 固定伺服器角色的成員具有與 ##MS_ServerStateReader## 角色相同的許可權。 此外,它也會保留 ALTER SERVER STATE 許可權,允許存取數個管理作業,例如:DBCC FREEPROCCACHE 、DBCC FREESYSTEMCACHE ('ALL') 、DBCC SQLPERF() |
##MS_ServerStateReader## |
##MS_ServerStateReader## 固定伺服器角色的成員可以讀取 VIEW SERVER STATE 涵蓋的所有動態管理檢視(DMV)和函式,並且在此角色成員擁有用戶帳戶的任何資料庫上具有 VIEW DATABASE STATE 許可權。 |
##MS_ServerPerformanceStateReader## |
##MS_ServerPerformanceStateReader## 固定伺服器角色的成員可以讀取 VIEW SERVER PERFORMANCE STATE 涵蓋的所有動態管理檢視(DMV)和函式,並且分別具有此角色成員擁有用戶帳戶之任何資料庫的 VIEW DATABASE PERFORMANCE STATE 許可權。
##MS_ServerStateReader## 伺服器角色能存取的範圍中的一個子集,有助於遵循 的最低許可權原則。 |
##MS_ServerSecurityStateReader## |
##MS_ServerSecurityStateReader## 固定伺服器角色的成員可以讀取 VIEW SERVER SECURITY STATE 涵蓋的所有動態管理檢視 (DMV) 和函數,此外,如果該角色的成員在某資料庫中擁有用戶帳戶,則對該資料庫具有 VIEW DATABASE SECURITY STATE 許可權。
##MS_ServerStateReader## 伺服器角色可存取的小型子集,有助於符合最低許可權原則 原則。 |
##MS_DefinitionReader## |
##MS_DefinitionReader## 固定伺服器角色的成員可以讀取 VIEW ANY DEFINITION 所涵蓋的所有目錄檢視,並且分別具有此角色成員具有用戶帳戶之任何資料庫的 VIEW DEFINITION 許可權。 |
##MS_PerformanceDefinitionReader## |
##MS_PerformanceDefinitionReader## 固定伺服器角色的成員可以讀取 VIEW ANY PERFORMANCE DEFINITION 所涵蓋的所有目錄檢視,並且對此角色成員在其中具有使用者帳戶的任何資料庫具有 VIEW PERFORMANCE DEFINITION 許可權。
##MS_DefinitionReader## 伺服器角色可存取的子集。 |
##MS_SecurityDefinitionReader## |
##MS_SecurityDefinitionReader## 固定伺服器角色的成員可以讀取 VIEW ANY SECURITY DEFINITION 所包含的所有目錄檢視,並在此角色成員有用戶帳戶的任何資料庫上擁有 VIEW SECURITY DEFINITION 許可權。
##MS_DefinitionReader## 伺服器角色可存取的小型子集,有助於符合 最低許可權原則。 |
每個固定伺服器角色都擁有指派給它的特定權限。
下表顯示指派給伺服器層級角色的權限。 只要使用者可以連線到個別資料庫,則也會顯示其繼承的資料庫層級權限。
固定伺服器層級角色 | 伺服器層級權限 | 資料庫層級權限 |
---|---|---|
##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 SERVER PERFORMANCE STATE - VIEW SERVER SECURITY STATE |
- VIEW DATABASE STATE - VIEW DATABASE PERFORMANCE STATE - VIEW DATABASE SECURITY STATE |
##MS_ServerStateReader## |
- VIEW SERVER STATE - VIEW SERVER PERFORMANCE STATE - VIEW SERVER SECURITY STATE |
- VIEW DATABASE STATE - VIEW DATABASE PERFORMANCE STATE - VIEW DATABASE SECURITY STATE |
##MS_ServerPerformanceStateReader## |
- VIEW SERVER PERFORMANCE STATE |
- VIEW DATABASE PERFORMANCE STATE |
##MS_ServerSecurityStateReader## |
- VIEW SERVER SECURITY STATE |
- VIEW DATABASE SECURITY STATE |
##MS_DefinitionReader## |
- VIEW ANY DATABASE - VIEW ANY DEFINITION - VIEW ANY PERFORMANCE DEFINITION - VIEW ANY SECURITY DEFINITION |
- VIEW DEFINITION - VIEW PERFORMANCE DEFINITION - VIEW SECURITY DEFINITION |
##MS_PerformanceDefinitionReader## |
- VIEW ANY PERFORMANCE DEFINITION |
- VIEW PERFORMANCE DEFINITION |
##MS_SecurityDefinitionReader## |
- VIEW ANY SECURITY DEFINITION |
- VIEW SECURITY DEFINITION |
下圖顯示指派給舊版伺服器角色的許可權(SQL Server 2019 (15.x) 和舊版)。
CONTROL SERVER
許可權類似,但與 系統管理員 固定伺服器角色不同。 具有 CONTROL SERVER
許可權的主體可以拒絕特定許可權。 從安全性觀點來看,請考慮具有 CONTROL SERVER
的主體與系統管理員成員相同,因為有數種可能的方式可將許可權從 CONTROL SERVER
提升為完整的系統管理員。 數個 DBCC
命令和許多系統程式都需要 系統管理員 固定伺服器角色的成員資格。
只有伺服器層級權限可加入至使用者定義伺服器角色。 若要列出伺服器層級權限,請執行以下陳述式。 伺服器層級權限為:
SELECT *
FROM sys.fn_builtin_permissions('SERVER')
ORDER BY permission_name;
如需有關 Permissions 的詳細資訊,請參閱 Permissions(Database Engine) 和 sys.fn_builtin_permissions。
下表將說明可用來處理伺服器層級角色的命令、檢視和函數。
功能 | 類型 | 描述 |
---|---|---|
sp_helpsrvrole | 中繼資料 | 傳回伺服器層級角色的清單。 |
sp_helpsrvrolemember | 中繼資料 | 傳回伺服器層級角色成員的相關資訊。 |
sp_srvrolepermission | 中繼資料 | 顯示伺服器層級角色的權限。 |
IS_SRVROLEMEMBER | 中繼資料 | 指出 SQL Server 登入是否為指定伺服器層級角色的成員。 |
sys.server_role_members | 中繼資料 | 針對每個伺服器層級角色的每個成員,各傳回一個資料列。 |
建立伺服器角色 | Command | 建立使用者定義伺服器角色。 |
ALTER SERVER ROLE | Command | 變更伺服器角色的成員資格或變更使用者定義伺服器角色的名稱。 |
刪除伺服器角色 | Command | 移除使用者定義伺服器角色。 |
sp_addsrvrolemember | Command | 加入一個登入,做為伺服器層級角色的成員。 已被取代。 請改用 ALTER SERVER ROLE 。 |
sp_dropsrvrolemember | Command | 從伺服器層級角色移除 SQL Server 登入,或是 Windows 使用者或群組。 已被取代。 請改用 ALTER SERVER ROLE 。 |
當您安裝適用於 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 擴充功能,則會移除伺服器和資料庫層級角色。
如需了解權限,請參閲權限。