谈一谈Excel的安全性
很早就想写一篇关于Excel安全性的文章,主要是经常有人以各种方式问起这个问题。最近一次是我们的公众号前两天发了一个小技巧的文章:能不能让Excel文件对别人只读,我却可以编辑,
结果有个同学留言提了一个问题:
“别人新建一个工作簿,把你的数据复制一下就可以了。怎么防止别人复制粘贴”。
这个问题促使我下决心写这篇文章,尽可能地全面的介绍一下Excel的安全性。
关于Excel文件的安全性,很多同学很关心,但是大家对这个安全性不太了解,因此上就造成了误会。以为这么做很安全,殊不知可以很容易的绕过去,或者以为Excel根本没有安全性可言,所以面对各种安全性需求时束手无策。
大家对Excel安全性的误会是因为对Excel提供安全性方式的不理解造成的。为了消除误会,首先需要理清我们对Excel的安全性有哪些要求。
根据我们的经验和很多人曾经的提问,我大致把这些要求总结为下面几种:
不允许别人访问
只有得到允许的人可以访问。这里面又分为两种需求:
所有允许访问的权限相同
有两种不同的权限,读/写
不同的人有不同的权限,有些人具有完全的权限,有些人具有部分权限,不同的人可以操作不同的工作表,甚至工作表区域。
理清了需求,再来看大家理解的Excel提供安全性的方式。绝大多数同学认为Excel的工作表保护和工作簿保护是Excel安全性的主要方式,希望用这种保护方式提供上面所有的安全性,当然会让你失望了。
下面我们结合Excel的功能分别介绍一下Excel对这些常见安全性的需求的实现方式。
这是最高级别的安全性要求了😎。客观的说,要完全实现真的很难啊,毕竟对有心人来说,办法多的很。
而且,对于这种要求来说,一般都是通过操作系统的权限来设定的:
一般来说这种权限设置足够保护一般的文件安全了。如果不放心,作为补充,可以给Excel文件可以设置打开密码:
这是比较常见的限制文件访问的场景。这里又分为两种情况:
共享文件
通过邮件或其他方式发送的文件
如果你的文件放在一个服务器的文件夹中,大家通过文件共享访问该文件。那么可以用上一节介绍的用操作系统的文件权限来限制访问,基本上就可以满足安全要求了。
但是,如果你的文件通过邮件(或微信等通讯工具)共享给其他人,又担心这个文件流传到其他不应该看到这个文件的人的手中,那么,你唯一能够依靠的就是上一节介绍的打开密码了。唯一值得欣慰的是,Excel提供两种密码:
强调
如果Excel文件中的信息非常敏感,那么就不要依赖Excel本身来提供保护,毕竟这个打开密码还是可以破解的。
也就是说,对于敏感的Excel文件,请不要通过邮件或其他通信工具分享给他人。一旦你这么做了,你就只能依赖Excel本身的功能来提供保护了。
最简单的情况下,这就是工作表保护所提供的功能。(工作表保护大家都很熟悉了,我就不过多介绍了,不熟悉的同学可以看这两个视频:视频一,视频二)
但是,实际工作中我很少会用到这个功能,主要的原因是有两个,首先,这个功能保护功能比较弱,有很多方法可以破解。所以,这个功能的主要作用是防止误操作。但是这个误操作,一般可以通过精心设计表格展现方式来避免。
其二,一般客户提到的保护需求其实往往比这个复杂。这是我遇到的大部分客户提到的需求:他们用一个Excel文件来记录一个项目的各种相关信息,然后团队成员通过共享访问这个文件。此时,就会有下面的要求:
不同的人只能访问自己需要访问的内容——分为可读的内容和可写的内容,这些内容可能是不同的Sheet,也可能是不同的行,或者不同的列。
这种方式往往就不能通过工作表保护等Excel功能来解决了,只能通过编程来实现。下面是我们为法国电力实现的一个项目管理工具中关于安全性的实现方式:
通过编程来实现的好处就是可以精细调整你的权限设定。而且跟有些同学想象的不一样,通过编程可以实现的权限可以是像工作表保护那样的“防君子不防小人”,也可以实现级别非常高的安全性。例如,我们可以把用户数据和关键业务数据放在后台数据库中,而前台还是用熟悉的Excel作为数据访问和处理工具,这个安全性就提高了不止一个级别。又比如,我们可以集成Windows的域安全性,这样就可以通过操作系统提供的权限来保护敏感数据。
我们前面讨论的所有的保护都是防止别人看到或者防止别人修改我们的资料,这也是所有安全性的设定的出发点。但是,怎么防止别人拷贝我的资料呢?(就像本文开头介绍的那位同学的留言中提到的)
我没有发现什么好的办法。唯一能够提供的手段就是在保护工作表时禁止选定单元格:
但是,这个保护太弱了,可以轻松去掉。一定不符合这位同学的要求。
其他方案包括存成图片,以PDF方式发布等等,或者像某些网页一样以编程的方式限制复制。这些方法都只能延缓别人复制内容的速度。毕竟,别人都看到这些内容了,如果内容很重要,他想获得并不难,至少可以人工录入,而且现在的图像识别的速度和准确率也越来越高了。如果内容不重要,那么何必费这个力气呢。
在我看来,这是个知识产权保护的问题。从这个角度入手可能才是正确的思路。技术并不能解决这个问题。
从上面的介绍大家可以看出,Excel本身对文件和信息的保护是比较弱的。要实现对敏感信息的保护,必须依赖其他方式,例如,借助操作系统或者自己编程开发。
另外,本文我们列出了关于Excel文件安全性的一些大家经常问起的情形。其实,Excel还提供了其他的安全性设置,在很多场景下,这些方式倒是可以提供比工作表保护更强大安全性,具体的大家可以看下面的几个视频:
在本文的最后,我们必须强调一下的观点:
对于信息的安全性,绝对不能仅仅依赖于技术方案。其实,很多重大的安全性问题,缺口往往不是从某个技术环节上打开的。好的管理和制度才是最重要的。例如,你可以禁止团队成员通过邮件分享敏感的Excel文件。
这方面,我们一个客户的做法给了我很深的印象,也推荐大家借鉴一下:
这位客户负责一个项目,领导一个团队进行工作。这个团队还需要跟好几个外部团队进行合作,之间需要大量的数据分享和交流。我们为这位客户提供数据支持工作。从项目一开始,他就强烈要求我们做出两个版本的文件,一份包含财务信息,一份不含财务信息。包含财务信息的文件只发给他和团队中负责财务的同事。而不含财务信息的文件可以发给所有人。他的这个简单做法就很好的避免了有团队成员不慎分享了含有财务信息的文件给外部团队而造成的某些不好的后果。比起通过各种技术手段来实现权限管理,这个做法既简单又有效。