資料庫層級角色
適用於:Microsoft Fabric 中的 SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) SQL Database
為了輕鬆管理資料庫中的權限,SQL Server 提供幾種角色,些角色是將其他主體分組的安全性主體。 角色就像 Windows 作業系統中的群組一樣。 資料庫層級角色的權限範圍為整個資料庫。
若要新增和移除資料庫角色的使用者,請使用 ADD MEMBER
ALTER ROLE DROP MEMBER
陳述式的 和 選項。 Analytics Platform System (PDW) 和 Azure Synapse Analytics 不支援使用 ALTER ROLE
。 請改用舊版的 sp_addrolemember 和 sp_droprolemember 程序。
資料庫層級角色類型有兩種:在資料庫中預先定義的「固定資料庫角色」以及您可以建立的「使用者定義資料庫角色」。
固定資料庫角色義於資料庫層級,並存在每個資料庫中。 db_owner 資料庫角色的成員可以管理固定的資料庫角色成員資格。 在 msdb
資料庫中,也有一些特殊用途的資料庫角色。
您可以將任何資料庫帳戶和其他 SQL Server 角色加入資料庫層級角色中。
提示
請勿將使用者定義資料庫角色當作固定角色成員加入。 這樣會產生不必要的權限擴大。
使用者定義資料庫角色的權限可以使用 GRANT、DENY 和 REVOKE 陳述式自訂。 如需詳細資訊,請參閱 權限 (Database Engine)。
如需所有權限的清單,請參閱 Database Engine 權限 海報。 資料庫角色不能獲派伺服器層級權限。 登入和其他伺服器層級主體 (例如伺服器角色) 無法加入資料庫角色。 如需 SQL Server 的伺服器層級安全性,請改用伺服器角色。 伺服器層級權限不能透過 Azure SQL 資料庫和 Azure Synapse Analytics 中的角色授與。
固定資料庫角色
下表顯示固定資料庫角色及其功能。 這些角色存在所有資料庫中。 除了 public 資料庫角色外,指派給固定資料庫角色的權限無法變更。
固定資料庫角色名稱 | 描述 |
---|---|
db_owner | db_owner 固定資料庫角色的成員可以在資料庫上執行所有的組態和維護活動,也可以在 SQL Server 中 DROP 資料庫。 (在 SQL Database 和 Azure Synapse 中,某些維護活動需要伺服器層級的權限,而且無法由 db_owners 執行。) |
db_securityadmin | db_securityadmin 固定資料庫角色的成員可以修改角色成員資格 (僅自訂角色) 以及管理權限。 此角色的成員可能會提升其權限,因此其動作應受到監視。 |
db_accessadmin | db_accessadmin 固定資料庫角色的成員可以針對 Windows 登入、Windows 群組及 SQL Server 登入加入或移除資料庫的存取權。 |
db_backupoperator | db_backupoperator 固定資料庫角色的成員可以備份資料庫。 |
db_ddladmin | db_ddladmin 固定資料庫角色的成員可在資料庫中執行任何「資料定義語言」(DDL) 的命令。 此角色的成員可以藉由操作可透過高權限執行的程式碼來提升其權限,而他們的動作應受到監控。 |
db_datawriter | db_datawriter 固定資料庫角色的成員可以加入、刪除或變更所有使用者資料表中的資料。 在大部分的使用案例中,此角色會與 db_datareader 成員資格結合,以允許讀取要修改的資料。 |
db_datareader | db_datareader 固定資料庫角色的成員可以從所有使用者資料表及檢視中讀取所有資料。 除了 sys 和 INFORMATION_SCHEMA 以外,使用者物件可以存在於任何結構描述中。 |
db_denydatawriter | db_denydatawriter 固定資料庫角色的成員不能加入、修改或刪除資料庫中使用者資料表的任何資料。 |
db_denydatareader | db_denydatareader 固定資料庫角色的成員不能讀取資料庫中使用者資料表和檢視的任何資料。 |
指派給固定資料庫角色的權限無法變更。 下圖顯示指派給固定資料庫角色的權限:
Azure SQL 資料庫和 Azure Synapse 的特殊角色
這些資料庫角色只存在於虛擬 master
資料庫中。 其權限僅限於能在 master
中執行的動作。 只有 master
資料庫使用者可以加入這些角色中。 這些角色中不能加入登入,但可以根據登入建立使用者,然後將這些使用者加入角色中。 master
自主資料庫使用者,也可加入這些角色中。 但是,在 master
中加入到 dbmanager 角色的自主資料庫使用者不能用來建立新的資料庫。
角色名稱 | 描述 |
---|---|
dbmanager | 可以建立和刪除資料庫。 建立資料庫的 dbmanager 角色成員會變成該資料庫的擁有者,讓使用者能夠像 dbo 使用者一樣連線至該資料庫。 dbo 使用者具有資料庫的所有資料庫權限。 dbmanager 角色成員不一定有權限可存取非其所有的資料庫。 |
db_exporter | db_exporter 固定資料庫角色的成員可以執行所有資料匯出活動。 透過此角色授與的權限包括 CREATE TABLE 、ALTER ANY SCHEMA 、ALTER ANY EXTERNAL DATA SOURCE 、ALTER ANY EXTERNAL FILE FORMAT 。僅適用於:Azure Synapse Analytics 專用 SQL 集區 (原為 SQL DW) |
loginmanager | 可以建立及刪除虛擬 master 資料庫的登入。 |
注意
伺服器層級主體和 Microsoft Entra 管理員 (如已設定) 具有 SQL Database 和 Azure Synapse Analytics 的所有權限,而不必是任何角色成員。 如需詳細資訊,請參閱將資料庫存取權限授與 SQL Database、SQL 受控執行個體和 Azure Synapse Analytics。
某些資料庫角色不適用於 Azure SQL 或 Azure Synapse:
db_backupoperator 不適用於 Azure SQL 資料庫 (非 Azure SQL 受控執行個體) 與 Azure Synapse Analytics 無伺服器集區,因為無法使用備份和還原 T-SQL 命令。
db_datawriter 與 db_denydatawriter 不適用於 Azure Synapse Analytics 無伺服器,因為其只能讀取外部資料。
msdb 資料庫中的角色
msdb
資料庫含有下表所示的特殊用途角色。
msdb 角色名稱 |
描述 |
---|---|
db_ssisadmin db_ssisoperator db_ssisltduser |
這些資料庫角色的成員可以管理和使用 SSIS。 從舊版升級的 SQL Server 執行個體可能會包含使用 Data Transformation Services (DTS) 而非 SSIS 所命名的舊版角色。 如需詳細資訊,請參閱 Integration Services 角色 (SSIS 服務)。 |
dc_admin dc_operator dc_proxy |
這些資料庫角色的成員可以管理和使用資料收集器。 如需相關資訊,請參閱資料收集。 |
PolicyAdministratorRole | db_ PolicyAdministratorRole 資料庫角色的成員可以在以原則為基礎的管理原則和條件上執行所有組態和維護活動。 如需詳細資訊,請參閱 使用原則式管理來管理伺服器。 |
ServerGroupAdministratorRole ServerGroupReaderRole |
這些資料庫角色的成員可以管理和使用已註冊的伺服器群組。 |
dbm_monitor | 在「資料庫鏡像監視器」中註冊第一個資料庫時,於 msdb 資料庫中建立的。 dbm_monitor 角色沒有任何成員,必須由系統管理員指派使用者給該角色。 |
db_ssisadmin 角色和 dc_admin 角色的成員可以將其權限提高為系統管理員。 提高權限是因為這些角色可以修改整合服務封裝,而使用 SQL Server Agent 系統管理員資訊安全內容後,SQL Server 即可執行整合服務封裝。 執行維護計畫、資料收集組和其他整合服務封裝時,若要預防權限提高,請將執行封裝的 SQL Server Agent 作業設為使用有限權限的 Proxy 帳戶,或只新增系統管理員成員至 db_ssisadmin 和 dc_admin 角色。
使用資料庫層級角色
下表說明用於使用資料庫層級角色的命令、檢視及函數。
功能 | 類型 | 描述 |
---|---|---|
sp_helpdbfixedrole | 中繼資料 | 傳回固定資料庫角色的清單。 |
sp_dbfixedrolepermission | 中繼資料 | 顯示固定資料庫角色的權限。 |
sp_helprole | 中繼資料 | 傳回目前資料庫中角色的相關資訊。 |
sp_helprolemember | 中繼資料 | 傳回目前資料庫中角色成員的相關資訊。 |
sys.database_role_members | 中繼資料 | 針對每個資料庫角色的每個成員,各傳回一個資料列。 |
IS_MEMBER | 中繼資料 | 指出目前使用者是否是指定之 Microsoft Windows 群組、Microsoft Entra 群組或 Microsoft SQL Server 資料庫角色的成員。 |
CREATE ROLE | Command | 在目前資料庫中建立新的資料庫角色。 |
ALTER_ROLE | Command | 變更資料庫角色的名稱或成員資格。 |
DROP ROLE | Command | 從資料庫中移除角色。 |
sp_addrole | Command | 在目前資料庫中建立新的資料庫角色。 |
sp_droprole | Command | 從目前資料庫移除資料庫角色。 |
sp_addrolemember | Command | 在目前資料庫的資料庫角色中,加入資料庫使用者、資料庫角色、Windows 登入或 Windows 群組。 除 Analytics Platform System (PDW) 和 Azure Synapse 外,所有平台都應該改用 ALTER ROLE 。 |
sp_droprolemember | Command | 從目前資料庫中的 SQL Server 角色移除安全性帳戶。 除 Analytics Platform System (PDW) 和 Azure Synapse 外,所有平台都應該改用 ALTER ROLE 。 |
GRANT | 權限 | 新增角色權限。 |
DENY | 權限 | 拒絕角色的權限。 |
REVOKE | 權限 | 移除先前授與或拒絕的權限。 |
公用資料庫角色
每個資料庫使用者都屬於 public 資料庫角色。 當使用者未授與或拒絕安全物件的特定權限時,該使用者會繼承授與給該物件之 public 的權限。 無法移除 public 角色中的資料庫使用者。
範例
本章節中的範例會示範如何使用資料庫層級角色。
A. 將使用者新增至資料庫層級角色
下列範例會將使用者 'Ben' 新增至固定資料庫層級角色 db_datareader
。
ALTER ROLE db_datareader ADD MEMBER Ben;
GO
B. 列出屬於資料庫層級角色成員的所有資料庫主體
下列陳述式會傳回任何資料庫角色的所有成員。
SELECT roles.principal_id AS RolePrincipalID,
roles.name AS RolePrincipalName,
database_role_members.member_principal_id AS MemberPrincipalID,
members.name AS MemberPrincipalName
FROM sys.database_role_members AS database_role_members
INNER JOIN sys.database_principals AS roles
ON database_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.database_principals AS members
ON database_role_members.member_principal_id = members.principal_id;
GO