
简介本资源为ISO 27799-2016《健康信息学——使用ISO/IEC 27002进行健康信息安全管理》的中文翻译版并针对原版格式做了修订面向医疗健康机构的信息安全负责人、合规与隐私管理人员以及研究个人健康信息保护的从业者。标准在ISO/IEC 27002:2013基础上扩展围绕健康信息的机密性、完整性与可用性给出医疗场景下的特定控制措施与实施指南并梳理了信息治理、公司治理与临床治理之间的关系。资源包共1个PDF文件约2.29MB内容涵盖前言、引言、目标、术语与定义、标准结构及各章节控制措施目录层级清晰便于按主题查阅。已有1100余人学习下载。读者可借此系统理解健康信息安全管理的框架与落地要点对照标准条款评估现有流程、制定安全策略并完善审核与灾难恢复机制适合作为医疗合规与隐私安全工作的案头参考。1. ISO 27799-2016标准翻译一份医疗信息安全落地文档的格式修订实战如果你正在做医疗行业的信息安全合规大概率绕不开 ISO 27799-2016 这份标准。它全称是《健康信息学 — 健康信息安全管理中的信息安全控制》本质上是把 ISO 27002 那套通用控制措施翻译成医疗健康场景能听懂、能落地的语言。但真正让人头疼的不是读不懂英文而是拿到一份翻译稿之后格式乱、术语不统一、条款编号对不上根本没法直接拿去做差距分析或审计对标。我最近刚处理完一份这样的翻译修订核心工作不是重新翻译而是做格式修订——把一份能读的稿子变成一份能用的文档。这篇文章适合两类人一是手里已经有翻译稿但不知道怎么整理成合规文档的从业者二是需要把标准条款映射到自家 ISMS 体系里的安全工程师。2. 先搞清楚 ISO 27799 的文档骨架为什么格式修订比翻译本身更耗精力2.1 这份标准的章节结构决定了修订的复杂度ISO 27799-2016 的正文结构大致分几块范围、规范性引用、术语和定义、健康信息安全管理概述、信息安全控制目标与控制措施。真正要落地的是最后一块它按 ISO 27002 的十四个控制域展开每个控制域下面有若干控制目标每个控制目标下面又有控制措施和实施指南。翻译稿最容易出问题的地方就在这里——英文原文的层级是靠编号和缩进共同表达的比如 7.2.3 下面可能还有 a)、b)、c) 的细分翻译成中文后如果只保留文字不保留层级读起来就是一团浆糊。我拿到的初稿就是典型情况控制域标题、控制目标、控制措施全用同一级标题编号时有时无表格里的内容被转成了纯文本段落。这种稿子拿去给审计师看对方第一句话就是“你这条款编号呢”所以格式修订的第一步不是改文字是重建文档的层级骨架。2.2 格式修订的三个硬指标编号、术语、可引用性编号体系必须和英文原版一一对应。ISO 27799-2016 的编号是继承 ISO 27002:2013 的控制域从 5 到 18每个控制域下的控制目标编号是 X.1、X.2 这样控制措施是 X.1.1、X.1.2。翻译稿如果丢了编号或者把 5.1.1 写成了 5.1.1.1后面做映射表的时候就会对不上。术语一致性是第二个硬指标。医疗场景里“health information”到底翻成“健康信息”还是“医疗信息”“data subject”翻成“数据主体”还是“信息主体”这些必须在全文统一。我一般会先抽一份术语表出来把高频词和易混词列进去修订时用查找替换批量处理但要注意上下文——有些词在不同控制域里的译法确实需要微调。可引用性是最终目标。一份格式修订合格的翻译稿应该能让读者直接引用“ISO 27799-2016 第 8.3.2 条”去写内部制度而不是说“就那个讲访问控制的段落”。这意味着每个控制措施都必须有唯一、稳定、可定位的编号。2.3 修订前的准备工作术语表、编号映射表、样式模板动手之前我会先做三件事。第一从英文原版里把术语和定义章节的术语全部提取出来做成两列表格英文术语、推荐中文译法。第二把英文原版的编号体系完整抄下来做成编号映射表左边是英文编号右边是翻译稿里对应的位置如果存在的话。第三在 Word 或 Markdown 里定义好样式模板控制域用 Heading 1控制目标用 Heading 2控制措施用 Heading 3实施指南用正文加缩进。这三件事做完修订就有了基准。没有这个基准改到后面一定会出现“这个编号到底对应哪一条”的反复确认。# 术语一致性检查脚本扫描翻译稿中的术语使用情况 import re from collections import Counter # 定义术语映射表英文术语 - 推荐中文译法 term_map { health information: 健康信息, data subject: 数据主体, access control: 访问控制, information security: 信息安全, risk assessment: 风险评估 } # 读取翻译稿假设为纯文本 with open(translated_draft.txt, r, encodingutf-8) as f: text f.read() # 统计每个推荐译法的出现次数 for en_term, cn_term in term_map.items(): count len(re.findall(cn_term, text)) print(f{cn_term}对应 {en_term}出现 {count} 次) # 检查是否存在不一致的译法示例健康信息 vs 医疗信息 inconsistent { 健康信息: len(re.findall(健康信息, text)), 医疗信息: len(re.findall(医疗信息, text)) } print(\n一致性检查) for term, cnt in inconsistent.items(): print(f {term}: {cnt} 次)这段脚本的作用是在修订前快速摸清术语使用现状。term_map里定义的是推荐译法脚本会统计每个推荐译法在稿子里出现了多少次。后面的inconsistent字典用来对比易混词比如“健康信息”和“医疗信息”各出现了多少次。如果两个词都大量出现说明翻译过程中没有统一需要人工判断哪些该改。参数方面term_map和inconsistent都需要根据实际稿子的术语情况来调整不是固定值。3. 格式修订的实操路径从纯文本翻译稿到可引用合规文档3.1 第一步重建编号体系让每个条款都有唯一坐标编号重建是格式修订里最枯燥但最不能省的一步。我的做法是打开英文原版 PDF从第 5 章开始逐条把编号抄到一个结构化文件里。抄的时候只抄编号和对应的英文标题不抄正文。抄完之后再打开翻译稿把中文标题往编号后面填。这个过程会遇到几种情况。第一种翻译稿里有编号但编号错了比如把 6.1.1 写成了 6.1.1.1这种直接改。第二种翻译稿里没有编号只有标题文字这种需要根据英文原版的顺序反推编号。第三种翻译稿里编号和标题都有但顺序和英文原版不一致这种最麻烦需要逐条比对内容才能确定对应关系。我一般会用一张三列表格来管理这个过程英文编号、英文标题、翻译稿对应位置。填完这张表编号体系就重建完成了。后续所有修订都基于这张表来做不会再出现编号混乱。# 编号映射表生成脚本根据英文原版编号和翻译稿标题做匹配 import csv # 英文原版编号与标题示例数据实际需从原版逐条提取 en_structure [ (5, Information security policies), (5.1, Management direction for information security), (5.1.1, Policies for information security), (5.1.2, Review of the policies for information security), (6, Organization of information security), (6.1, Internal organization), (6.1.1, Information security roles and responsibilities), ] # 翻译稿标题列表示例实际从翻译稿提取 cn_titles [ 信息安全策略, 信息安全的管理方向, 信息安全策略, 信息安全策略的评审, 信息安全的组织, 内部组织, 信息安全角色和职责, ] # 生成映射表 with open(mapping_table.csv, w, newline, encodingutf-8-sig) as f: writer csv.writer(f) writer.writerow([英文编号, 英文标题, 中文标题, 备注]) for i, (num, en_title) in enumerate(en_structure): cn_title cn_titles[i] if i len(cn_titles) else writer.writerow([num, en_title, cn_title, ]) print(映射表已生成mapping_table.csv)这个脚本把英文编号、英文标题和翻译稿标题拼成一张 CSV 映射表。en_structure是英文原版的编号和标题列表cn_titles是翻译稿里提取出来的标题列表。脚本按顺序配对输出一张带备注列的表格。实际使用时en_structure需要从英文原版逐条录入cn_titles需要从翻译稿里提取。备注列留给人工填写比如“编号错误已修正”或“标题译法待确认”。这张表是后续所有修订工作的索引。3.2 第二步统一术语用术语表做全文替换和人工复核术语统一不能只靠查找替换。我的流程是先用脚本统计每个术语的出现次数和上下文然后人工判断哪些需要改最后用替换功能批量处理但替换后必须逐条复核。举个例子“access control”在 ISO 27799 里统一翻成“访问控制”但翻译稿里可能混用了“存取控制”“接入控制”。脚本统计出来之后我把所有“存取控制”和“接入控制”替换成“访问控制”然后逐条看上下文确认没有把“network access control”这种需要区分的地方改错。另一个容易出问题的是“shall”和“should”的翻译。ISO 标准里“shall”表示要求“should”表示建议翻译时必须区分。常见做法是“shall”翻成“应”“should”翻成“宜”。如果翻译稿里全翻成了“应”那就需要逐条根据英文原版改回来。这个工作量不小但如果不改后续做合规判断时会出大问题——把建议当成要求或者把要求当成建议都是审计里的硬伤。3.3 第三步样式与排版让文档结构在视觉上可识别编号和术语搞定之后最后一步是排版。排版的目标不是好看是让读者一眼能看出层级关系。我的做法是用 Word 的样式功能控制域标题用 Heading 1控制目标用 Heading 2控制措施用 Heading 3实施指南用正文加左右缩进。表格统一用三线表表头加粗。Markdown 场景下类似控制域用##控制目标用###控制措施用####实施指南用普通段落加引用。但要注意如果最终交付物是 Word 文档Markdown 的层级需要能正确转换成 Word 样式。我一般会在 Markdown 里用注释标记层级转换时用 Pandoc 的--reference-doc参数指定样式模板。排版还有一个细节条款之间的间距。ISO 标准原文里控制域之间、控制目标之间、控制措施之间都有固定的间距规则。翻译稿如果全用空行分隔打印出来会显得很散。我的做法是控制域前空两行控制目标前空一行控制措施前不空行实施指南紧跟在控制措施后面。这样打印出来层级感最强。# 使用 Pandoc 将 Markdown 翻译稿转换为带样式的 Word 文档 pandoc translated_draft.md \ -o iso27799_revised.docx \ --reference-docstyle_template.docx \ --toc \ --toc-depth3 \ --number-sections这条命令把 Markdown 格式的翻译稿转成 Word 文档。--reference-doc指定样式模板模板里预先定义好 Heading 1、Heading 2、Heading 3 的字体、字号、间距。--toc生成目录--toc-depth3表示目录包含到三级标题。--number-sections自动给章节编号。实际使用时style_template.docx需要提前准备好里面至少定义好三级标题样式和正文样式。如果翻译稿里已经有手动编号--number-sections可能会造成编号重复这时候需要把手动编号去掉让 Pandoc 自动生成。4. 避坑指南格式修订里最容易翻车的五个地方4.1 编号对不上翻译稿的编号和英文原版错位现象修订到一半发现翻译稿里 7.1.2 的内容在英文原版里其实是 7.1.3。原因通常是翻译时参考了不同版本的原版或者手动录入编号时跳号了。解决方法是回到英文原版从第一个编号开始逐条核对不要跳着看。我一般会把英文原版的编号列表打印出来改一条勾一条全部勾完再检查一遍。4.2 术语替换过度把不该改的词也改了现象用查找替换把“存取控制”全改成“访问控制”之后发现“physical access control”被改成了“物理访问控制”但原文语境里这个词指的是机房出入管理翻成“物理访问控制”反而不如“物理出入控制”准确。原因是查找替换没有考虑上下文。解决方法是替换前先导出所有包含目标词的句子人工过一遍确认哪些该改哪些不该改。替换后还要再抽查一遍。4.3 样式套用后目录错乱标题层级和样式不匹配现象用 Pandoc 生成 Word 文档后目录里出现了不该出现的条目比如实施指南的段落被当成了标题。原因是 Markdown 里用了####但样式模板里没有定义四级标题Pandoc 就把它当成了普通段落但目录生成时又把它算进去了。解决方法是统一 Markdown 里的标题层级最多用到###四级以下用加粗或引用代替。样式模板里也要把 Heading 1 到 Heading 3 都定义好。4.4 表格跨页断裂控制措施表格在 Word 里被拦腰截断现象打印出来的文档里一个控制措施的表格被分到了两页表头在第一页内容在第二页。原因是 Word 默认允许表格跨页断行。解决方法是在 Word 里选中表格右键属性取消勾选“允许跨页断行”。如果表格确实很长就在表格属性里设置“在各页顶端以标题行形式重复出现”。4.5 中英文混排间距失控数字和中文之间没有空格现象修订后的文档里“ISO 27799”和“2016”之间没有空格“第5章”和“5.1”之间也没有空格读起来很挤。原因是翻译稿里中英文混排时没有统一加空格。解决方法是用正则表达式批量处理在中文和英文/数字之间插入空格。但要注意专有名词如“ISO 27799”内部的空格不能动条款编号如“5.1.1”内部的点号也不能动。# 中英文混排间距修复脚本 import re def fix_spacing(text): # 在中文字符和英文字母/数字之间插入空格 # 避免影响条款编号如 5.1.1和已有空格 text re.sub(r([\u4e00-\u9fff])([A-Za-z0-9]), r\1 \2, text) text re.sub(r([A-Za-z0-9])([\u4e00-\u9fff]), r\1 \2, text) # 修复连续空格 text re.sub(r {2,}, , text) return text # 示例 sample 依据ISO27799标准第5章的要求访问控制应覆盖所有信息系统。 fixed fix_spacing(sample) print(fixed) # 输出依据 ISO27799 标准第 5 章的要求访问控制应覆盖所有信息系统。这个脚本用正则表达式在中文和英文/数字之间插入空格。第一个re.sub处理“中文英文/数字”的情况第二个处理“英文/数字中文”的情况。[\u4e00-\u9fff]是中文汉字的 Unicode 范围。脚本最后会把连续多个空格合并成一个。注意这个脚本不会处理“ISO27799”这种英文和数字之间没有空格的情况因为那不是中英文混排问题需要单独处理。5. 进阶技巧把格式修订后的文档变成可检索、可映射的合规资产格式修订做完之后文档能读了但还不算完。真正有价值的做法是把这份修订稿变成可检索、可映射的合规资产。我一般会做两件事一是给每个控制措施打标签二是建一张映射表把 ISO 27799 的条款和自家 ISMS 体系里的控制项对应起来。打标签的思路是这样的每个控制措施至少打三个标签——控制域如“访问控制”、控制类型如“预防性”“检测性”、适用场景如“电子健康记录系统”“影像归档系统”。标签可以用 YAML 格式写在 Markdown 文件的 front matter 里也可以用 CSV 单独维护。有了标签之后做差距分析时就可以按标签筛选比如“把所有适用于电子健康记录系统的预防性访问控制措施列出来”。映射表是另一件值得做的事。ISO 27799 的控制措施和 ISO 27001 的附录 A 控制项有对应关系和 NIST 网络安全框架也有对应关系。建一张映射表左边是 ISO 27799 条款号中间是 ISO 27001 附录 A 条款号右边是自家 ISMS 的控制项编号。这张表建好之后审计时可以直接引用不用每次翻标准。# 控制措施标签示例YAML front matter control_id: 9.1.1 control_domain: 访问控制 control_type: 预防性 applicable_systems: - 电子健康记录系统 - 影像归档系统 iso27001_mapping: A.9.1.1 internal_control: ISMS-AC-001这段 YAML 定义了一个控制措施的标签结构。control_id是 ISO 27799 的条款号control_domain是控制域control_type是控制类型applicable_systems是适用系统列表iso27001_mapping是对应的 ISO 27001 附录 A 条款号internal_control是自家 ISMS 的控制项编号。实际使用时每个控制措施都可以用这样的结构来标记后续做筛选和映射时直接读 YAML 就行。还有一个技巧是给文档加交叉引用。ISO 27799 里很多控制措施会引用其他条款比如“参见 5.1.1”。翻译稿里如果只写了“参见 5.1.1”但没有超链接读者需要手动翻。我的做法是在 Markdown 里用锚点链接把“参见 5.1.1”变成可点击的链接。Word 里可以用交叉引用功能但 Markdown 转 Word 时交叉引用会丢失所以如果最终交付物是 Word交叉引用需要在 Word 里手动加。最后说一个我自己的习惯修订完成的文档我会导出两份一份是带完整编号和样式的“审计版”一份是去掉实施指南、只保留控制目标和控制措施的“速查版”。审计版给审计师和合规团队用速查版给开发和运维团队用。两份文档同源但用途不同。这个习惯帮我省了很多沟通成本——开发团队不需要看实施指南里的长篇解释他们只需要知道“这一条要求我做什么”。希望帮到你。本文还有配套的精品资源点击获取