想象一下,你家小区大门口站着一位责任心极强的门卫老张。外卖员、快递员、串门的亲戚、下班的业主……所有人都要从他面前经过。他瞅一眼人脸,不认识的都要盘问几句;访客要刷身份证登记;快递单上的手机号他用记号笔涂掉一半;深夜有人鬼鬼祟祟在门口转悠,他立刻开灯盯住。这个小区的安全感,很大程度上就来自这扇门和这个把关的人。 在数据世界里,数据安全网关就是这扇门,就是老张。系统之间每天有海量数据进进出出,哪些请求可以放行、哪些是伪装成正常请求的攻击、返回的数据是否泄露了敏感字段——如果每件事都交给各系统自己管,就像每个住户自己对付小偷,混乱又低效。于是网关出现了:把安全策略集中到“门口”统一执行。本文就用老张上岗的故事,带零基础的你认识网关的职责、架构、配置、防护与部署流程,学会为你的数据世界安好这扇门。
掌握数据安全网关,等于掌握了数据治理的“收口”能力——把分散的数据访问管起来、让每一笔进出都有据可查,这是数据工程师与架构师走向数据安全专家的必经一步。
目录
可视化演示
展示数据安全网关的核心架构、ABAC属性访问控制决策流程及动态脱敏机制,切换模式查看不同层面的安全控制。
本节配有交互动效(进入视口后自动加载,约 3KB)。
网关架构:代理转发+策略引擎+审计日志 应用请求经代理转发层拦截改写后送达数据库 策略引擎实时校验访问权限并决定放行或拒绝 审计日志全量记录每次访问形成可追溯证据链 零信任模型下所有数据访问必须经过网关校验
基本概念:老张的第一天上岗
门卫老张第一天到小区上班,第一件事是认清自己的岗位——大门。他不进任何一栋楼,也不替住户收快递,他只是站在所有进出必经的通道上,让每个人、每辆车都从他眼前过一遍。数据安全网关也一样,它不存储数据、不执行业务逻辑,它站在业务应用与数据存储之间的关键通道上,成为所有数据访问的“唯一关口”。
在技术架构里,网关通常部署在应用系统与数据库、数据仓库或数据服务之间。应用想读数据,请求先飞到网关;网关检查完身份和权限,才把请求转发给后端的真实数据源。这样做最大的好处是安全策略集中化:以前每个应用各自校验权限、各自防攻击,水平参差不齐;现在全小区只认老张一个人的规矩,标准统一、漏洞减少。
它还能拦下“不该进的人”。南北向流量(外部到内部)和东西向流量(内部系统之间)都统一收口管理。吞吐量是衡量老张“干活快不快”的核心指标——他每小时能盘查多少辆车。
老张的岗位看似简单,却是整个小区安全的地基。同样,网关吞吐量决定了它会不会成为业务瓶颈——门太窄,再好的安全规则也会让正常通行堵成长队。
- 请求总数 N网关在统计时间内处理的数据请求总条数。比如老张一小时盘查了 3600 辆车,$N = 3600$。
- 统计时间 t观察的时间窗口,工程上通常以秒为单位。1 小时对应 $t = 3600$ 秒。
- 求比值$T = 3600 \div 3600 = 1$,含义是平均每秒放行 1 辆车,也就是网关的每秒查询数(QPS)。
核心功能:老张的四件法宝
老张的岗亭里摆着四样东西:门禁卡读卡器、访客白名单本、记号笔和访客登记簿。每一样都对应数据安全网关的一项核心功能,咱们一件一件看。
第一件,门禁卡读卡器——身份认证。住户刷卡进门,读卡器确认“你是业主”。对应到网关,就是验证调用方的身份:API Key、OAuth Token 或者数字证书。验证通过,才能继续下一步。
第二件,访客白名单本——访问控制。就算是业主,也不是每栋楼都能进。访客本上写着“3 号楼业主可进 3 号楼”,这就是基于角色的访问控制(RBAC)。网关根据调用方的身份属性和权限策略,决定它能不能读某张表、执行某条命令。
第三件,记号笔——数据脱敏。快递到了,老张拿起记号笔把快递单上的手机号涂掉中间四位。网关在返回数据前也会做同样的事:身份证号、手机号、银行卡号这些敏感字段,在离开数据源之前被“打码”。打码的质量有一个量化指标——脱敏率。
第四件,访客登记簿——审计日志。老张把每个访客的进出时间、拜访对象记得清清楚楚,出了事能查。网关同样记录每一次访问:谁、什么时间、访问了什么数据、放行还是拦截。这四件法宝配合起来,老张一个人就守住了整个小区的大门。
- 已脱敏字段数 $M_{masked}$返回数据流中被成功打码的敏感字段数量。例如响应里有 8 个手机号被处理成
1388000,则 $M_{masked} = 8$。 - 应脱敏总数 $M_{total}$按照合规要求本应脱敏的字段总数。假设规定所有 10 个手机号都要打码,则 $M_{total} = 10$。
- 计算百分比$R_{mask} = 8 \div 10 \times 100\% = 80\%$,说明还有 20% 的敏感字段漏过了,需要检查脱敏规则。
部署架构:大门怎么修,决定安保怎么防
同样是小区,普通住宅区一个正门就够了;高档小区每个入口都装人脸识别;政府大院不仅有多道门,还有双人双岗轮班。网关的部署架构,就是“大门怎么修”的问题。
代理模式是最常见的部署方式。客户端被明确告知“所有数据请求先发给网关,由网关转发”,就像访客知道要先到岗亭登记。优点是策略集中、应用无感知改造小。
透明网关则更“隐形”。它串在网络上,客户端根本不知道有它的存在,网络层自动把流量导给它检查。就像小区的人脸识别门禁,业主走过去门自动开,他甚至没意识到“门”的存在。透明网关对业务无侵入,但网络配置更复杂。
高可用集群解决“老张生病了怎么办”的问题。单点值守最怕门卫请假——网关一挂,全小区瘫痪。生产环境一般部署多台网关实例,前面加负载均衡,后面做故障转移。集群的可用性可以用一个简洁的公式估算。
架构设计还要考虑网络规划。网关通常放在 DMZ(隔离区),前后分别连接外部网络与内部数据库网络,形成安全域隔离。就像大宗建筑不仅有大门,大门到楼栋之间还隔着缓冲区,任何危险都到不了核心区。
- 单点不可用概率 $(1-p)$若单台网关可用性 $p = 0.9$,则一年中约 10% 的时间不可用,$(1-p) = 0.1$。
- n 次方假设两台一起故障的概率是 $0.1 \times 0.1 = 0.01$,写成 $(1-p)^n = 0.1^2 = 0.01$——前提是两台机器互相独立,不共用电力和网络。
- 整体可用性$A = 1 - 0.01 = 0.99$,即 99%,可用性从单台的 90% 提升到 99%。
关键配置:门禁规则怎么定,通行效率与安全兼顾
老张上岗第三天,物业给了他一页“值岗规则”:快递统一放门口架子上、装修工人凭出入证进、晚上十点后访客需业主下楼接。这页规则就是网关的策略配置,定得好不好,直接影响安全与通行效率的平衡。
策略路由是“不同的人走不同的流程”。网关根据来源 IP、请求路径、参数特征,把请求转发到不同的后端或执行不同级别的检查。就像老张看到穿工装的直接引导去物业装修通道,而业主走人脸通道。
黑白名单是最直观的访问控制。白名单是“放了哪些人”,黑名单是“拒绝哪些人”。工程上有一条铁律:黑名单优先于白名单。即使某个 IP 在白名单里,只要它在黑名单上,就必须拦截——老张绝不会因为某个人证件齐全就放一个通缉犯进门。
证书配置对应门禁的“身份凭证防伪”。TLS 双向认证让客户端和服务端互验证书,就像业主和门卫彼此确认身份,防止伪造门禁卡(中间人攻击)。
性能参数直接决定用户体验。连接池大小、超时时间、限流阈值这些参数背后,有一个经典的排队论公式指导着取值。
规则本不是越厚越好。如果每个进出的人都查十道手续,通道就堵死了;规则太少又形同虚设。关键配置的功夫,全在“够用且不堵”这五个字上。
- 到达速率 $\lambda$平均每秒到达网关的请求数。业务高峰时每秒 100 个请求,$\lambda = 100$。
- 平均处理时间 $W$网关处理单个请求平均耗时,包括排队和转发。实测平均 $0.2$ 秒,即 $W = 0.2$。
- 系统内请求数 $L$$L = 100 \times 0.2 = 20$,说明网关内部平均有 20 个请求在等待或处理中——这就是连接池大小不该小于 20 的依据。
安全防护:识别骗子的招数,一个都不能少
干了十年门卫的老张,见过形形色色的“坏人”。他们不是硬闯,而是用话术和伪装。数据世界的攻击者也一样,最典型的就是注入攻击。
SQL 注入就像骗子对老张说“我是业主的朋友,你让我进去就行”——通过拼接特殊字符串,让系统误信它有权访问。经典手法是在查询条件里加 ' or '1'='1,让 SQL 恒真,从而把整张表拖出来。网关通过特征匹配(识别 or、union select、; drop 等危险关键字)和参数化校验,在请求到达数据库之前就把它拦下。
敏感信息泄露则是“偷看快递单”的行为。返回报文里带上了身份证、银行卡号,网关要对响应体做关键词扫描和字段级检查,一旦命中就脱敏或拦截。加密传输解决“被偷听”的问题,开启 TLS 1.2/1.3 后数据在网络上全程密文,就像老张和对讲机那头的物业用加密频道通话。
异常检测针对“踩点”行为。某个账号平时每分钟请求 5 次,突然变成每秒 500 次,大概率是脚本在拖库。网关根据频率、来源地域、IP 信誉分做实时研判。安全防护的“准不准”,用精确率来衡量。
安全防护不是把攻击全部杀死,而是在“都拦住”和“不误伤”之间找平衡。老张的经验是:宁可多盘问两句,也绝不放一个骗子进楼。
- 真正拦截 $TP$系统拦截了 95 个请求,事后确认 95 个都是真实攻击,$TP = 95$。
- 误拦 $FP$还有 5 个正常用户被错杀,$FP = 5$。
- 计算精确率$P = 95 \div (95 + 5) = 95\%$。精确率高说明老张眼睛毒,不冤枉好人;精确率低则说明风声鹤唳,误伤业务。
实践流程:新门卫团队上岗五步走
物业决定把安保升个级:换全套智能门禁系统。这事不能拍脑袋,要按流程走。网关部署同样有一套标准的生命周期,每一步都有明确的交付物。
第一步,需求分析。老张先摸底:小区有几栋楼、多少住户、哪些区域是重点防护区。对应到数据安全项目,则是盘点数据资产——有哪些数据库、哪些表里有敏感字段、谁需要访问、合规要求是什么。产出《安全需求清单》。
第二步,部署实施。搭环境、装网关组件、配置网络路由、导入策略。就像安装门禁设备、布网线、录入住户人脸数据。这一步最容易出的错是网络规划不到位,导致网关成了透明摆设。
第三步,测试验证。先让几个住户试走,确认能正常进出;再让工程师模拟坏人闯门,验证拦截有效。对应技术动作是功能测试(正常请求放行、越权请求拦截)、压力测试(高并发下吞吐量)和绕过测试(尝试跳过网关直连数据库,验证网络层确实没有捷径)。
第四步,运维监控。上线只是开始。要看吞吐量、延迟、拦截率、误拦率这些指标,配置告警,定期分析审计日志调整策略。整个周期的服务质量,可以用 SLA 来度量。
流程走完整,老张才敢拍胸脯说“这安保系统能用”。部署不是装完就结束,而是从需求到运维的持续优化闭环。
- 总时长 $T_{total}$以一个月为例,30 天 × 1440 分钟 = 43200 分钟。
- 宕机时长 $T_{down}$运维记录当月累计不可用 43.2 分钟。
- 计算可用性$SLA = (43200 - 43.2) \div 43200 \times 100\% \approx 99.9\%$,即业界常说的“三个 9”,全年停机不超过 8.8 小时。
典型场景:不同“大院”的安保方案
老张后来被调到好几个不同的小区,发现每个地方的安保重点都不一样。数据安全网关的落地场景,也各有各的门道。
金融行业是最严的“政府大院”。交易流水、客户资产、信用卡号都是顶级敏感数据,监管要求(如 PCI-DSS)明确规定了访问控制、加密和审计的要求。网关在这里扮演“合规守门人”:挡住非授权访问,记录每一次交易数据查询,确保出了问题有据可查。医疗数据场景则强调患者隐私(如 HIPAA 合规),医院之间共享影像和病历前,必须先过网关的脱敏关卡,让医生看到诊断结论但看不到多余的身份信息。
内部系统场景更像“单位家属院”——重点不是防外部入侵,而是管好内部人员的横向越权。一个普通员工账号不该能访问 HR 系统的薪资表,网关通过统一的身份认证和权限映射,把内部系统间的访问全部收口。云平台场景则是“智慧社区”:微服务架构下 API 多如牛毛,网关与云上的 API 网关配合,一层管流量、一层管数据,层层设防。
投入是否值得,最终要算一笔账——安全网关带来的损失避免额与投入成本的对比,就是 ROI。
场景不同,核心诉求不同,但底层逻辑一致:数据安全网关是把“安全”这件事从各系统的自治变成集中治理,用一扇门守住整个数据世界的安宁。
- 避免损失 S部署前每年因数据泄露赔偿平均 120 万元,部署后预计降到 20 万,则 $S = 120 - 20 = 100$ 万元。
- 总投入 C包含软件采购、硬件和运维人力,摊到每年 50 万元。
- 回报率$ROI = (100 - 50) \div 50 \times 100\% = 100\%$,意思是每投 1 元,能换回 2 元的损失避免,投资回报翻倍。
AI 应用场景
银行核心交易系统防拖库网关
阶段:数据安全与合规
解决的问题:银行核心库直连场景中,内部人员和第三方运维可直接拖取全量客户数据;传统靠数据库账号密码防泄露,一旦凭证泄露便形同虚设。部署数据安全网关后,所有 SQL 都经过网关的注入检测、白名单校验和返回脱敏,拖库行为会被实时拦截并告警。
具体案例:某城商行在应用与核心库之间串联部署网关,配置“只允许应用账号执行白名单 SQL”的策略。上线第二周,网关即拦截了一次来自运维跳板机的 SELECT * FROM customer 全表扫描请求,审计日志完整记录了来源 IP、操作人和时间,安全团队据此追溯并修正了运维权限。
医疗影像共享平台的脱敏闸门
阶段:数据治理与隐私保护
解决的问题:三甲医院与基层医院共享影像数据时,DICOM 文件头包含患者姓名、身份证等敏感元数据。直接传原始文件违反隐私法规。网关在共享链路上对出网数据做实时字段识别与脱敏,确保医生只看得到影像内容,看不到身份信息。
具体案例:某省级医疗平台在跨院传输链路上部署网关,通过正则与关键词规则识别身份证号、手机号、住院号,批量打码后转发。上线后脱敏率达到 100%,顺利通过卫健委的数据安全检查。
Python 演示
class DataSecurityGateway: """模拟数据安全网关的访问控制、注入检测、脱敏与审计功能""" def __init__(self): self.blocked_count = 0 self.passed_count = 0 self.audit_log = [] self.sensitive_fields = ["phone", "id_card", "email"] def is_in_blacklist(self, user_id): return user_id in {"u_hacker", "u_spider"} def has_injection_risk(self, sql_text): danger_tags = ["' or", "union select", "; drop", "/*"] return any(tag in sql_text.lower() for tag in danger_tags) def mask_sensitive(self, record): result = dict(record) for field in self.sensitive_fields: if field in result and result[field]: result[field] = result[field][:3] + "****" + result[field][-2:] return result def process_request(self, user_id, action, data): if self.is_in_blacklist(user_id): return self._reject(user_id, action, "blacklist") if action == "query" and self.has_injection_risk(data.get("sql", "")): return self._reject(user_id, action, "sql-injection") self.passed_count += 1 self.audit_log.append((user_id, action, "passed")) return self.mask_sensitive(data.get("record", {})) def _reject(self, user_id, action, reason): self.blocked_count += 1 self.audit_log.append((user_id, action, "blocked:" + reason)) return None def report(self): print("放行请求:", self.passed_count) print("拦截请求:", self.blocked_count) print("审计日志条数:", len(self.audit_log)) def main(): gw = DataSecurityGateway() normal = gw.process_request("u_alice", "query", {"sql": "select * from user", "record": {"phone": "13800138000"}}) evil_1 = gw.process_request("u_hacker", "query", {"sql": "select * from user where id='1' or '1'='1'"}) evil_2 = gw.process_request("u_spider", "query", {"sql": "select * from user"}) print("正常响应:", normal) print("恶意响应:", evil_1, evil_2) gw.report() if __name__ == "__main__": main()
danger_tags = ["' or", "union select", "; drop", "/*"]定义了常见 SQL 注入的危险特征串,检测时统一转小写比对,模拟网关的 WAF 规则库。if field in result and result[field]:只对存在且非空的敏感字段做脱敏,避免对缺失字段报错。result[field][:3] + "****" + result[field][-2:]手机号只保留前 3 位和后 2 位,中间打码,如138****00。self.audit_log.append((user_id, action, "blocked:" + reason))拦截行为同样写入审计日志,记录“为什么拦”,方便事后追溯。if __name__ == "__main__":可执行入口,运行脚本即可看到网关对正常与恶意请求的差异化处理结果。
常见误区
误区只要把数据安全网关部署到网上,所有数据就安全了,不需要再做其他防护。
正解网关只是安全体系的一环,不是万能保险柜。它管得住“从门口经过”的流量,却管不住绕过它的路——比如内部人员直连数据库的跳板机、未纳管的应用后门。就像小区大门再多保安,也防不住有人翻墙或从地下车库直接进楼。真正的安全需要网关与网络隔离、数据库权限、加密存储等策略协同。
为何常见:厂商宣传常突出网关的“全面防护”能力,加上部署后短期内攻击明显减少,容易让人产生“一劳永逸”的错觉。
误区脱敏和加密都是把数据变得看不懂,既然网关支持脱敏,就不用再做字段加密了。
正解两者有本质区别。加密是可逆的,持有密钥的一方可以还原原始数据,用于存储和传输保护;脱敏通常不可逆,打码后的 13800 无法还原成完整手机号,用于展示和共享场景。拿老张的记号笔做比喻:打码是直接把单号涂死,谁也看不出来;加密则像保险柜,有钥匙的人还能打开。把加密数据交给不容许看原文的第三方,等于把保险柜钥匙也递了过去。
为何常见:入门者看到“处理过的数据”就认为效果相同,忽略了“是否可还原”这个关键差异。
误区只要部署两台网关实例,可用性就自然翻倍,故障时一定能顶上。
正解高可用的前提是实例之间真独立:不同机架、不同网络、不同电源,否则一台宕机的硬件故障可能同时带走另一台。更重要的是必须有负载均衡做健康检查、自动摘除故障节点、自动切换流量。没有这些配套,多台机器只是“多个单点”,相当于两个门卫坐在同一把椅子上互相打掩护。
为何常见:公式 A = 1 - (1-p)^n 让人误以为“加机器就行”,忽略了公式里“实例相互独立”这个前提条件。
误区把黑白名单、注入规则、频率限制全部拉满,觉得规则越严格越安全。
正解规则过严会大量误伤正常请求。比如把包含 select 的请求全部拦截,业务系统里合法的查询也全废了;频率限制设得太低,正常用户一刷新就被限流。用前面的精确率公式说,FP(误拦)变多,精确率断崖式下跌,业务投诉比攻击告警还多。规则调优的目标是“拦得住坏人、不冤枉好人”,而不是宁可错杀一千。
为何常见:安全事件的恐惧感让人倾向于“绝对不放过”,却忽略了网关的价值不仅是拦截,更是保障正常业务通行。
面试题
Q1. 数据安全网关最核心的职责是什么?
- A.提升数据库的存储空间利用率
- B.在数据通道上统一执行安全策略← 正确答案
- C.替代应用服务器的计算处理功能
- D.优化前端页面展示与用户交互
答案:B。网关的本质是“集中收口的安全门卫”,在数据通道上统一执行认证、授权、脱敏和审计策略。它不负责存储(A)、不替代计算(C)、不碰前端交互(D),那些都是别的组件的事。
Q2. 数据安全网关常见的部署位置在哪里?
- A.数据库服务器之前的流量入口处← 正确答案
- B.应用系统与数据存储之间的链路← 正确答案
- C.浏览器内部的脚本渲染引擎内
- D.内部网络边界与外部通信出口处← 正确答案
答案:ABD。网关部署在关键数据流经的通道上:数据库前(A)、应用与存储之间(B)、网络边界出口(D)。浏览器内部的脚本渲染(C)属于前端范畴,是业务代码执行环境,不是网关该待的地方。
Q3. 透明网关与传统代理模式最本质的区别是什么?
- A.客户端无需配置网关地址即可被接管← 正确答案
- B.网关只能拦截来自外部的网络攻击
- C.透明网关不需要配置任何安全策略
- D.网关必须部署在同一台物理服务器
答案:A。透明网关通过网络层引流,客户端感知不到网关存在,像小区的人脸识别门禁;代理模式则需要客户端显式配置代理地址。B 错误,透明网关同样能处理内部流量;C 错误,任何网关都要配策略;D 错误,网关可以独立部署。
Q4. 数据脱敏的常用实现手段有哪些?
- A.将手机号打码只显示前三位后两位← 正确答案
- B.对敏感字段加密后存储数据密文← 正确答案
- C.用随机假名替换真实姓名和地址← 正确答案
- D.将数据库字段类型改为大文本类型
答案:ABC。打码(A)、加密存储(B)、假名化(C)都是常见的脱敏/保护手段。改字段类型(D)只是改变存储格式,不影响敏感内容,起不到脱敏作用。
Q5. Little's Law 公式 L = λW 中,λ 代表什么?
- A.网关处理单个请求的平均耗时
- B.单位时间内到达网关的请求数量← 正确答案
- C.网关系统内部积压的请求总数
- D.请求在网关队列中的等待时长
答案:B。λ 是请求到达速率,即每秒到达网关的请求数;W 是平均处理时间;L 是系统内平均请求数。A 是 W 的定义,C 是 L,D 是 W 的一部分,都对应错位了。
Q6. 数据加密与数据脱敏的核心区别是什么?
- A.加密不可逆,脱敏可逆,两者无差异
- B.加密可解密还原,脱敏通常不可逆← 正确答案
- C.加密只用于存储,脱敏只用于网络
- D.脱敏无法保护任何真实的敏感数据
答案:B。加密是可逆的,持有密钥的授权方可以还原原文,保护存储与传输;脱敏通常不可逆,打码后的数据再也无法还原,用于展示和共享场景。A 说反了,C 的“只用于”太绝对,D 显然错误。
Q7. 以下哪些字符串是典型的 SQL 注入特征?
- A.单引号加 OR 的恒真条件判断式← 正确答案
- B.UNION SELECT 联合查询拼接语句← 正确答案
- C.分号加 DROP TABLE 的删除命令← 正确答案
- D.CREATE INDEX 索引创建语句片段
答案:ABC。' or '1'='1(A)、union select(B)、; drop table(C)都是经典的注入攻击特征,网关的规则库会对它们做拦截。CREATE INDEX(D)是合法的 DDL 操作语句,不属于注入特征。
Q8. 审计日志模块在网关中的主要作用是什么?
- A.加速用户数据的读写访问速度
- B.完整记录访问行为供事后追溯← 正确答案
- C.自动清除数据库中的废弃数据
- D.压缩经过网关的所有网络流量
答案:B。审计日志就是老张的访客登记簿,记录“谁在什么时间访问了什么数据、结果放行还是拦截”,安全事件发生后能当做证据追溯责任链。它不加速(A)、不清理数据(C)、不压缩流量(D)。
Q9. 某网关拦截精确率为 95%,误拦了 5 个正常请求,则正确拦截的攻击数是多少?
- A.拦截成功 80 个恶意攻击请求数
- B.拦截成功 90 个恶意攻击请求数
- C.拦截成功 95 个恶意攻击请求数← 正确答案
- D.拦截成功 100 个恶意攻击请求数
答案:C。精确率公式 $P = TP/(TP+FP)$,已知 $P=0.95$、$FP=5$,代入得 $0.95 = TP/(TP+5)$,解得 $TP=95$。意思是 100 个被拦截的请求中 95 个是真攻击、5 个是误伤,所以选 C。
Q10. 单实例网关可用性为 0.95,要整体可用性不低于 0.997,最少需要部署几台?
- A.1 台整体可用性约为 0.95 不达标
- B.2 台整体可用性约为 0.9975 达标← 正确答案
- C.3 台整体可用性约为 0.9999 达标
- D.4 台整体可用性约为 0.99999 达标
答案:B。用公式 $A = 1-(1-p)^n$。1 台时 $A=0.95$ 不达标;2 台时 $A = 1 - 0.05^2 = 0.9975$,满足且达到最小值;3 台(0.999875)和 4 台(0.99999375)虽然更高,但题目问“最少”,所以选 B。这也提醒我们高可用不是堆机器,够用即可。