postgresql:阻止超级用户查看数据库中的电子邮件列

问题描述:

我有一个Ruby应用程序,用户可以通过电子邮件地址注册。这些将是真实专业人士的电子邮件地址,我不能因隐私原因查看它们。假设我无法查看这些电子邮件地址。postgresql:阻止超级用户查看数据库中的电子邮件列

我需要一种方法来隐藏这些电子邮件有一次我用一个选择查询,如:

SELECT * FROM users; 

在数据库上。 '用户'是包含电子邮件列的表格。一旦我使用这个查询,我就可以看到每个用户的所有电子邮件地址,这是有问题的。

这里是我尝试的解决方案:

1)我尝试使用:

update users set email = 'testmail+user' 

一旦我进入了PSQL数据库,这将实际的电子邮件设置成一个虚拟的电子邮件。问题是,我必须每隔一段时间输入一行这个行,我想让一封电子邮件成为一封虚拟邮件,如果我不输入此行,我仍然可以搜索实际的邮件。我试过使用数据匿名化宝石(https://github.com/sunitparekh/data-anonymization),但这依赖于ruby脚本,我不太确定每次用户注册时如何运行此脚本。 3)我遵循了tidus gem(https://github.com/Barzahlen/tidus)的说明,它假定匿名化选择列的内容,但是一旦我进入psql数据库并且我做出了我的选择查询,电子邮件就不会改变。

4)我试着让另一个不是超级用户的用户和撤销SELECT权限,但是我没有访问用户的任何其他列。

总之,我需要一种方法,在注册用户输入邮件后立即对邮件进行匿名处理,或者防止自己查看这些个人电子邮件地址。

你可以假设我仍然想查看其他列(即名字,姓氏)。

+1

这味道可疑的家庭作业。作为数据库超级用户的全部想法是,您可以查看数据库中的所有内容。如果您想阻止任何人阅读电子邮件地址,则需要使用密码派生函数(如bcrypt,scrypt或PBKDF2)对其进行哈希处理。但是,一旦散列,您只能验证用户是否输入了正确的电子邮件地址。在插入数据之前,您还可以加密数据。但是,用户必须输入密码才能解密记录。 – Doug

很简单,在您不是超级用户的计算机上加密该值。

这意味着在您访问权限有限的应用程序服务器上或用户计算机上。

没有任何其他的方式来做到这一点

你为什么要记录的电子邮件地址,如果你永远也不想看见/使用其实际价值?