一般 SQL 連接器的逐步解說
本主題是一份逐步解說指南。 它會建立簡單的範例 HR 資料庫,並用於匯入某些使用者和他們的群組成員資格。
注意
Microsoft Entra識別碼現在提供輕量型代理程式型解決方案,以將使用者布建到 SQL 資料庫,而不需要 MIM 同步部署。 建議您將其用於輸出使用者布建。 深入瞭解。
準備範例資料庫
在執行 SQL Server 的伺服器上,執行附錄 A中找到的 SQL 腳本。此腳本會建立名稱為 GSQLDEMO 的範例資料庫。 適用於所建立資料庫的物件模型如下圖所示︰
您也可以建立想要用來連接到資料庫的使用者。 在本逐步解說中,使用者將稱為 FABRIKAM\SQLUser 且位於網域中。
建立 ODBC 連接檔案
一般 SQL 連接器會使用 ODBC 連接到遠端伺服器。 首先我們需要建立含有 ODBC 連接資訊的檔案。
- 在伺服器上啟動 ODBC 管理公用程式︰
- 選取 [檔案 DSN] 索引標籤。 按一下 [新增...]。
- 現成可用的驅動程式可以正常運作,因此請加以選取,然後按 [下一步 >]。
- 為檔案名稱,例如 GenericSQL。
- 按一下 [完成] 。
- 設定連接的時機 為資料來源提供良好的說明,並提供執行 SQL Server 的伺服器名稱。
- 選取如何使用 SQL 進行驗證。 在此案例中,我們會使用 Windows 驗證。
- 提供範例資料庫的名稱 GSQLDEMO。
- 將此畫面上的所有項目保留為預設值。 按一下 [完成] 。
- 若要確認一切會如預期般運作,請按一下 [測試資料來源] 。
- 確定測試成功。
- ODBC 組態檔現在應該會顯示於 [檔案 DSN] 中。
我們現在已經擁有所需的檔案,就能開始建立連接器。
建立一般 SQL 連接器
- 在 Synchronization Service Manager UI 中,選取 [連接器] 和 [建立]。 選取 [一般 SQL (Microsoft)] 並為它提供描述性名稱。
- 尋找您在上一節中建立的 DSN 檔案,然後將它上傳到伺服器。 提供認證以連接到資料庫。
- 在本逐步解說中,為方便起見,我們假設有兩個物件類型:User 和 Group。
- 為了尋找屬性,我們想要讓連接器自行查看資料表,藉以偵測這些屬性。 由於 Users 是 SQL 中的保留字,因此提供時需要加上方括號 [ ]。
- 定義錨點屬性和 DN 屬性的時機。 我們針對 Users使用兩個屬性 (username 和 EmployeeID) 的組合。 我們針對 group使用GroupName (在真實生活中並不實際,但對本逐步解說而言,它是可行的)。
- 並非所有屬性類型都可以在 SQL 資料庫中偵測到。 特別是無法偵測到參考屬性類型。 針對群組物件類型,我們必須變更 OwnerID 和 MemberID 以供參考。
- 我們在上一個步驟中選取來做為參考屬性的屬性,要求的物件類型是這些值所參考的物件類型。 在此案例中為 User 物件類型。
- 在 [全域參數] 頁面中,選取 [浮水印] 做為差異策略。 此外,使用日期/時間格式 yyyy-MM-dd HH:mm:ss來輸入。
- 在 [設定資料分割和階層] 頁面上,同時選取這兩種物件類型。
- 在 [選取物件類型] 和 [選取屬性] 中,選取物件類型和所有屬性。 在 [設定錨點] 頁面上,按一下 [完成]。
建立執行設定檔
- 在 Synchronization Service Manager UI 中,選取 [連接器] 和 [設定執行設定檔]。 按一下 [新增設定檔]。 我們會從完整匯入開始。
- 選取類型 [完整匯入 (僅限階段)] 。
- 選取分割區 OBJECT=User。
- 選取 [資料表] 並輸入 [USERS]。 向下捲動到多重值物件類型區段,並輸入如下圖所示的資料。 選取 [完成] 以儲存步驟。
- 選取 [新增步驟]。 這次選取 [OBJECT=Group] 。 在最後一個頁面上,使用如下圖所示的組態。 按一下 [完成] 。
- 選用︰如果您想要,您可以設定其他的執行設定檔。 在這個逐步解說中,只會使用完整匯入。
- 按一下 [確定] 以完成變更執行設定檔。
新增一些測試資料並測試匯入
在範例資料庫中填入部分測試資料。 當您準備好時,選取 [執行] 和 [完整匯入]。
以下是具有兩個電話號碼的使用者以及含有一些成員的群組。
附錄 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