【问题标题】:postgresql: prevent superuser from viewing an email column in the databasepostgresql:防止超级用户查看数据库中的电子邮件列
【发布时间】: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


【解决方案1】:

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

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

没有其他方法可以做到这一点

如果您不想看到/使用电子邮件地址的真正价值,为什么还要记录它们?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多