AD中建立自定義的AD屬性欄位

 在 Active Directory (AD) 中建立自定義屬性欄位需要修改 AD 架構 (Schema),這是一項敏感操作,因為架構的變更是全局性的,且無法直接刪除,只能停用。因此,操作前務必謹慎並在測試環境中驗證。以下是逐步指南,幫助你在 AD 中建立自定義屬性欄位:

準備工作

  1. 確認權限
    • 你需要「Schema Admins」組的成員權限才能修改 AD 架構。
    • 確保以具有適當權限的帳戶登入域控制器。
  2. 備份 AD
    • 修改架構前,務必備份 AD 資料庫,以防萬一需要還原。
    • 可使用 Windows Server Backup 或其他工具備份系統狀態。
  3. 在測試環境中操作
    • 強烈建議先在非生產環境中測試所有步驟,避免對正式環境造成不可逆的影響。
  4. 啟用 Active Directory 架構管理工具
    • 預設情況下,AD 架構管理工具是隱藏的,需手動啟用:
      1. 以管理員身份開啟命令提示字元或 PowerShell。
      2. 輸入以下命令以註冊架構管理插件:
        cmd
        regsvr32 schmmgmt.dll
        成功後會顯示確認訊息。



      3. 開啟 MMC (Microsoft Management Console):
        • 輸入 mmc 並按 Enter。
        • 點選「檔案」 > 「新增/移除嵌入式管理單元」。
        • 選擇「Active Directory 架構」,點選「新增」並確定



步驟詳解:建立自定義屬性

步驟 1:生成唯一的 OID

每個自定義屬性需要一個全球唯一的物件識別碼 (OID)。OID 確保屬性不會與現有或未來屬性衝突。

  1. 從 Microsoft 生成 OID
    • 使用 Microsoft 提供的 VBScript 腳本生成 OID。以下是腳本範例(儲存為 oidgen.vbs):
      vbscript
      Function GenerateOID()
      Dim guidString, oidPrefix
      Dim guidPart0, guidPart1, guidPart2, guidPart3, guidPart4, guidPart5, guidPart6
      Dim oidPart0, oidPart1, oidPart2, oidPart3, oidPart4, oidPart5, oidPart6
      On Error Resume Next
      Set TypeLib = CreateObject("Scriptlet.TypeLib")
      guidString = TypeLib.Guid
      If Err.Number <> 0 Then
      Wscript.Echo "ERROR: Guid could not be generated, please ensure machine has a network card."
      Err.Clear
      WScript.Quit
      End If
      On Error GoTo 0
      oidPrefix = "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 & "." & oidPart6
      End Function
      Wscript.Echo GenerateOID
    • 執行腳本:
      cmd
      cscript oidgen.vbs > oidInfo.txt
    • 腳本會生成一個唯一的 OID,例如:
    • text
      1.2.840.113556.1.8000.2554.55786.31829.55335.19299.48276.12206014.6177421
    • 為屬性分配子 OID,例如在上述 OID 後加上 .2.1(表示屬性)。
  2. 替代方法:申請正式 OID
    • 如果需要正式 OID,可透過 IANA 或其他授權機構申請,確保長期唯一性。

步驟 2:建立新屬性

  1. 開啟「Active Directory 架構」嵌入式管理單元。
  2. 在左側導覽窗格中,找到「屬性 (Attributes)」節點,右鍵點選,選擇「新建」 > 「屬性」。


  3. 填寫以下欄位:
    • 公用名 (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(用於真/假)。
    • 最小值/最大值:視需要設定,例如字串長度限制。
    • 選項
      • 勾選「屬性已編入索引」以提高查詢效率(視需求)。
      • 勾選「複寫到全域編錄」以確保屬性在全域編錄中可用(適用於跨域查詢)。
  4. 點選「確定」完成屬性建立。


注意:屬性一旦建立,無法刪除,只能停用(透過將 isDefunct 設為 True)。

步驟 3:將屬性關聯到類

新屬性需關聯到特定物件類(例如 user 或 group),才能在對應物件中使用。

  1. 在「Active Directory 架構」嵌入式管理單元中,找到「類 (Classes)」節點。
  2. 選擇目標類,例如 user,右鍵點選並選擇「屬性」。
  3. 在「屬性」標籤中,點選「新增」,從列表中選擇剛建立的屬性(例如 employeeBadge)。
  4. 選擇屬性類型(「選用屬性」或「必要屬性」),通常選擇「選用屬性」以保持靈活性。
  5. 點選「確定」完成關聯。

步驟 4:更新架構快取

  • 新屬性可能不會立即生效,需等待約 5 分鐘讓架構快取自動更新,或手動觸發更新:

步驟 5:驗證並使用自定義屬性

  1. 透過 ADSI Edit 查看
    • 開啟 ADSI Edit,連接到「預設命名內容 (Default Naming Context)」。
    • 找到目標物件(例如某個使用者),右鍵選擇「屬性」,檢查新屬性是否出現在列表中。
    • 編輯屬性值,例如設定 employeeBadge 為 12345在 ADUC 中顯示

注意事項

  1. OID 衝突
    • 確保 OID 唯一,否則可能導致架構損壞。建議使用腳本生成或申請正式 OID。
  2. 資料類型選擇
    • 選擇正確的語法(例如 Unicode String 用於文字,Integer 用於數字),錯誤的類型可能導致資料異常。
  3. 測試環境
    • 務必在測試環境中驗證所有步驟,確認無誤後再應用到生產環境。
  4. 權限控制
    • 自定義屬性預設對全域可見,可透過 AD 權限設定限制特定使用者或組的存取。
  5. 同步問題
    • 如果使用 Azure AD Connect 同步到 Azure AD,自定義屬性預設不會同步,需額外配置同步規則。

結論

透過以上步驟,可以在 Active Directory 中成功建立並使用自定義屬性欄位。雖然操作涉及修改架構,但只要遵循正確流程並在測試環境中驗證,就能安全實現。此功能能大幅提升 AD 的靈活性,滿足企業特定需求。


留言

這個網誌中的熱門文章

Office 2021 離線安裝封裝與KMS啟動步驟

Ollama使用心得與模型導入教學

ARC下NSMutableDictionary 無法使用retainCount