AD中建立自定義的AD屬性欄位
在 Active Directory (AD) 中建立自定義屬性欄位需要修改 AD 架構 (Schema),這是一項敏感操作,因為架構的變更是全局性的,且無法直接刪除,只能停用。因此,操作前務必謹慎並在測試環境中驗證。以下是逐步指南,幫助你在 AD 中建立自定義屬性欄位:
準備工作
- 確認權限:
- 你需要「Schema Admins」組的成員權限才能修改 AD 架構。
- 確保以具有適當權限的帳戶登入域控制器。
- 備份 AD:
- 修改架構前,務必備份 AD 資料庫,以防萬一需要還原。
- 可使用 Windows Server Backup 或其他工具備份系統狀態。
- 在測試環境中操作:
- 強烈建議先在非生產環境中測試所有步驟,避免對正式環境造成不可逆的影響。
- 啟用 Active Directory 架構管理工具:
- 預設情況下,AD 架構管理工具是隱藏的,需手動啟用:
- 以管理員身份開啟命令提示字元或 PowerShell。
- 輸入以下命令以註冊架構管理插件:
成功後會顯示確認訊息。cmdregsvr32 schmmgmt.dll
- 開啟 MMC (Microsoft Management Console):
- 輸入 mmc 並按 Enter。
- 點選「檔案」 > 「新增/移除嵌入式管理單元」。
- 選擇「Active Directory 架構」,點選「新增」並確定
- 預設情況下,AD 架構管理工具是隱藏的,需手動啟用:
步驟詳解:建立自定義屬性
步驟 1:生成唯一的 OID
每個自定義屬性需要一個全球唯一的物件識別碼 (OID)。OID 確保屬性不會與現有或未來屬性衝突。
- 從 Microsoft 生成 OID:
- 使用 Microsoft 提供的 VBScript 腳本生成 OID。以下是腳本範例(儲存為 oidgen.vbs):
vbscriptFunction GenerateOID()Dim guidString, oidPrefixDim guidPart0, guidPart1, guidPart2, guidPart3, guidPart4, guidPart5, guidPart6Dim oidPart0, oidPart1, oidPart2, oidPart3, oidPart4, oidPart5, oidPart6On Error Resume NextSet TypeLib = CreateObject("Scriptlet.TypeLib")guidString = TypeLib.GuidIf Err.Number <> 0 ThenWscript.Echo "ERROR: Guid could not be generated, please ensure machine has a network card."Err.ClearWScript.QuitEnd IfOn Error GoTo 0oidPrefix = "1.2.840.113556.1.8000.2554"guidPart0 = Trim(Mid(guidString, 2, 4))guidPart1 = Trim(Mid(guidString, 6, 4))guidPart2 = Trim(Mid(guidString, 11, 4))guidPart3 = Trim(Mid(guidString, 16, 4))guidPart4 = Trim(Mid(guidString, 21, 4))guidPart5 = Trim(Mid(guidString, 26, 6))guidPart6 = Trim(Mid(guidString, 32, 6))oidPart0 = CLng("&H" & guidPart0)oidPart1 = CLng("&H" & guidPart1)oidPart2 = CLng("&H" & guidPart2)oidPart3 = CLng("&H" & guidPart3)oidPart4 = CLng("&H" & guidPart4)oidPart5 = CLng("&H" & guidPart5)oidPart6 = CLng("&H" & guidPart6)GenerateOID = oidPrefix & "." & oidPart0 & "." & oidPart1 & "." & oidPart2 & "." & oidPart3 & _"." & oidPart4 & "." & oidPart5 & "." & oidPart6End FunctionWscript.Echo GenerateOID
- 執行腳本:
cmdcscript oidgen.vbs > oidInfo.txt
- 腳本會生成一個唯一的 OID,例如:
- text1.2.840.113556.1.8000.2554.55786.31829.55335.19299.48276.12206014.6177421
- 為屬性分配子 OID,例如在上述 OID 後加上 .2.1(表示屬性)。
- 使用 Microsoft 提供的 VBScript 腳本生成 OID。以下是腳本範例(儲存為 oidgen.vbs):
- 替代方法:申請正式 OID:
- 如果需要正式 OID,可透過 IANA 或其他授權機構申請,確保長期唯一性。
步驟 2:建立新屬性
- 開啟「Active Directory 架構」嵌入式管理單元。
- 在左側導覽窗格中,找到「屬性 (Attributes)」節點,右鍵點選,選擇「新建」 > 「屬性」。
- 填寫以下欄位:
- 公用名 (Common Name):例如 EmployeeBadge(建議以公司或專案前綴命名,如 MyCompany-EmployeeBadge)。
- LDAP 顯示名稱 (LDAP Display Name):通常與公用名相同,例如 employeeBadge。
- 唯一 X.500 物件識別碼 (Unique X.500 Object ID):輸入生成的 OID,例如 1.2.840.113556.1.8000.2554.55786.31829.55335.19299.48276.12206014.6177421.2.1。
- 描述 (Description):簡單描述屬性的用途,例如「員工編號」。
- 語法 (Syntax):選擇適合的資料類型,例如:
- 字串:Unicode String(常用於文字資料,如員工編號)。
- 整數:Integer(用於數字)。
- 布林值:Boolean(用於真/假)。
- 最小值/最大值:視需要設定,例如字串長度限制。
- 選項:
- 勾選「屬性已編入索引」以提高查詢效率(視需求)。
- 勾選「複寫到全域編錄」以確保屬性在全域編錄中可用(適用於跨域查詢)。
- 點選「確定」完成屬性建立。
注意:屬性一旦建立,無法刪除,只能停用(透過將 isDefunct 設為 True)。
步驟 3:將屬性關聯到類
新屬性需關聯到特定物件類(例如 user 或 group),才能在對應物件中使用。
- 在「Active Directory 架構」嵌入式管理單元中,找到「類 (Classes)」節點。
- 選擇目標類,例如 user,右鍵點選並選擇「屬性」。
- 在「屬性」標籤中,點選「新增」,從列表中選擇剛建立的屬性(例如 employeeBadge)。
- 選擇屬性類型(「選用屬性」或「必要屬性」),通常選擇「選用屬性」以保持靈活性。
- 點選「確定」完成關聯。
步驟 4:更新架構快取
- 新屬性可能不會立即生效,需等待約 5 分鐘讓架構快取自動更新,或手動觸發更新:
步驟 5:驗證並使用自定義屬性
- 透過 ADSI Edit 查看:
- 開啟 ADSI Edit,連接到「預設命名內容 (Default Naming Context)」。
- 找到目標物件(例如某個使用者),右鍵選擇「屬性」,檢查新屬性是否出現在列表中。
- 編輯屬性值,例如設定 employeeBadge 為 12345在 ADUC 中顯示。
注意事項
- OID 衝突:
- 確保 OID 唯一,否則可能導致架構損壞。建議使用腳本生成或申請正式 OID。
- 資料類型選擇:
- 選擇正確的語法(例如 Unicode String 用於文字,Integer 用於數字),錯誤的類型可能導致資料異常。
- 測試環境:
- 務必在測試環境中驗證所有步驟,確認無誤後再應用到生產環境。
- 權限控制:
- 自定義屬性預設對全域可見,可透過 AD 權限設定限制特定使用者或組的存取。
- 同步問題:
- 如果使用 Azure AD Connect 同步到 Azure AD,自定義屬性預設不會同步,需額外配置同步規則。
結論
透過以上步驟,可以在 Active Directory 中成功建立並使用自定義屬性欄位。雖然操作涉及修改架構,但只要遵循正確流程並在測試環境中驗證,就能安全實現。此功能能大幅提升 AD 的靈活性,滿足企業特定需求。
留言