iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
Security

醫療數據的資安挑戰與創新解決方案系列 第 4

存取控制與身分驗證機制

  • 分享至 

  • xImage
  •  

今天來理解存取控制 (Access Control) 的概念,並透過一個簡單案例,示範醫師、病人、管理員如何用不同角色來存取資料,確保醫療數據的隱私與安全。

為什麼需要存取控制?

加密可以確保資料被竊時無法解讀,但 誰能合法讀取資料 仍是一大挑戰。舉例:

  • 病人只能查看自己的病歷。

  • 醫師可以查看自己患者的病歷,但不能看所有病人的紀錄。

  • 管理員可以管理帳號,但不一定能讀取病歷。

這些狀況下就需要存取控制身分驗證

一、存取控制常見模式

  • DAC(自主存取控制):資料擁有者決定誰可以存取。

  • MAC(強制存取控制):由系統或法規決定,例如軍事或醫療資料分級。

  • RBAC(角色存取控制):依角色分配權限,醫療系統最常見。因為醫師、病人、管理員的角色清楚。

二、案例分享

2020 年某美國醫院因為缺乏嚴格的角色存取控管,導致某位員工未經授權存取數百位病人的病歷。事件曝光後,不僅醫院聲譽受損,還被依 HIPAA 法規重罰數十萬美元。
這顯示出光有帳號密碼不夠,必須搭配角色分級管理。

三、簡單程式示範

  • DAC(自主存取控制,Discretionary Access Control)
# DAC:資料由擁有者決定誰可以存取
medical_records = {
    "alice": {"owner": "alice", "data": "Alice's medical record"},
    "bob": {"owner": "bob", "data": "Bob's medical record"}
}

# 每個人可以設定允許的使用者
permissions = {
    "alice": ["doctor"],  # Alice 允許醫師看她的病歷
    "bob": []             # Bob 不允許其他人看
}

def dac_access(user, target):
    if user == target:  # 本人
        return True
    if user in permissions.get(target, []):
        return True
    return False

# 測試
print("DAC 測試:")
print(" 醫師存取 Alice?", dac_access("doctor", "alice"))
print(" 醫師存取 Bob?", dac_access("doctor", "bob"))
print(" Alice 存取自己?", dac_access("alice", "alice"))

以上程式碼執行結果如下
https://ithelp.ithome.com.tw/upload/images/20250912/201693317nA0IIgJYK.png

  • MAC(強制存取控制,Mandatory Access Control)
# MAC:根據安全等級控制
# 等級:1=低, 2=中, 3=高
users = {
    "patient": 1,
    "nurse": 2,
    "doctor": 3,
    "admin": 3
}

medical_records = {
    "record1": {"level": 1, "data": "一般病歷"},
    "record2": {"level": 2, "data": "手術紀錄"},
    "record3": {"level": 3, "data": "精神疾病病歷"}
}

def mac_access(user, record):
    return users[user] >= medical_records[record]["level"]

# 測試
print("\nMAC 測試:")
print(" 醫師看手術紀錄?", mac_access("doctor", "record2"))
print(" 病人看精神疾病病歷?", mac_access("patient", "record3"))
print(" 護士看一般病歷?", mac_access("nurse", "record1"))

MAC依照「資料等級」與「使用者等級」決定存取,使用者不能自行改變規則。執行結果如下
https://ithelp.ithome.com.tw/upload/images/20250912/20169331jq8NTGhxFD.png

  • RBAC(角色存取控制,Role-Based Access Control,醫療系統最為常見
# RBAC:依角色分配權限
permissions = {
    "patient": ["view_own_record"],
    "doctor": ["view_patient_record", "update_patient_record"],
    "admin": ["manage_users"]
}

users = {
    "alice": {"role": "patient"},
    "bob": {"role": "doctor"},
    "carol": {"role": "admin"}
}

def rbac_access(user, action):
    role = users[user]["role"]
    return action in permissions.get(role, [])

# 測試
print("\nRBAC 測試:")
print("Alice 看自己病歷?", rbac_access("alice", "view_own_record"))
print("Alice 更新病人病歷?", rbac_access("alice", "update_patient_record"))
print("Bob 看病人病歷?", rbac_access("bob", "view_patient_record"))
print("Carol 管理使用者?", rbac_access("carol", "manage_users"))

執行結果如下
https://ithelp.ithome.com.tw/upload/images/20250912/20169331Yhp5Ss7tch.png

以上三種存取控制的程式碼範例輸出結果會顯示哪些操作被允許、哪些被拒絕。存取控制比加密更進一步,確保資料不只是安全儲存,還要「正確的人才能看」,透過這些程式碼可以模擬病人、醫師、管理員的權限差異。


上一篇
加密基本原理與 Python 實作
下一篇
AES 加密 / 解密 JSON 醫療資料(Python 實作)
系列文
醫療數據的資安挑戰與創新解決方案6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言