共用方式為


一般 SQL 連接器的逐步解說

本主題是一份逐步解說指南。 它會建立簡單的範例 HR 資料庫,並用於匯入某些使用者和他們的群組成員資格。

注意

Microsoft Entra識別碼現在提供輕量型代理程式型解決方案,以將使用者布建到 SQL 資料庫,而不需要 MIM 同步部署。 建議您將其用於輸出使用者布建。 深入瞭解

準備範例資料庫

在執行 SQL Server 的伺服器上,執行附錄 A中找到的 SQL 腳本。此腳本會建立名稱為 GSQLDEMO 的範例資料庫。 適用於所建立資料庫的物件模型如下圖所示︰
物件模型

您也可以建立想要用來連接到資料庫的使用者。 在本逐步解說中,使用者將稱為 FABRIKAM\SQLUser 且位於網域中。

建立 ODBC 連接檔案

一般 SQL 連接器會使用 ODBC 連接到遠端伺服器。 首先我們需要建立含有 ODBC 連接資訊的檔案。

  1. 在伺服器上啟動 ODBC 管理公用程式︰
    顯示已輸入 O D B C 的搜尋欄位螢幕擷取畫面。
  2. 選取 [檔案 DSN] 索引標籤。 按一下 [新增...]。
    已選取 [檔案 D S N] 索引標籤的 O D B C 管理公用程式的螢幕擷取畫面。
  3. 現成可用的驅動程式可以正常運作,因此請加以選取,然後按 [下一步 >]。
    顯示新資料來源驅動程式選項的螢幕擷取畫面。
  4. 為檔案名稱,例如 GenericSQL
    此螢幕擷取畫面顯示欄位中輸入的範例新檔案名,以及 [下一步] 按鈕。
  5. 按一下 [完成] 。
    顯示新資料來源詳細資料和 [完成] 按鈕的螢幕擷取畫面。
  6. 設定連接的時機 為資料來源提供良好的說明,並提供執行 SQL Server 的伺服器名稱。
    顯示組態精靈的螢幕擷取畫面,其中包含範例描述和伺服器名稱,以及 [下一步] 按鈕。
  7. 選取如何使用 SQL 進行驗證。 在此案例中,我們會使用 Windows 驗證。
    顯示已選取整合式 Windows 驗證選項和 [下一步] 按鈕的驗證步驟螢幕擷取畫面。
  8. 提供範例資料庫的名稱 GSQLDEMO
    此螢幕擷取畫面顯示資料庫欄位中輸入的資料庫名稱,以及 [下一步] 按鈕。
  9. 將此畫面上的所有項目保留為預設值。 按一下 [完成] 。
    此螢幕擷取畫面顯示精靈最後一個步驟的預設設定和 [完成] 按鈕。
  10. 若要確認一切會如預期般運作,請按一下 [測試資料來源]
    顯示新 O D B C 資料來源和 [測試資料來源] 按鈕之組態詳細資料的螢幕擷取畫面。
  11. 確定測試成功。
    顯示測試結果和 O K 按鈕的螢幕擷取畫面。
  12. ODBC 組態檔現在應該會顯示於 [檔案 DSN] 中。
    O D B C 管理公用程式的螢幕擷取畫面,其中已選取 [檔案 D S N] 索引標籤,並列出新的 O D B C 組態檔。

我們現在已經擁有所需的檔案,就能開始建立連接器。

建立一般 SQL 連接器

  1. 在 Synchronization Service Manager UI 中,選取 [連接器] 和 [建立]。 選取 [一般 SQL (Microsoft)] 並為它提供描述性名稱。
    顯示 [建立連接器精靈] 的螢幕擷取畫面,其中已選取連接器和 [下一步] 按鈕。
  2. 尋找您在上一節中建立的 DSN 檔案,然後將它上傳到伺服器。 提供認證以連接到資料庫。
    顯示已輸入認證的 D S N 檔案和 [下一步] 按鈕的螢幕擷取畫面。
  3. 在本逐步解說中,為方便起見,我們假設有兩個物件類型:UserGroup此螢幕擷取畫面顯示固定值清單欄位中輸入的兩種物件類型,以及 [下一步] 按鈕。
  4. 為了尋找屬性,我們想要讓連接器自行查看資料表,藉以偵測這些屬性。 由於 Users 是 SQL 中的保留字,因此提供時需要加上方括號 [ ]。
    顯示使用者資料表和資料表值的屬性偵測值,以及 [下一步] 按鈕的螢幕擷取畫面。
  5. 定義錨點屬性和 DN 屬性的時機。 我們針對 Users使用兩個屬性 (username 和 EmployeeID) 的組合。 我們針對 group使用GroupName (在真實生活中並不實際,但對本逐步解說而言,它是可行的)。 顯示使用者名稱、員工識別碼和組名的螢幕擷取畫面,其中包含 [下一步] 按鈕。
  6. 並非所有屬性類型都可以在 SQL 資料庫中偵測到。 特別是無法偵測到參考屬性類型。 針對群組物件類型,我們必須變更 OwnerID 和 MemberID 以供參考。
    顯示更新的擁有者識別碼和成員識別碼欄位,以及 [下一步] 按鈕的螢幕擷取畫面。
  7. 我們在上一個步驟中選取來做為參考屬性的屬性,要求的物件類型是這些值所參考的物件類型。 在此案例中為 User 物件類型。
    顯示已選取物件類型的螢幕擷取畫面,以及 [下一步] 按鈕。
  8. 在 [全域參數] 頁面中,選取 [浮水印] 做為差異策略。 此外,使用日期/時間格式 yyyy-MM-dd HH:mm:ss來輸入。 顯示差異策略欄位和日期和時間格式,以及 [下一步] 按鈕的螢幕擷取畫面。
  9. 在 [設定資料分割和階層] 頁面上,同時選取這兩種物件類型。 顯示已選取兩種物件類型的螢幕擷取畫面,以及 [下一步] 按鈕。
  10. 在 [選取物件類型] 和 [選取屬性] 中,選取物件類型和所有屬性。 在 [設定錨點] 頁面上,按一下 [完成]

建立執行設定檔

  1. 在 Synchronization Service Manager UI 中,選取 [連接器] 和 [設定執行設定檔]。 按一下 [新增設定檔]。 我們會從完整匯入開始。
    顯示 [設定執行設定檔精靈] 的螢幕擷取畫面,其中已輸入 [名稱] 欄位中的 [完整匯入],以及 [下一步] 按鈕。
  2. 選取類型 [完整匯入 (僅限階段)]
    此螢幕擷取畫面顯示已選取的類型和 [下一步] 按鈕。
  3. 選取分割區 OBJECT=User
    此螢幕擷取畫面顯示已選取的資料分割和 [下一步] 按鈕。
  4. 選取 [資料表] 並輸入 [USERS]。 向下捲動到多重值物件類型區段,並輸入如下圖所示的資料。 選取 [完成] 以儲存步驟。
    此螢幕擷取畫面顯示已選取的作業方法 [資料表] 和 [資料表] 欄位中的使用者。
    此螢幕擷取畫面顯示針對名稱和聯結條件輸入的多值物件類型值。
  5. 選取 [新增步驟]。 這次選取 [OBJECT=Group] 。 在最後一個頁面上,使用如下圖所示的組態。 按一下 [完成] 。
    此螢幕擷取畫面顯示 [資料表] 欄位中選取的作業方法 [資料表] 和 [群組]。
    此螢幕擷取畫面顯示針對資料表和聯結條件名稱輸入的物件類型值。
  6. 選用︰如果您想要,您可以設定其他的執行設定檔。 在這個逐步解說中,只會使用完整匯入。
  7. 按一下 [確定] 以完成變更執行設定檔。

新增一些測試資料並測試匯入

在範例資料庫中填入部分測試資料。 當您準備好時,選取 [執行] 和 [完整匯入]

以下是具有兩個電話號碼的使用者以及含有一些成員的群組。
顯示具有兩個電話號碼的使用者資料的螢幕擷取畫面。
顯示具有某些成員之群組的資料螢幕擷取畫面。

附錄 A

建立範例資料庫的 SQL 指令碼

---Creating the Database---------
Create Database GSQLDEMO
Go
-------Using the Database-----------
Use [GSQLDEMO]
Go
-------------------------------------
USE [GSQLDEMO]
GO
/****** Object:  Table [dbo].[GroupMembers]   ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[GroupMembers](
    [MemberID] [int] NOT NULL,
    [Group_ID] [int] NOT NULL
) ON [PRIMARY]

GO
/****** Object:  Table [dbo].[GROUPS]   ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[GROUPS](
    [GroupID] [int] NOT NULL,
    [GROUPNAME] [nvarchar](200) NOT NULL,
    [DESCRIPTION] [nvarchar](200) NULL,
    [WATERMARK] [datetime] NULL,
    [OwnerID] [int] NULL,
PRIMARY KEY CLUSTERED
(
    [GroupID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
/****** Object:  Table [dbo].[USERPHONE]   ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[USERPHONE](
    [USER_ID] [int] NULL,
    [Phone] [varchar](20) NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[USERS]   ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[USERS](
    [USERID] [int] NOT NULL,
    [USERNAME] [nvarchar](200) NOT NULL,
    [FirstName] [nvarchar](100) NULL,
    [LastName] [nvarchar](100) NULL,
    [DisplayName] [nvarchar](100) NULL,
    [ACCOUNTDISABLED] [bit] NULL,
    [EMPLOYEEID] [int] NOT NULL,
    [WATERMARK] [datetime] NULL,
PRIMARY KEY CLUSTERED
(
    [USERID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
ALTER TABLE [dbo].[GroupMembers]  WITH CHECK ADD  CONSTRAINT [FK_GroupMembers_GROUPS] FOREIGN KEY([Group_ID])
REFERENCES [dbo].[GROUPS] ([GroupID])
GO
ALTER TABLE [dbo].[GroupMembers] CHECK CONSTRAINT [FK_GroupMembers_GROUPS]
GO
ALTER TABLE [dbo].[GroupMembers]  WITH CHECK ADD  CONSTRAINT [FK_GroupMembers_USERS] FOREIGN KEY([MemberID])
REFERENCES [dbo].[USERS] ([USERID])
GO
ALTER TABLE [dbo].[GroupMembers] CHECK CONSTRAINT [FK_GroupMembers_USERS]
GO
ALTER TABLE [dbo].[GROUPS]  WITH CHECK ADD  CONSTRAINT [FK_GROUPS_USERS] FOREIGN KEY([OwnerID])
REFERENCES [dbo].[USERS] ([USERID])
GO
ALTER TABLE [dbo].[GROUPS] CHECK CONSTRAINT [FK_GROUPS_USERS]
GO
ALTER TABLE [dbo].[USERPHONE]  WITH CHECK ADD  CONSTRAINT [FK_USERPHONE_USER] FOREIGN KEY([USER_ID])
REFERENCES [dbo].[USERS] ([USERID])
GO
ALTER TABLE [dbo].[USERPHONE] CHECK CONSTRAINT [FK_USERPHONE_USER]
GO