Можно ли установить время «истечения» на основе времени «создания»?

366
Noctis Skytower

После использования Keepass в течение нескольких лет мне пришла идея, которую было бы неплохо реализовать. В моей базе более 300 записей, и было бы неплохо узнать, какие из этих записей все еще хороши. Установка флага истечения срока действия в записях помогла бы мне проверить, являются ли записи действительными, и потенциально побуждает меня сменить пароль. Есть ли способ просмотреть всю базу данных и сделать следующее для каждой записи?

  1. Проверьте, установлен ли флаг истечения.
  2. Если он не установлен, добавьте X количество лет ко времени создания (или изменения).
  3. Установите флаг истечения срока действия.
  4. Установите время истечения до значения, рассчитанного на шаге 2.
  5. Перейдите к следующей записи в базе данных.

Пол получил ответ : «Не с KeePass, но вы можете использовать KPScript и некоторые PowerShell». Он включил ссылку на # 1318 Изменить дату истечения срока из списка, но моя неопытность с инструментами, которые он рекомендовал, оставила мне только больше вопросов. Может ли кто-нибудь оказать дальнейшую помощь? (1)

добавление

После некоторых дальнейших исследований была обнаружена возможность экспорта базы данных в формате XML. Будет ли проще проанализировать файл XML, изменить данные в этой форме, а затем создать новую базу данных, импортировав результаты? Если использование уже сделанных предложений будет слишком сложным, обработка XML может оказаться более простым путем.

0

1 ответ на вопрос

0
Noctis Skytower

Да, можно установить время «истечения» в зависимости от времени «создания». С помощью программы процесс может быть автоматизирован. Измените глобальные константы ( KPSCRIPT, DATABASE и PASSWORD ) на значения, соответствующие вашей системе перед запуском. В этом конкретном примере срок действия устанавливается через пять лет после даты последнего изменения. Программа ниже была адаптирована из ответа Пола .

#! /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()