安全加密数据库设计

aid*_*dan 15 mysql database security encryption perl

我有一个基于Web(perl/MySQL)的CRM系统,我需要一个HR部分来添加有关纪律处分和薪水的详细信息.

我们存储在数据库中的所有这些信息都需要加密,以便我们的开发人员无法看到它.

我在考虑使用AES加密,但我使用什么作为密钥?如果我使用人力资源经理的密码,那么如果她忘记密码,我们会丢失所有人力资源信息.如果她更改了密码,那么我们必须解密所有信息并使用新密码重新加密,这似乎效率低,而且很危险,如果在整个过程中途出现错误,可能会出现可怕的错误.

我有一个想法,我可以有一个加密密钥加密所有信息,并使用HR管理员的密码加密密钥.然后她可以随意更改密码,我们只需要重新加密密钥.(没有HR Manager的密码,数据是安全的)

但是仍然存在多用户访问加密数据的问题.

我可以保留关键网站的"明文"副本,并使用每个新的HR人员密码对其进行加密.但后来我知道主密钥,这看起来并不理想.

有没有人尝过这个,并成功了?

Mar*_*tin 7

GnuPG允许使用多个公钥加密文档,并使用任何一个相应的私钥进行解密.通过这种方式,您可以使用HR部门中每个人的公钥来加密数据.解密可以由具有私钥之一的任何人执行.解密将需要私钥和保护密钥的密码短语才能为系统所知.私钥可以保存在系统内,并且密码从用户请求.

GnuPG使用大量密钥可能会使数据变得非常繁琐:它必须为有效负载创建会话密钥,然后使用每个公钥加密该密钥.加密密钥与数据一起存储.

该系统的薄弱环节是私有密钥必须提供给系统(即不是用户的控制之下),以及密码必须通过该系统,因此可能会受到影响(即登录,被盗的代码.最终,原始数据也会通过系统,因此狡猾的代码可以在不担心密钥的情况下妥协.良好的代码审查和发布控制对于维护安全性至关重要.

您最好避免使用MySQL的内置加密功能:这些记录到日志中的复制,速度慢,或查询日志,并可以在PROCESSLIST是可见的 - 所以有访问日志和PROCESSLIST人有权访问数据.


Cod*_*y C 6

为什么不一般限制对数据库或表的访问.这看起来容易得多.如果开发人员有权查询生产,则无法阻止他们在一天结束时看到数据b/c,UI必须解密/显示数据.

根据我的经验,实现"开发人员根本看不到生产数据"所需的工作量是巨大的,几乎是不可能的.在一天结束时,如果开发人员必须支持该系统,那将很难实现.如果您必须调试生产问题,那么就不可能不让一些开发人员访问生产数据.另一种方法是创建大量的支持,备份,测试数据等级别和组.

它可以工作,但它并不像企业主想象的那么容易.