Déplacer les données vers LDAP avec python Change / Delete (Writer et Reader)

introduction

Dernière fois et Dernière fois ont ajouté et acquis LDAP. Cette fois, nous résumerons d'autres fonctions telles que la suppression, le déplacement des données et le changement de nom.

changer de nom

Renommer en utilisant uniquement la connexion

Si vous ne souhaitez modifier que cn, vous pouvez le modifier en utilisant `` modify_dn () '' de Connection. Seul cn peut être modifié en spécifiant le dn avant le changement et le cn après le changement. Étant donné que l'exemple suivant a été résumé dans l'article précédent, la connexion de connexion est interrompue.

main.py



#Afficher avant la mise à jour
obj_cn_name = ObjectDef('inetOrgPerson', conn)
data_reader = Reader(conn, obj_cn_name, 'ou=sample-unit,dc=sample-component,dc=sample-ldap')
print(data_reader.search())
print('=======================')

# modify_Spécifiez le dn à déplacer et le cn modifié dans dn
conn.modify_dn('cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap', 'cn=sample-rename')

#Affichage après mise à jour
data_reader2 = Reader(conn, obj_cn_name, 'ou=sample-unit,dc=sample-component,dc=sample-ldap')
print(data_reader2.search())

résultat


[DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T19:24:03.368406
    cn: sample-name
    objectClass: inetOrgPerson
    sn: sample
]
=======================
[DN: cn=sample-rename,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T19:24:03.448482
    cn: sample-rename
    objectClass: inetOrgPerson
    sn: sample
]

En regardant les valeurs LDAP avant et après la modification, vous pouvez voir que cn a été changé de nom-échantillon en nom-échantillon. Vous pouvez également voir que les valeurs à l'intérieur ont été déplacées telles quelles.

Renommer à l'aide de Writer

Renommer à l'aide de Writer peut être fait en utilisant entry_rename () `` `de Writer. Contrairement à Connection, spécifiez le chemin avant le changement lors de la lecture de Writer, et donnez le nom après le changement à entry_rename () `` `avec le chemin complet.

main.py



#Afficher avant la mise à jour
obj_cn_name = ObjectDef('inetOrgPerson', conn)
data_reader = Reader(conn, obj_cn_name, 'ou=sample-unit,dc=sample-component,dc=sample-ldap')
print(data_reader.search())
print('=======================')

#Charger la cible de déplacement dans Writer
data_reader = Reader(conn, obj_cn_name, 'cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap')
data_reader.search()
data_writer = Writer.from_cursor(data_reader)

#Spécifiez le chemin complet après la modification
data_writer[0].entry_rename('cn=sample-rename,ou=sample-unit,dc=sample-component,dc=sample-ldap')

#Reflet des résultats du changement
data_writer.commit()

#Affichage après mise à jour
data_reader2 = Reader(conn, obj_cn_name, 'ou=sample-unit,dc=sample-component,dc=sample-ldap')
print(data_reader2.search())

résultat


[DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T19:40:09.898199
    cn: sample-name
    objectClass: inetOrgPerson
    sn: sample
]
=======================
[DN: cn=sample-rename,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T19:40:10.017186
    cn: sample-rename
    objectClass: inetOrgPerson
    sn: sample
]

En examinant les valeurs LDAP avant et après la modification, vous pouvez voir que cn a été changé de nom-échantillon à échantillon-renommer et que les valeurs à l'intérieur ont été déplacées telles quelles, comme le changement de connexion.

Déplacer l'entité

Déplacer une entité en utilisant uniquement des connexions

Si vous souhaitez déplacer l'entité vers un autre chemin, vous pouvez le modifier en utilisant `` modify_dn () '' de Connection comme ci-dessus. Vous pouvez déplacer une entité en spécifiant le dn à déplacer, le cn après la modification et le dn après la modification. Étant donné que l'exemple suivant a été résumé dans l'article précédent, la connexion de connexion est interrompue.

main.py



from ldap3 import Server, Connection, ObjectDef, Reader, Writer

server = Server('localhost')

conn = Connection(server, 'cn=admin,dc=sample-ldap',  password='LdapPass')
conn.bind()

#Afficher avant la mise à jour
obj_cn_name = ObjectDef('inetOrgPerson', conn)
data_reader = Reader(conn, obj_cn_name, 'dc=sample-component,dc=sample-ldap')
print(data_reader.search())
print('=======================')

#En mouvement
conn.modify_dn('cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap', 'cn=sample-name', new_superior='ou=sample-unit-move,dc=sample-component,dc=sample-ldap')

#Affichage après mise à jour
data_reader2 = Reader(conn, obj_cn_name, 'dc=sample-component,dc=sample-ldap')
print(data_reader2.search())

résultat


[DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:01:02.190680
    cn: sample-name
    objectClass: inetOrgPerson
    sn: test
    st: sample
, DN: cn=sample-name2,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:01:02.194679
    cn: sample-name2
    objectClass: inetOrgPerson
    sn: test
    st: sample
]
=======================
[DN: cn=sample-name,ou=sample-unit-move,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:01:02.233686
    cn: sample-name
    objectClass: inetOrgPerson
    sn: test
    st: sample
, DN: cn=sample-name2,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:01:02.236675
    cn: sample-name2
    objectClass: inetOrgPerson
    sn: test
    st: sample
]

Vous pouvez voir que ou avec cn is sample-name est passé de sample-unit à sample-unit-move. De plus, les attributs à l'intérieur ont été déplacés ensemble comme auparavant.

Déplacement d'entités à l'aide de Writer

Le déplacement d'entités à l'aide de Writer peut être modifié en utilisant entry_move () `` `de Writer. De la même manière que entry_rename () `, spécifiez le chemin avant le changement lors de la lecture de Writer, et donnez le chemin après le changement à` `ʻentry_move ()` comme chemin complet. Veuillez noter ici que le nom de l'entité déplacée ne doit pas figurer dans le chemin et ne peut pas être déplacé vers un chemin qui n'existe pas.

main.py



#Afficher avant la mise à jour
obj_cn_name = ObjectDef('inetOrgPerson', conn)
data_reader = Reader(conn, obj_cn_name, 'dc=sample-component,dc=sample-ldap')
print(data_reader.search())
print('=======================')

#Charger la cible de déplacement dans Writer
data_reader = Reader(conn, obj_cn_name, 'cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap')
data_reader.search()
data_writer = Writer.from_cursor(data_reader)

#Déplacer la valeur
data_writer[0].entry_move('cn=sample-name,ou=sample-unit-move,dc=sample-component,dc=sample-ldap')

#Reflet des résultats du changement
data_writer.commit()

#Affichage après mise à jour
data_reader2 = Reader(conn, obj_cn_name, 'dc=sample-component,dc=sample-ldap')
print(data_reader2.search())

résultat


[DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:08:33.946805
    cn: sample-name
    objectClass: inetOrgPerson
    sn: test
    st: sample
, DN: cn=sample-name2,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:08:33.952774
    cn: sample-name2
    objectClass: inetOrgPerson
    sn: test
    st: sample
]
=======================
[DN: cn=sample-name,ou=sample-unit-move,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:08:34.045188
    cn: sample-name
    objectClass: inetOrgPerson
    sn: test
    st: sample
, DN: cn=sample-name2,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:08:34.051225
    cn: sample-name2
    objectClass: inetOrgPerson
    sn: test
    st: sample
]

Vous pouvez voir que ou avec cn is sample-name est passé de sample-unit à sample-unit-move. De plus, les attributs à l'intérieur ont été déplacés ensemble comme auparavant.

Effacer

Supprimer en utilisant uniquement la connexion

Si vous souhaitez supprimer une entité, utilisez `` delete () '' de Connection. Vous pouvez le supprimer en spécifiant dn pour cette fonction. Étant donné que l'exemple suivant a été résumé dans l'article précédent, la connexion de connexion est interrompue.

main.py



#Afficher avant suppression
conn.search('ou=sample-unit,dc=sample-component,dc=sample-ldap', '(objectclass=inetOrgPerson)')
print(conn.entries)
print('=======================')

#Supprimer en spécifiant le chemin
ou_result = conn.delete('cn=sample-name2,ou=sample-unit,dc=sample-component,dc=sample-ldap')
print(ou_result)

#Affichage après suppression
conn.search('ou=sample-unit,dc=sample-component,dc=sample-ldap', '(objectclass=inetOrgPerson)')
print(conn.entries)

résultat


[DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:19:59.281937
, DN: cn=sample-name2,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:19:59.281937
]
=======================
True
[DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:19:59.322233
]

Vous pouvez voir que le cn de sample2 disparaît après la suppression.

Vous pouvez également tout supprimer en combinant avec l'acquisition.

main.py



conn.search('dc=sample-component,dc=sample-ldap', '(objectclass=inetOrgPerson)')
for entry in conn.entries:
    del_result = conn.delete(entry.entry_dn)
    print(del_result)

Supprimer à l'aide de Writer

Si vous voulez supprimer une entité, utilisez entry_delete () `` `de Writer. Appelez simplement l'entité entry_delete () `` `après avoir créé le Writer, comme vous le feriez avec une opération Writer précédente. L'exemple suivant est résumé dans l'article précédent, de sorte que la connexion de connexion est interrompue.

main.py



#Afficher avant la mise à jour
obj_cn_name = ObjectDef('inetOrgPerson', conn)
data_reader = Reader(conn, obj_cn_name, 'ou=sample-unit,dc=sample-component,dc=sample-ldap')
print(data_reader.search())
print('=======================')

#Charger la cible de déplacement dans Writer
data_reader = Reader(conn, obj_cn_name, 'cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap')
data_reader.search()
data_writer = Writer.from_cursor(data_reader)

#Supprimer la valeur
data_writer[0].entry_delete()
data_writer.commit()

#Affichage après mise à jour
data_reader2 = Reader(conn, obj_cn_name, 'ou=sample-unit,dc=sample-component,dc=sample-ldap')
print(data_reader2.search())

résultat


[DN: cn=sample-name,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:30:26.155112
    cn: sample-name
    objectClass: inetOrgPerson
    sn: test
    st: sample
, DN: cn=sample-name2,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:30:26.160111
    cn: sample-name2
    objectClass: inetOrgPerson
    sn: test
    st: sample
]
=======================
[DN: cn=sample-name2,ou=sample-unit,dc=sample-component,dc=sample-ldap - STATUS: Read - READ TIME: 2020-03-29T20:30:26.264725
    cn: sample-name2
    objectClass: inetOrgPerson
    sn: test
    st: sample
]

En regardant le résultat après la suppression, vous pouvez voir que le cn de sample-name a disparu.

Vous pouvez également tout supprimer en modifiant les conditions de recherche

main.py



#Demandez à Writer de lire le chemin supérieur
data_reader = Reader(conn, obj_cn_name, 'dc=sample-component,dc=sample-ldap')
data_reader.search()
data_writer = Writer.from_cursor(data_reader)

#Supprimer toutes les valeurs
for data_entity in data_writer:
    data_entity.entry_delete()

en conclusion

Nous avons pu résumer les ajouts, les recherches, les suppressions et les modifications nécessaires pour faire fonctionner LDAP. De plus, certaines opérations de répertoire sont uniques, telles que les déplacements et les renommages que RDB n'a pas. Même s'il a la fonction de sauvegarder les données de la même manière, j'ai pensé qu'il serait plus pratique que RDB et LDAP soient utilisés correctement car il y a des différences claires.

Recommended Posts

Déplacer les données vers LDAP avec python Change / Delete (Writer et Reader)
Obtenez des données supplémentaires vers LDAP avec python (Writer et Reader)
[Construction de l'environnement LDAP: 7] Ajouter / rechercher / modifier / supprimer des utilisateurs avec Python
Obtenez des données supplémentaires vers LDAP avec python
Construction de pipeline de données avec Python et Luigi
Changer l'environnement Python 64 bits en environnement 32 bits avec Anaconda
Convertir des données Excel en JSON avec python
Fractal pour faire et jouer avec Python
Convertissez des données FX 1 minute en données 5 minutes avec Python
Compressez les données python et écrivez sur sqlite
[Python] Comment créer une liste de types de dictionnaire, ajouter / modifier / supprimer des éléments et extraire avec une instruction for
Lisez les données du lecteur NFC connecté à Raspberry Pi 3 avec Python et envoyez-les à openFrameworks avec OSC
Grattage de la nourriture avec python et sortie en CSV
MessagePack-Try pour lier Java et Python avec RPC
J'ai essayé d'obtenir des données CloudWatch avec Python
Écrire des données CSV sur AWS-S3 avec AWS-Lambda + Python
Liste de code Python à déplacer et à mémoriser
Analyse de données avec python 2
Comment récupérer des données d'image de Flickr avec Python
Je veux gérer l'optimisation avec python et cplex
Changer les paramètres IP en ACL de conoha avec python
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
Note de lecture: Introduction à l'analyse de données avec Python
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
Étudiez l'échange de données Java et Python avec Apache Arrow
Opérations de création de dossier / déplacement de fichier / compression / suppression avec python
Analyse de données avec Python
Renvoyez les données d'image avec Flask of Python et dessinez-les dans l'élément canvas de HTML
[Python / Ruby] Comprendre le code Comment obtenir des données en ligne et les écrire au format CSV
API Nifty Cloud facile à utiliser avec botocore et python
[Introduction à cx_Oracle] (Partie 6) Mappage des types de données DB et Python
Je veux pouvoir analyser des données avec Python (partie 3)
écran et écran partagé avec connexion python et ssh au serveur distant
J'ai essayé de créer diverses "données factices" avec Python faker
Je veux pouvoir analyser des données avec Python (partie 1)
[Python] Comment jouer avec les variables de classe avec décorateur et métaclasse
20200329_Introduction à l'analyse de données avec Python 2nd Edition Personal Summary
Je veux pouvoir analyser des données avec Python (partie 4)
[Part.2] Exploration avec Python! Cliquez sur la page Web pour vous déplacer!
Débarrassez-vous des données sales avec Python et les expressions régulières
Résolvez le livre en spirale (algorithme et structure de données) avec python!
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
Créer un environnement Python et transférer des données vers le serveur
[Jouons avec Python] Traitement d'image en monochrome et points
[Introduction to Data Scientists] Bases de Python ♬ Fonctions et classes
[Introduction à Python] Combinaison des données Nikkei Average et NY Dow CSV
Convertir une vidéo en noir et blanc avec ffmpeg + python + opencv
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
Importez et supprimez des fichiers dans Google Cloud Storages avec django-storage
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
Connectez-vous à Wikipedia avec Python
Publiez sur Slack avec Python 3