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

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

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

добавление

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

1 ответ1

0

Да, можно установить время «истечения» в зависимости от времени «создания». С помощью программы процесс может быть автоматизирован. Измените глобальные константы (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()

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .