複寫代理程式安全性模型

複寫代理程式安全性模型允許精確控制複寫代理程式執行並建立連接所使用的帳戶:您可為每個代理程式指定不同的帳戶。如需有關如何指定帳戶的詳細資訊,請參閱<管理複寫的登入與密碼>。

重要注意事項重要事項

系統管理員 (sysadmin) 固定伺服器角色的成員設定複寫時,複寫代理程式可以設定為模擬 SQL Server Agent 帳戶。完成這項作業的方法,就是不指定複寫代理程式的登入和密碼;不過,我們不建議此方式。反之,就安全性最佳作法而言,我們建議您為每個具有最小權限的代理程式指定帳戶;本主題稍後的<代理程式所需的權限>一節會描述最小權限。

跟所有可執行檔一樣,複寫代理程式也是在 Windows 帳戶的內容下執行。代理程式會利用此帳戶來建立「Windows 整合式安全性」連接。執行代理程式所使用的帳戶取決於代理程式的啟動方式:

  • 從 SQL Server Agent 作業啟動代理程式 (預設值):當 SQL Server 代理程式作業用來啟動複寫代理程式時,代理程式會在您設定複寫時指定的帳戶內容下執行。如需有關 SQL Server Agent 和複寫的詳細資訊,請參閱本主題稍後的<SQL Server Agent 下的代理程式安全性>一節。如需有關 SQL Server Agent 執行時帳戶所需權限的資訊,請參閱<設定 SQL Server Agent>。

  • 從 MS-DOS 命令列直接啟動代理程式或透過指令碼啟動代理程式:代理程式會在特定使用者帳戶內容下執行,該特定帳戶就是在命令列執行代理程式的帳戶。

  • 從使用 Replication Management Objects (RMO) 或 ActiveX 控制項的應用程式啟動代理程式:代理程式會在呼叫 RMO 或 ActiveX 控制項的應用程式的內容下執行。

    [!附註]

    ActiveX 控制項已被取代。

我們建議您在 Windows 整合式安全性的內容下建立連接。為了回溯相容性,您也可以使用 SQL Server 安全性。如需最佳作法的詳細資訊,請參閱<複寫安全性最佳作法>。

[!附註]

從 SQL Server 2000 建立的複寫指令碼應該針對 SQL Server 2008 而升級,才能利用安全性增強功能的好處。如需詳細資訊,請參閱<如何:升級複寫指令碼 (複寫 Transact-SQL 程式設計)>。

代理程式所需的權限

執行代理程式和建立連接所使用的帳戶需要多種權限。下表描述這些權限。我們建議每個代理程式均應使用不同的 Windows 帳戶執行,且帳戶應僅被授與所需權限。如需有關發行集存取清單 (PAL) (與多個代理程式相關) 的資訊,請參閱<保護發行者>。

[!附註]

Windows Vista 中的「使用者帳戶控制」(UAC) 可以防止以管理員權限存取快照集共用。因此,您必須針對快照集代理程式、散發代理程式和合併代理程式所使用的 Windows 帳戶,明確地授與快照集共用權限。即使 Windows 帳戶是管理員群組的成員,也必須這麼做。如需詳細資訊,請參閱<保護快照集資料夾>。

代理程式

權限

快照集代理程式

在連接到散發者時,需使用執行代理程式的 Windows 帳戶。這個帳戶必須:

  • 至少是散發資料庫中 db_owner 固定資料庫角色的成員。

  • 擁有快照集共用上的寫入權限。

用來連接發行者的帳戶必須至少是發行集資料庫中 db_owner 固定資料庫角色的成員。

記錄讀取器代理程式

在連接到散發者時,需使用執行代理程式的 Windows 帳戶。這個帳戶必須至少是散發資料庫中 db_owner 固定資料庫角色的成員。

用來連接發行者的帳戶必須至少是發行集資料庫中 db_owner 固定資料庫角色的成員。

發送訂閱的散發代理程式

在連接到散發者時,需使用執行代理程式的 Windows 帳戶。這個帳戶必須:

  • 至少是散發資料庫中 db_owner 固定資料庫角色的成員。

  • 為 PAL 的成員。

  • 擁有快照集共用上的讀取權限。

  • 如果訂閱是針對非 SQL Server 訂閱者,訂閱者之 OLE DB 提供者的安裝目錄上,就要擁有讀取權限。

用於連接訂閱者的帳戶必須至少為訂閱資料庫中 db_owner 固定資料庫角色的成員,或者,如果訂閱為非 SQL Server 訂閱者的訂閱,則應擁有相等權限。

提取訂閱的散發代理程式

在連接到訂閱者時,需使用執行代理程式的 Windows 帳戶。這個帳戶必須至少是訂閱資料庫中 db_owner 固定資料庫角色的成員。

用於連接散發者的帳戶必須:

  • 為 PAL 的成員。

  • 擁有快照集共用上的讀取權限。

發送訂閱的合併代理程式

與發行者和散發者建立連接時,需使用代理程式執行時所用的 Windows 帳戶。這個帳戶必須:

  • 至少是散發資料庫中 db_owner 固定資料庫角色的成員。

  • 為 PAL 的成員。

  • 為與發行集資料庫中使用者相關聯的登入。

  • 擁有快照集共用上的讀取權限。

用來連接訂閱者的帳戶必須至少是訂閱資料庫中 db_owner 固定資料庫角色的成員。

提取訂閱的合併代理程式

在連接到訂閱者時,需使用執行代理程式的 Windows 帳戶。這個帳戶必須至少是訂閱資料庫中 db_owner 固定資料庫角色的成員。

用於連接發行者和散發者的帳戶必須:

  • 為 PAL 的成員。

  • 為與發行集資料庫中使用者相關聯的登入。

  • 為與散發資料庫中使用者相關聯的登入。使用者可以是 Guest 使用者。

  • 擁有快照集共用上的讀取權限。

佇列讀取器代理程式

在連接到散發者時,需使用執行代理程式的 Windows 帳戶。這個帳戶必須至少是散發資料庫中 db_owner 固定資料庫角色的成員。

用來連接發行者的帳戶必須至少是發行集資料庫中 db_owner 固定資料庫角色的成員。

用來連接訂閱者的帳戶必須至少是訂閱資料庫中 db_owner 固定資料庫角色的成員。

SQL Server Agent 下的代理程式安全性

利用 SQL Server Management Studio、Transact-SQL 程序或 RMO 設定複寫時,依預設,會為每個代理程式建立 SQL Server Agent 作業。然後,代理程式將在作業步驟內容下執行,無論是連續執行、按排程執行,或者在需要時執行。您可以在 SQL Server Management Studio 中的 [作業] 資料夾下檢視這些作業。下表列出各個作業名稱。

代理程式

作業名稱

快照集代理程式

<Publisher>-<PublicationDatabase>-<Publication>-<integer>

合併式發行集分割的快照集代理程式

Dyn_<Publisher>-<PublicationDatabase>-<Publication>-<GUID>

記錄讀取器代理程式

<Publisher>-<PublicationDatabase>-<integer>

提取訂閱的合併代理程式

<Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<SubscriptionDatabase>-<integer>

發送訂閱的合併代理程式

<Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<integer>

發送訂閱的散發代理程式

<Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<integer>1

提取訂閱的散發代理程式

<Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<SubscriptionDatabase>-<GUID>2

發送訂閱至非 SQL Server 訂閱者的散發代理程式

<Publisher>-<PublicationDatabase>-<Publication>-<Subscriber>-<integer>

佇列讀取器代理程式

[<Distributor>].<integer>

1 如果是 Oracle 發行集的發送訂閱,作業名稱是 [<Publisher>-<Publisher]>,而不是 [<Publisher>-<PublicationDatabase>]

2 如果是 Oracle 發行集的提取訂閱,作業名稱是 [<Publisher>-<DistributionDatabase]>,而不是 [<Publisher>-<PublicationDatabase>]

在複寫設定期間,指定代理程式應在其下執行的帳戶。但是,所有作業步驟均在 Proxy 安全性內容下執行,因此複寫將為您指定的代理程式帳戶在內部執行下列對應:

  • 先利用 Transact-SQLCREATE CREDENTIAL 陳述式將帳戶對應至認證。SQL Server Agent Proxy 使用認證來儲存 Windows 使用者帳戶的相關資訊。

  • 呼叫預存程序 sp_add_proxy,並利用認證建立 Proxy。如需 Proxy 的詳細資訊,請參閱<建立 SQL Server Agent Proxy>。

[!附註]

提供此資訊的目的,是為了協助您瞭解,利用適當的安全性內容執行代理程式時會涉及哪些項目。您不應該直接與已建立的認證或 Proxy 互動。