

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 SQL Server 僅供讀取複本同步資料庫使用者和物件
<a name="SQLServer.ReadReplicas.ObjectSynchronization"></a>

建立僅供讀取複本時，主要資料庫執行個體中存在的任何登入、自訂伺服器角色、SQL 代理程式任務或其他伺服器層級物件都應該會呈現在新建立的僅供讀取複本中。不過，建立僅供讀取複本後，在主要資料庫執行個體中建立的任何伺服器層級物件都不會自動複寫，而且您必須在僅供讀取複本中手動建立這些物件。

資料庫使用者會自動從主要資料庫執行個體複寫到僅供讀取複本。由於僅供讀取複本資料庫處於唯讀模式，因此無法在資料庫中更新資料庫使用者的安全性識別碼 (SID)。因此，在僅供讀取複本中建立 SQL 登入時，務必確保該登入的 SID 符合主要資料庫執行個體中對應 SQL 登入的 SID。如果您未同步 SQL 登入的 SID，它們將無法存取僅供讀取複本中的資料庫。Windows Active Directory (AD) 驗證的登入不會遇到這個問題，因為 SQL Server 會從 Active Directory 取得 SID。

**將主要資料庫執行個體中的 SQL 登入同步至僅供讀取複本**

1. 連線至主要資料庫執行個體。

1. 在主要資料庫執行個體中建立新的 SQL 登入。

   ```
   USE [master]
   GO
   CREATE LOGIN TestLogin1
   WITH PASSWORD = 'REPLACE WITH PASSWORD';
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

1. 為資料庫中的 SQL 登入建立新的資料庫使用者。

   ```
   USE [REPLACE WITH YOUR DB NAME]
   GO
   CREATE USER TestLogin1 FOR LOGIN TestLogin1;
   GO
   ```

1. 檢查主要資料庫執行個體中新建立之 SQL 登入的 SID。

   ```
   SELECT name, sid FROM sys.server_principals WHERE name =  'TestLogin1';
   ```

1. 連線至僅供讀取複本。建立新的 SQL 登入。

   ```
   CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD', SID=REPLACE WITH sid FROM STEP #4;
   ```

**或者，如果您有僅供讀取複本資料庫的存取權，則可以依照下列方式修正孤立的使用者：**

1. 連線至僅供讀取複本。

1. 識別資料庫中孤立的使用者。

   ```
   USE [REPLACE WITH YOUR DB NAME]
   GO
   EXEC sp_change_users_login 'Report';
   GO
   ```

1. 為孤立的資料庫使用者建立新的 SQL 登入。

   ```
   CREATE LOGIN TestLogin1 WITH PASSWORD = 'REPLACE WITH PASSWORD', SID=REPLACE WITH sid FROM STEP #2;
   ```

   範例：

   ```
   CREATE LOGIN TestLogin1 WITH PASSWORD = 'TestPa$$word#1', SID=0x1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P;
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。