今天遇到个需求,需要加密数据库(MySQL)表中某些字段,比如手机号,该怎么做?

2019-05-13 09:44:26 +08:00
 zealinux

大家的生产环境中的数据库表也都是加密 手机号吗?

第一感觉没有这个必要, 加密手机号的操作应该是在应用层来做。

或者问,要实现这样的数据库层面做,需要怎么做?

(现在用的 Azure 上的 MySQL 服务)

11947 次点击
所在节点    MySQL
30 条回复
tt67wq
2019-05-13 09:48:09 +08:00
在数据库加密好点吧,如果被脱裤了起码拿不到手机号
用个对称加密就行
xuanbg
2019-05-13 09:54:01 +08:00
敏感数据集中起来搞一个对象,然后序列化成 JSON 再对称加密后存储。要检索的话另外若干个字段分别存 MD5 就好了了。
wweir
2019-05-13 09:55:49 +08:00
应用层加密,数据库直接存加密后的数据
airfling
2019-05-13 10:00:23 +08:00
对称加密就可以了,我一般都是在程序中加密解密,然后保存到数据库中的是加密后的字段
xy2401
2019-05-13 10:50:04 +08:00
用视图可以做不?
julyclyde
2019-05-13 10:55:59 +08:00
手机号做 hash 无意义
kiwier
2019-05-13 10:58:07 +08:00
md5 已不安全
liuzuo
2019-05-13 11:05:17 +08:00
HASH 一列+加密一列。
HASH 用来查找,只能精确查找。
加密用来反解。

但如果是要求的列多或者服务多,是不是需要考虑 agent 模式。
dilu
2019-05-13 11:10:44 +08:00
我们是这样实现的 数据库存两个字段,一个加密后的,一个类似 salt 的东西,在 model 层封装好。

然后有个单独的加密解密服务器专门做这个。再麻烦也得做,这种对我们公司来说是强需求。
Navee
2019-05-13 11:10:55 +08:00
ihacku
2019-05-13 11:17:36 +08:00
37Y37
2019-05-13 11:17:59 +08:00
应用层做,RSA 加密,包括连数据库的账号密码,以及数据库中的敏感数据
chenset
2019-05-13 11:27:00 +08:00
@Navee 我的库也是采用这种 aes 对称加密方式, 效果不错. 应用层和数据库层都有相同的实现, 非常方便. ORM 读写支持 get/set 过滤, 自动加解密. 爽的不行.
reid2017
2019-05-13 11:33:56 +08:00
@chenset 请教 ORM 如何自动加解密
mooncakejs
2019-05-13 11:39:20 +08:00
@reid2017 估计就是 getter 方法
chenset
2019-05-13 11:44:40 +08:00
@reid2017 ORM 一般都有字段过滤器 /拦截器 /getter setter. 除了写 orm where 条件之类的场景需要手动加解密, 其他都自动了
chenset
2019-05-13 11:46:22 +08:00
这个加密在过国.家等级保护的是必须的.
jeffdeng
2019-05-13 12:04:33 +08:00
@reid2017 扩展 mybatis 的 BaseTypeHandler 类
enaxm
2019-05-13 14:10:46 +08:00
@julyclyde
表示接过的联通和移动的接口都是 hash 加密的...
jswh
2019-05-13 14:23:30 +08:00
用不对成加密之后寸数据库,密钥是通过内部接口发放的,需要向公司申请,只能再生产环境拿到。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/563513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX