今日學習目標是學會如何從 MySQL 查詢加密病歷資料,並在應用端使用密鑰解密,讓醫師可以安全地讀取病歷資訊。
一、理論重點
二、案例分享
2021年,「健安醫院」醫師查詢病歷流程也進行改造:系統要求醫師登入後,透過個人授權金鑰解密欄位資料。
一次模擬測試中,醫師 A 嘗試查詢病人血壓與診斷資料,系統先回傳加密欄位,醫師端應用程式才利用密鑰解密成明文顯示。若其他角色(護理師 B 或外部人員)無權限,即使登入資料庫也只能看到加密資料,無法解密。這套流程不僅符合 HIPAA 與個資保護規範,也大幅降低病歷外洩風險。
三、簡單程式示範
# day16_decrypt_records.py
import mysql.connector
from cryptography.fernet import Fernet
# ====== 1. 使用同一個 key ======
key = b"r7HYLmg9nM7SGtk20lr5Ywk8jlVREpUP9vWVHszw6Nc=" # 從 Day15 的輸出貼上
cipher = Fernet(key)
# ====== 2. 連線到 MySQL ======
conn = mysql.connector.connect(
host="localhost",
user="root",
password="我的密碼",
database="health"
)
cur = conn.cursor()
# ====== 3. 查詢並解密病歷資料 ======
cur.execute("SELECT id, patient_name, diagnosis, vitals FROM patient_records")
print("查詢明文病歷及解密結果:")
for row in cur.fetchall():
dec_name = cipher.decrypt(row[1]).decode()
dec_diag = cipher.decrypt(row[2]).decode()
dec_vitals = cipher.decrypt(row[3]).decode()
print(f"ID:{row[0]} 病患 {dec_name} - 診斷: {dec_diag} - 生命徵象: {dec_vitals}")
conn.close()
print("\n解密查詢完成!")
解密成功後結果如下圖