ubuntu
カテゴリ
Access⇒SQLiteへ移行
2026/05/06 10時vaultwarden
access
Bitwarden で、IDとパスワードを管理出来たが、Bitwarden ではヒットしなかったり、その他重要な事項をデーターベースに記録し、モバイル端末に格納してきた。

Tap Forms (iOS・Mac)
Bitwarden (windows・iOS・Android)
Memento Database (windows・iOS・Android)

データを各社のサーバーに置くことで利便性は高いが、セキュリティには疑問があったので、Memento Database は、端末だけにして、退職を期に自宅のWindowでは自前でAccessにて保存していた、しかし修正や新規登録では二つのでデータの同期をとるのが面倒だったが、Ubuntu Server とTailscale 環境を構築したので、Bitwarden に引き続き、APIサーバーを立ててSQLiteへインポートし自分のパスワード管理を構築する。

■Accessのデータを移行

フォルダーの作成
sudo mkdir -p /mnt/data/docker/passmanager/{api,db,photos}
sudo chown -R $USER:$USER /mnt/data/docker/passmanager

・Access側で、カンマ付きダブルクォーテーションで生成し、「Data.csv」ファイルをエクスポートして /mnt/data/docker/passmanager/db に格納。

・インポートスクリプト作成し、python3 にて、メインデータ「passwords.db」へインポートして、/mnt/data/docker/passmanager/db に格納。

/mnt/data/docker/passmanager/db/import.py

----------割愛----------

・写真を /mnt/data/docker/passmanager/photos に格納。

■SQLCipher 暗号化

SQLiteデータベースファイル全体をAES-256で暗号化するSQLCipher のインストール
sudo apt-get install -y sqlcipher

強力な暗号化キーを生成
openssl rand -hex 32
作成した32桁の暗号キーをメモし、python3 実行ファイル

設定ファイルencrypt_db.py の作成
nano /mnt/data/docker/passmanager/db/encrypt_db.py
#!/usr/bin/env python3
import subprocess
import shutil
import os

DB_KEY = "32桁の暗号キー"

SRC = "/mnt/data/docker/passmanager/db/passwords.db"
DST = "/mnt/data/docker/passmanager/db/passwords_enc.db"
BAK = "/mnt/data/docker/passmanager/db/passwords_backup.db"

print(f"バックアップ作成: {BAK}")
shutil.copy2(SRC, BAK)

cmd = f"""sqlcipher {SRC} <<SQLEOF
ATTACH DATABASE '{DST}' AS encrypted KEY '{DB_KEY}';
SELECT sqlcipher_export('encrypted');
DETACH DATABASE encrypted;
SQLEOF"""

print("暗号化変換中...")
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)

if result.returncode != 0:
    print(f"エラー: {result.stderr}")
    exit(1)

if os.path.exists(DST) and os.path.getsize(DST) > 0:
    print(f"✅ 成功: {DST} ({os.path.getsize(DST)} bytes)")
    print(f"✅ バックアップ: {BAK}")
    print("\n次のステップ:")
    print(f"  mv {DST} {SRC}")
else:
    print("❌ 変換失敗")

メインデータ「passwords.db」を元に暗号化された「passwords_enc.db」を作成し置換える
python3 /mnt/data/docker/passmanager/db/encrypt_db.py
mv /mnt/data/docker/passmanager/db/passwords_enc.db \
   /mnt/data/docker/passmanager/db/passwords.db

■SQLite ビルド・コンテナ起動

ビルド・コンテナ起動
cd /mnt/data/docker/passmanager/
docker compose build
docker compose up -d

外部からアクセスできるように、Apacheのリバースプロキシ設定追記
sudo nano /etc/apache2/sites-available/vafee2.conf
# --- passmanager API ---
ProxyPass        /passmanager/ http://127.0.0.1:8100/
ProxyPassReverse /passmanager/ http://127.0.0.1:8100/

apache 再起動
sudo systemctl reload apache2

これで、自作のAccessフォームを、自鯖のデータに外部からでもアタッッチ出来る環境になった、しかしそれでは中途半端なので次に続く。
記事一覧