本节摘要:Access 的安全靠三件事打配合:数据库密码锁住打开的门、加密让文件本身不可读、信任中心决定代码能不能跑。它们都防意外不防决心——真正的权限分层要靠架构设计补位。本节逐层讲清用法与边界。
华彩上线前我照例做了一次"安全问答",老板娘的问题很典型:"能不能设成张三只能看库存、李四只能录单?"我的回答是:软件按钮做不到,但架构可以。这一节就把 Access 能做的三件和需要你自己做的一件,全部摊开。
给文件上开库密码的操作路径短得惊人:独占方式打开文件(文件菜单选打开时勾独占)→ 数据库工具点"用密码进行加密" → 输入并确认 → 完成。此后任何人双击文件都会先撞上密码框。
三个使用要点比操作本身重要:
自 ACCDB 格式起,"用密码进行加密"这个动作同时完成了两项工作:设置密码与启用加密算法包裹整个文件。也就是说在老格式时代"加密码但文件可被工具直接翻阅"的历史漏洞已被堵上;拷走你文件的人拿到的是一堆乱码。
配套还有一个动作叫解密还原:同样的对话框留空密码即可把文件恢复为无加密状态。请把它记进交接文档——有朝一日要做版本升级或迁移时,一个加密状态的文件会让不少外部工具望而却步。

打开陌生库时的那条黄色警示条("安全警告:部分活动内容已被禁用")就是信任中心的指纹。它的职责单一而关键:决定宏与 VBA 代码是否放行。导航窗格上方"启用内容"按钮一点,代码上岗。
机制背后是一道经典权衡:关着最安全但功能瘫痪,全开省心却门户大开。务实的中间路线是受信任位置白名单:在选项的信任中心设置里,把存放业务库的固定目录加入受信列表,此后该目录下的文件直接全功能运行、不再弹条,外来文件依旧被拦。部署 7.2 的多份前端时同样受益——每台机器把本地前端目录设为信任位一次了事。
顺带纠正一个流行误会:有人以为那条警示条是病毒报错。它拦的是一切未经批准的代码执行机会,包括你自己辛苦写的 VBA——所以开发期请把你的工程目录也拉进白名单,否则每天为调试多点十次"启用内容"能把人逼疯。
最后回到开头那个问题。Access 已不支持旧版 Workgroup 安全模型那种精细到表甚至字段的用户权限体系,桌面上能做到的就是前述三层。想实现"按人分权",现实的落法按投入从轻到重:
流程写成 checklist 直接照抄。第一分钟到第三分钟,给后端上密码:以独占方式打开后端文件(打开对话框里勾"以独占方式打开",已开着则先经文件菜单选独占重新打开)→ 文件信息里的"用密码进行加密"→ 输入两遍密码保存。验证动作不可省:关闭后再普通双击,应当弹出要求输入密码;说明加密生效。
第四分钟到第七分钟,生成无源码的前端:文件菜单选"生成 ACCDE",产出一份只剩可执行代码、设计改动被冻结的发布版。此后分发给同事的永远是它——使用者想改窗体也改不动,误触设计模式的可能性归零,源代码逻辑也不再随文件外流。
第八分钟,登记受信任位置:每台机器把本地前端所在目录加入信任中心白名单(上一节的操作),保证日常启动不弹警示条。
第九与第十分钟,做一次恢复预演:随手改一行数据不保存,然后从备份目录复制昨天的后端覆盖测试副本打开核对——确认备份真的可用。备份没被恢复演练过之前,都只能算心理安慰。
问:ACCDE 能防人看懂业务逻辑吗? 能挡住顺手翻看,挡不住铁了心的逆向——它的定位是防误用加防盗版便利,不是保险柜。真正不想让人知道的东西别写进客户端任何一层。
问:密码设多复杂合适? 这是个工程折价题:越复杂的密码意味着越多使用环节要管理它。我们的惯例是高强度密码但只在两处出现——运维交接文档的密封页和负责人的密码管理器,日常使用者永远接触不到加密层。
故事一:密码贴在文件名上的共享盘。 接手过一个倒霉项目:前任把后端命名为"华彩后端_密码1234.accdb"。当问到为什么,答曰"怕自己忘了"。这个案例后来被我用于入职培训第一课:安全措施一旦为了好记而通俗化,等于在门上贴钥匙。修法不只是改名——我们顺势把系统职责拆给 7.2 的架构方案,让"知道密码的人"从全员缩减到一人。
故事二:离职同事带走的前端毫无用处。 华彩一位离职的仓管把前端拷回了家,担心了几天的老板娘后来发现什么也打不开:前端只是壳,真正的数据在后端加密文件里,而后端躺在受控目录从未分发。这就是"前端差异化分发"策略的直接战果——安全设计的最高境界,是让泄密行为发生时损失有硬边界。
交付前的安全自查五问也一并留给你:密码是否只有负责关系里的两个人知道?前端是否全部以 ACCDE 形态分发?受信任位置是否只加了业务目录?备份文件是否与主库同样加密?离职流程里有没有"删权限拷副本改后台口令"三步?五问全绿再上线,这是比任何技术参数都硬的验收线。
防线图纸画好了,去工地:拆分。