實施 SQL Server Agent 安全性
重要
在 Azure SQL 受控實例上,目前支援大部分但並非所有 SQL Server Agent 功能。 如需詳細資訊,請參閱 與 SQL Server 的 Azure SQL 受控實例 T-SQL 差異。
SQL Server Agent 可讓資料庫管理員在只有執行該作業步驟所需的許可權的安全性內容中執行每個作業步驟,而該步驟是由 SQL Server Agent Proxy 所決定。 若要設定特定作業步驟的許可權,您可以建立具有必要許可權的 Proxy,然後將該 Proxy 指派給作業步驟。 您可以為多個作業步驟指定 Proxy。 針對需要相同許可權的作業步驟,您可以使用相同的 Proxy。
下一節說明您必須授與哪些資料庫角色給使用者,以便他們能夠使用 SQL Server Agent 建立或執行作業。
授與 SQL Server Agent 的存取權
若要使用 SQL Server Agent,用戶必須是下列一或多個固定資料庫角色的成員:
SQLAgentUserRole
SQLAgentReaderRole
SQLAgentOperatorRole
這些角色會儲存在 msdb 資料庫中。 根據預設,沒有任何用戶是這些資料庫角色的成員。 這些角色的成員資格必須明確地被授予。 屬於 系統管理員 固定伺服器角色成員的使用者具有 SQL Server Agent 的完整存取權,而且不需要是這些固定資料庫角色的成員,即可使用 SQL Server Agent。 如果使用者不是其中一個資料庫角色的成員,或是 系統管理員 角色的成員,則 SQL Server Agent 節點在使用 SQL Server Management Studio 連線到 SQL Server 時無法使用。
這些資料庫角色的成員可以檢視和執行自己擁有的作業,以及建立以現有 Proxy 帳戶身分執行的作業步驟。 如需與每個角色相關聯之特定許可權的詳細資訊,請參閱 SQL Server Agent 固定資料庫角色。
系統管理員 固定伺服器角色的成員具有建立、修改和刪除 Proxy 帳戶的許可權。 系統管理員 角色的成員有權建立未指定 Proxy 的作業步驟,而是以 SQL Server Agent 服務帳戶的形式執行,這是用來啟動 SQL Server Agent 的帳戶。
指引
請遵循下列指導方針來改善 SQL Server Agent 實作的安全性:
建立專用的 Proxy 用戶帳戶,並只使用這些 Proxy 用戶帳戶來執行作業步驟。
只授與 Proxy 用戶帳戶的必要許可權。 僅授與執行指派給指定 Proxy 帳戶之作業步驟所需的許可權。
請勿在屬於 Windows Administrators 群組成員的 Microsoft Windows 帳戶下執行 SQL Server Agent 服務。
Proxy 只能像 SQL Server 認證存放區一樣安全。
如果使用者寫入作業可以寫入 NT 事件日誌,則可以透過 SQL Server Agent 引發警示。
請勿將 NT 系統管理員帳戶指定為服務帳戶或 Proxy 帳戶。
SQL Server 和 SQL Server Agent 可以存取彼此的資產。 這兩個服務共用單一進程空間,而 SQL Server Agent 是 SQL Server 服務上的系統管理員。
當 TSX(目標伺服器) 使用 MSX(主伺服器)登記時,MSX 系統管理員會取得 SQL Server TSX 實例的總控制權。
ACE 是延伸模組,無法自行叫用。 Chainer ScenarioEngine.exe(也稱為 Microsoft.SqlServer.Chainer.Setup.exe)可以啟動 ACE。 其他主機進程也可以叫用 ACE。
ACE 取決於 SSDP 所擁有的下列組態 DLL,因為 ACE 會呼叫 DLL 的這些 API:
SCO - Microsoft.SqlServer.Configuration.Sco.dll,包括虛擬帳戶的新 SCO 驗證
叢集 - Microsoft.SqlServer.Configuration.Cluster.dll
SFC - Microsoft.SqlServer.Configuration.SqlConfigBase.dll
擴充功能 - Microsoft.SqlServer.Configuration.ConfigExtension.dll
連結的伺服器
在某些情況下,例如使用 Azure SQL 受控實例,若要透過連結的伺服器在遠端伺服器上執行 Transact-SQL (T-SQL) 查詢的 SQL Agent 作業,您必須將本機登入對應至遠端伺服器上的登入。
使用 sp_addlinkedsrvlogin,在本機伺服器上的登入與具有執行 T-SQL 查詢必要許可權的遠端伺服器上登入之間建立對應。 當 SQL Agent 作業透過連結的伺服器連線到遠端伺服器時,它會在遠端登錄的內容中執行 T-SQL 查詢。
下表說明如何在 Azure SQL 受控實例中,根據 SQL Agent 作業擁有者來對應登入:
SQL Agent 作業擁有者 | 如何設定登入 |
---|---|
非 系統管理員 的使用者 | 請將擁有 SQL Agent 作業的本機使用者 映射到遠端登錄。 |
系統管理員 | 藉由將 @locallogin 參數設定為 NULL ,將所有本機使用者 對應至遠端登錄。 |
注意
當本地伺服器是 Azure SQL 受控實例時,需要針對 SQL Agent 作業在遠端伺服器上建立登入。 未能正確映射使用者可能會導致錯誤,例如下列範例:
Windows logins are not supported in this version of SQL Server
Linked servers cannot be used under impersonation without a mapping for the impersonated login