Ist es möglich, die "Verfallszeit" basierend auf der "Erstellungszeit" festzulegen?

462
Noctis Skytower

Nachdem ich mehrere Jahre lang Keepass verwendet hatte, kam mir eine Idee, die sich gut implementieren lässt. Es gibt über 300 Datensätze in meiner Datenbank, und es wäre schön zu wissen, welche dieser Datensätze noch gut sind. Wenn Sie das Kennzeichen für das Ablaufdatum für die Datensätze festlegen, würde ich daran erinnern, zu prüfen, ob die Datensätze gültig sind, und möglicherweise dazu ermutigen, mein Passwort zu ändern. Gibt es eine Möglichkeit, die gesamte Datenbank durchzusehen und für jeden Datensatz Folgendes zu tun?

  1. Prüfen Sie, ob das Kennzeichen für Ablaufen gesetzt ist.
  2. Ist dies nicht der Fall, fügen Sie der Erstellungs- (oder Änderungs-) Zeit X Jahre hinzu.
  3. Setzen Sie das Flag "Expires".
  4. Stellen Sie die Ablaufzeit auf den in Schritt 2 berechneten Wert ein.
  5. Fahren Sie mit dem nächsten Datensatz in der Datenbank fort.

Eine Antwort von Paul erhielt die Antwort : "Nicht mit KeePass, aber Sie können KPScript und einige PowerShell verwenden." Er fügte einen Link zu # 1318 Verfallsdatum von Liste ändern hinzu, aber meine Unerfahrenheit mit den von ihm empfohlenen Tools hat mir nur mehr Fragen gestellt. Könnte jemand weitere Hilfe leisten? (1)

Nachtrag

Nach einigen weiteren Untersuchungen wurde die Möglichkeit entdeckt, die Datenbank in ein XML-Format zu exportieren. Wäre es einfacher, die XML-Datei zu parsen, die Daten in diesem Formular zu ändern und dann durch Importieren der Ergebnisse eine neue Datenbank zu erstellen? Wenn die Verwendung der bereits gemachten Vorschläge zu schwierig wäre, könnte die XML-Verarbeitung möglicherweise ein einfacherer Weg sein.

0

1 Antwort auf die Frage

0
Noctis Skytower

Ja, es ist möglich, die "Verfallszeit" basierend auf der "Erstellungszeit" festzulegen. Mit einem Programm kann der Prozess automatisiert werden. Ändern Sie die globalen Konstanten ( KPSCRIPT, DATABASE und PASSWORD ) vor der Ausführung in Werte, die Ihrem System entsprechen. In diesem speziellen Beispiel wird die Ablaufzeit auf fünf Jahre nach dem letzten Änderungsdatum festgelegt. Das folgende Programm wurde von Pauls Antwort übernommen .

#! /usr/bin/env python3 import datetime import subprocess import uuid   KPSCRIPT = r'C:\Program Files (x86)\KeePass Password Safe 2\KPScript.exe' DATABASE = r'C:\Users\Stephen Paul Chappel\Documents\Database.kdbx' PASSWORD = r'password'   def main(): """Get KeePass entries, check each one, and change if required.""" for line in ps(KPSCRIPT, '-c:ListEntries', DATABASE, '-pw:' + PASSWORD): key, value, *pair = line.split(': ', 1) + [None] if pair: if key == 'UUID': reference = uuid.UUID(value) elif key == 'TLM': tlm = datetime.datetime.strptime(value, '%Y-%m-%dT%H:%M:%S') elif key == 'EXP': if not {'False': False, 'True': True}[value]: # Add 5 years to the last modification # time for the expiry date and format. te = tlm.replace(tlm.year + 5) te = te.strftime('%Y-%m-%dT%H:%M:%S') ps( KPSCRIPT, '-c:EditEntry', DATABASE, '-pw:' + PASSWORD, '-refx-UUID:' + reference.hex, '-setx-Expires:True', '-setx-ExpiryTime:' + te ) del reference, tlm   def ps(*args): """Provide an interface for writing commands like those in PowerShell.""" return subprocess.run( args, timeout=1, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True ).stdout.splitlines()   if __name__ == '__main__': main()