Risolvere un errore di OBJ_CLASS_VIOLATION in Adamsync

Questo articolo descrive come risolvere un errore di OBJ_CLASS_VIOLATION che si verifica quando si usa lo strumento Adamsync in Windows Server.

Si applica a: Windows Server 2012 R2
Numero KB originale: 923835

Riepilogo

Questo errore si verifica a causa delle differenze di definizione della classe tra il servizio directory Active Directory e l'istanza di ADAM. Per risolvere questo problema, seguire i passaggi descritti nelle sezioni seguenti:

  • Determinare l'attributo e la classe dell'oggetto
  • Passaggi per risolvere il problema quando gli attributi appartengono alla classe TOP
  • Passaggi per risolvere il problema quando gli attributi non appartengono alla classe TOP

Sintomi

Si tenta di usare lo strumento ADAM (Active Directory Application Mode) Synchronizer (Adamsync.exe) per sincronizzare gli oggetti Active Directory con un'istanza di ADAM in windows server. Tuttavia, nel file di log di Adamsync viene registrato un messaggio di errore simile al seguente:

Voce di elaborazione: pagina X, frame X, voce X, conteggio X, voce di origine di elaborazione USN X
<guid=f9023a23e3a06d408f07a0d51c301f38> Voce di elaborazione nell'ambito
f9023a23e3a06d408f07a0d51c301f38. Aggiunta di un oggetto di destinazione
CN= TestGroup,OU= Accounts,dc= domain, dc= com. Aggiunta di attributi: sourceobjectguid, objectClass, instanceType, displayName, info, adminDescription, displayNamePrintable, userAccountControl, codePage, countryCode, logonHours, primaryGroupID, comment, accountExpires, sAMAccountName, desktopProfile, legacyExchangeDN, userPrincipalName

Errore ldap. ldap_add_sW: violazione della classe oggetto. Informazioni estese: 0000207D: UpdErr: DSID-0315119D, problema 6002 (OBJ_CLASS_VIOLATION), dati -2054643804

Causa

Questo problema si verifica a causa delle differenze di definizione della classe tra Active Directory e ADAM. Questa differenza viene visualizzata quando si tenta di modificare un oggetto per includere un attributo non valido per la relativa classe. Ad esempio, l'attributo non è affatto definito nello schema ADAM o l'attributo è definito ma l'attributo non è presente nell'elenco di attributi obbligatori o facoltativi per la classe specifica. In genere, la seconda situazione è la causa più frequente di questo problema.

La definizione della classe per l'oggetto da sincronizzare contiene uno o più attributi in Active Directory non disponibili in ADAM. Nella sezione "Aggiunta di attributi" del messaggio di errore indicato nella sezione "Sintomi" vengono visualizzati gli attributi che si tenta di aggiungere. Questi attributi sono definiti nell'elenco di attributi facoltativi o obbligatori per la classe dell'oggetto che viene sincronizzato.

Ad esempio, nel messaggio di errore indicato nella sezione "Sintomi" l'oggetto riferimento è CN=TestGroup. Quando si visualizza l'oggetto CN=TestGroup in Active Directory e si controlla l'elenco di attributi per questa classe e tutte le classi padre, si nota che uno o più attributi in questo elenco non sono inclusi nell'elenco di attributi obbligatori o facoltativi abilitati per questa classe in ADAM.

Nota

Sono inclusi gli elenchi di attributi di tutte le classi padre.

Risoluzione

Per risolvere il problema, seguire questa procedura.

Determinare gli attributi e la classe dell'oggetto

  1. Verificare l'elenco di attributi che vengono aggiunti all'oggetto non riuscito. È possibile determinare l'oggetto che ha avuto esito negativo visualizzando il messaggio di errore nel log di sincronizzazione. L'oggetto non riuscito è sempre l'ultimo oggetto indicato alla fine del log di sincronizzazione esattamente prima del messaggio di errore. Ad esempio, l'oggetto CN=TestGroup non è riuscito nel messaggio di errore indicato nella sezione "Sintomi".
  2. Determinare se gli attributi DisplayNamePrintable, Flags o ExtensionName sono inclusi nel messaggio di errore. Se uno di questi attributi è incluso nel messaggio di errore, vedere la sezione "Passaggi per risolvere il problema quando gli attributi appartengono alla classe TOP". Se nel messaggio di errore non sono inclusi attributi, vedere la sezione "Passaggi per risolvere il problema quando gli attributi non appartengono alla classe TOP".

Passaggi per risolvere il problema quando gli attributi appartengono alla classe TOP

Si scoprirà che la classe TOP nello schema di Active Directory contiene l'attributo DisplayNamePrintable, Flags o ExtensionName. Questi attributi, tuttavia, non sono contenuti nella classe TOP in ADAM. Tuttavia, non è possibile modificare la classe TOP in ADAM. Usare pertanto uno dei metodi seguenti per risolvere il problema:

  • Escludere questi attributi usando la <sezione exclude> nel file di configurazione XML.
  • Usando lo schema MMC, aggiungere manualmente questi attributi all'elenco degli attributi facoltativi per la classe pertinente nello schema ADAM. Ad esempio, nel messaggio di errore indicato nella sezione "Sintomi" l'oggetto con esito negativo è della classe Group. È pertanto necessario aggiungere questi attributi all'elenco Attributi facoltativi per la classe Group in ADAM.

Passaggi per risolvere il problema quando gli attributi non appartengono alla classe TOP

  1. In ADSchemaAnalyzer, nel menuOpzionistrumenti\, fare clic su Aggiorna con riferimenti a elementi nuovi e presenti nella scheda generazione LDIF.

  2. Usare il menu File per caricare Active Directory come schema di destinazione e ADAM come schema di base. Attendere che lo strumento termini il confronto tra gli schemi.

  3. Scegliere Contrassegna tutti gli elementi come inclusi dal menu Schema.

  4. Scegliere Crea file LDIF dal menu File per creare un file LDF contenente le modifiche.

    Nota

    Se si importa questo file LDF direttamente in ADAM, gli attributi necessari probabilmente non verranno aggiunti o modificati correttamente.

  5. Non viene visualizzato alcun messaggio di errore. Vedere la sezione "Perché non è possibile importare il file LDF direttamente in ADAM" per una spiegazione del motivo per cui si verifica questo problema. In questo caso, andare al passaggio 5 senza importare il file LDF.

  6. Esaminare il file LDF creato nel passaggio 4. In particolare, visualizzare la classe che causa il problema. Ad esempio, visualizzare la classe Group. La sezione per questa classe conterrà l'elenco di attributi presenti nell'elenco degli attributi obbligatori o facoltativi per questa classe in Active Directory, ma mancanti in ADAM.

  7. Trovare l'attributo del problema nel file LDF. A tale scopo, esaminare la sezione "#attributes" nel file LDF. Gli attributi non importati rimangono in questa sezione. In genere, l'attributo problem è l'unico attributo presente nella sezione "#attributes". Se si trova l'attributo del problema, andare al passaggio 8. Se non si trova l'attributo del problema, andare al passaggio 7.

  8. Se l'attributo del problema non è ovvio dalla sezione "#attributes" nel file LDF, seguire questa procedura per trovare l'attributo del problema:

    1. Attualmente tutte le modifiche a una classe si trovano in una sezione del file LDF. Questa è la sezione "#Updating Present Elements". In questa sezione individuare la sezione che aggiorna la classe che presenta il problema. Ad esempio, se la classe Group è il problema, si troverà una sezione simile alla seguente:

      Elemento # Update: group
      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      add: mayContain
      # mayContain: adminCount
      mayContain: 1.2.840.113556.1.4.150
      # mayContain: controlAccessRights
      mayContain: 1.2.840.113556.1.4.200
      # mayContain: groupAttributes
      mayContain: 1.2.840.113556.1.4.152
      # mayContain: groupMembershipSAM
      mayContain: 1.2.840.113556.1.4.166
      -

      Nota Alcune altre voci che potrebbero trovarsi qui sono state escluse da questo esempio.

      Dn:
      changetype: modify
      add: schemaUpdateNow
      schemaUpdateNow: 1

    2. Modificare le voci che si trovano nel passaggio 4a suddividendole in un singolo attributo per ogni operazione. Ad esempio, modificare le voci nell'esempio nel passaggio 7a usando voci simili alle seguenti:

      Elemento # Update: group
      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      add: mayContain
      # mayContain: adminCount
      mayContain: 1.2.840.113556.1.4.150
      -

      Elemento # Update: group
      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      add: mayContain
      # mayContain: controlAccessRights
      mayContain: 1.2.840.113556.1.4.200
      -

      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      add: mayContain
      # mayContain: groupAttributes
      mayContain: 1.2.840.113556.1.4.152
      -

      dn: cn=Group,cn=Schema,cn=Configuration,dc=X
      changetype: modify
      add: mayContain
      # mayContain: groupMembershipSAM
      mayContain: 1.2.840.113556.1.4.166
      -

      Nota Alcune altre voci che potrebbero trovarsi qui sono state escluse da questo esempio.

      Dn:
      changetype: modify
      add: schemaUpdateNow
      schemaUpdateNow: 1

  9. Salvare il file LDF.

  10. Importare il file LDF nello schema ADAM usando il comando fornito all'inizio del file LDF.

  11. Visualizzare il report visualizzato dall'utilità Ldifde. Ldifde segnalerà ora gli errori che si verificano con gli attributi non importati. Le informazioni sull'errore saranno simili alle informazioni di esempio seguenti:

    ldifde -i -u -f c:\data\problem\KBtest_modified.ldf -s localhost:50010 -j .-c "cn=Configuration,dc=X" #configurationNamingContext  
    Connecting to "localhost:50010"
    

    Accesso come utente corrente tramite SSPI
    Importazione della directory dal file "c:\data\problem\KBtest_modified.ldf"
    Caricamento delle voci.
    Aggiungi errore alla riga 15: Già esistente
    L'errore sul lato server è: 0x2071 È stato effettuato un tentativo di aggiungere un oggetto all'oggetto
    con un nome già in uso.
    L'errore del server esteso è:
    00002071: UpdErr: DSID-0305030D, problema 6005 (ENTRY_EXISTS), dati 0

    Nota

    Individuare l'attributo problema nel file LDF visualizzando il numero di riga indicato nel report degli errori.

  12. Usare queste informazioni sull'errore per trovare l'attributo del problema e risolvere il problema. Seguire questa procedura per provare a risolvere il problema:

    1. Individuare l'attributo problema nel file LDF visualizzando il numero di riga indicato nel report degli errori. L'attributo non riuscito può avere un prefisso "DUP-" in DisplayName.
    2. Prendere nota dell'identificatore di oggetto (OID) dell'attributo e cercare questo identificatore di oggetto in ADAM.
    3. Trovare l'attributo in ADAM con lo stesso identificatore di oggetto.
    4. Confrontare l'attributo in ADAM e nel file LDF per individuare eventuali differenze. Ad esempio, gli attributi possono avere un displayname diverso ma lo stesso identificatore di oggetto.
    5. Decidere quale attributo mantenere e quindi correggere l'altro. Ad esempio, è possibile rimuovere la voce dal file LDF oppure correggere la voce dell'attributo ADAM. In alternativa, è possibile escludere l'attributo problema dalla sincronizzazione usando la <sezione exclude> nel file di configurazione XML.
  13. Dopo aver corretto l'attributo del problema in Active Directory o nello schema ADAM o dopo che l'attributo è stato rimosso dal file LDF, importare nuovamente il file LDF modificato. L'operazione di importazione dovrebbe ora avere esito positivo. Se il problema non viene risolto, potrebbe essere presente un altro attributo che causa il problema. Ripetere i passaggi da 10 a 12 fino a quando non vengono importati tutti gli attributi.

Registrazione diagnostica

Quando si trova l'attributo del problema, potrebbe non essere ovvio che cosa non sia corretto. Ad esempio, è possibile che non si trovi un identificatore di oggetto duplicato o un

diversa voce DisplayName. Quando un attributo problema non viene importato, è possibile ottenere altre informazioni sull'errore attivando la registrazione di debug per l'interfaccia LDAP. A tal fine, attenersi alla seguente procedura:

  1. Per ottenere altre informazioni sull'errore ldifde, attivare la registrazione LDAP in ADAM. A tale scopo, modificare il valore per la voce del Registro di sistema Eventi interfaccia LDAP categoria 16 su 5. Questa voce del Registro di sistema si trova nella sottochiave del Registro di sistema seguente: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\ADAM_instanceName\Diagnostics

  2. Importare di nuovo il file LDF.

  3. Esaminare il registro eventi per individuare gli errori.

  4. Dopo aver completato la risoluzione dei problemi, reimpostare il valore per la voce del Registro di sistema eventi interfaccia LDAP categoria 16 su 0. In caso contrario, il registro eventi verrà inondato.

Contattare supporto tecnico Microsoft

Se il problema non viene risolto dopo aver completato la procedura descritta in questo articolo, contattare supporto tecnico Microsoft.

Stato

Si tratta di un comportamento legato alla progettazione del prodotto.

Ulteriori informazioni

Per sincronizzare i dati da Active Directory ad ADAM usando lo strumento Adamsync, seguire questa procedura:

  1. Fare clic su Start, scegliere Tutti i programmi, ADAM e quindi fare clic su Prompt dei comandi di ADAM Tools.
  2. Al prompt dei comandi digitare il comando seguente e quindi premere INVIO: adamsync /fs Server_Name: port_numberconfigurationName /log log_file_name.log

Perché non è possibile importare il file LDF direttamente in ADAM

Se si importa il file LDF creato nel passaggio 1 nella sezione "Passaggi per risolvere il problema quando gli attributi non appartengono alla classe TOP" in ADAM, questi attributi non vengono ancora aggiunti all'elenco di attributi in ADAM. È possibile verificare questo comportamento usando lo schema ADAM MMC o ADSIEDIT per esaminare lo schema. Questo comportamento si verifica perché l'operazione di importazione Ldifde non riesce in modo automatico. Attualmente, Ldifde non segnala errori. Ha esito negativo invisibile all'utente a causa del modo in cui ADSchemaAnalyzer costruisce il file LDF. ADSchemaAnalyzer usa i comandi ntdsschemaadd e ntdsSchemamodify . Questi comandi attivano il controllo LDAP permissivo. Ciò significa che qualsiasi errore è invisibile all'utente.

Inoltre, per ogni classe, tutti gli attributi da aggiungere all'elenco Attributi facoltativi vengono aggiunti in un'operazione di aggiunta/modifica. Pertanto, se si verifica un problema durante l'aggiunta di uno degli attributi, l'intera operazione ha esito negativo e non vengono aggiunti attributi nell'elenco. Pertanto, è necessario eseguire ulteriori passaggi per trovare l'attributo del problema.

In genere, il motivo probabile dell'errore è un identificatore di oggetto duplicato di un attributo o un'altra differenza nelle definizioni degli attributi in Active Directory e ADAM. Ciò significa che gli ID duplicati potrebbero non essere presenti e un attributo può essere considerato come un nuovo attributo se LDapDisplayName non esiste in ADAM.