【发布时间】:2016-12-28 00:10:20
【问题描述】:
我有一个 ruby on rails 应用程序,用户可以在其中使用电子邮件地址进行注册。这些将是真正专业人士的电子邮件地址,出于隐私原因,我不能查看它们。假设我无法查看这些电子邮件地址。
一旦我使用选择查询,我需要一种方法来隐藏这些电子邮件,例如:
SELECT * FROM users;
在数据库上。 “用户”是包含电子邮件列的表。一旦我使用这个查询,我就能看到每个用户的所有电子邮件地址,这是有问题的。
这是我尝试的解决方案:
1) 我尝试使用:
update users set email = 'testmail+user'
一旦我进入 psql 数据库,它会将实际电子邮件设置为虚拟电子邮件。问题是每次我想将电子邮件设为虚拟电子邮件时都必须输入此行,如果我不输入此行,我仍然可以搜索实际电子邮件。
2) 我尝试使用数据匿名化 gem (https://github.com/sunitparekh/data-anonymization),但这依赖于 ruby 脚本,我不太确定每次用户注册时如何运行此脚本。
3) 我按照 tidus gem (https://github.com/Barzahlen/tidus) 的说明进行操作,据说它可以匿名选择列的内容,但是一旦我进入 psql 数据库并进行了选择查询,电子邮件就没有改变。
4) 我尝试创建另一个不是超级用户的用户并撤销 SELECT 权限,但是我无权访问该用户的任何其他列。
总之,我需要一种在注册用户输入电子邮件后立即将其匿名化的方法,或者一种防止自己查看这些个人电子邮件地址的方法。
您可以假设我仍想查看其他列(即名字、姓氏)。
【问题讨论】:
-
这闻起来很像家庭作业。成为数据库超级用户的整个想法是您可以查看数据库中的所有内容。如果您想阻止任何人读取电子邮件地址,则需要使用密码派生函数(如 bcrypt、scrypt 或 PBKDF2)对其进行哈希处理。但是,一旦散列,您只能验证用户是否输入了正确的电子邮件地址。您还可以在插入数据之前对其进行加密。但是,用户必须输入密码才能解密记录。
标签: ruby-on-rails database postgresql email