這個主題是一個逐步教學指南。 它會建立簡單的範例 HR 資料庫,並將其用於匯入某些使用者及其群組成員資格。
備註
Microsoft Entra ID 現在提供輕量型代理程式型解決方案,以將使用者布建到 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 的用戶介面中,選取 [連接器],然後 [建立]。 選取 [一般 SQL (Microsoft),併為其指定描述性名稱。
- 尋找您在上一節中建立的 DSN 檔案,並將其上傳至伺服器。 提供認證以連線到資料庫。
- 在本逐步解說中,我們簡化並假設有兩種物件類型:User 和 Group。
- 若要尋找屬性,我們想要連接器查看數據表本身來偵測這些屬性。 由於 Users 是 SQL 中的保留字,因此我們需要在方括號 [ ] 中提供它。
- 定義錨點屬性和 DN 屬性的時間。 針對 使用者,我們會使用兩個屬性 username 和 EmployeeID 的組合。 對於 群組,我們會使用 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