gpt4 book ai didi

ruby-on-rails - 如何有效地搜索加密字段?

转载 作者:行者123 更新时间:2023-12-02 13:59:31 26 4
gpt4 key购买 nike

我正在使用 Ruby on Rails 4.1、Ransack 和 attr_encrypted。我的数据库中存储有敏感数据,我想使用 gem attr_encrypted 来保护它。

正如我所料,使用 Ransack 搜索加密测试数据时得到的结果为零。

我尝试了以下解决方案,但它似乎对我不起作用。我的印象是加载函数用于返回解密的值。

报告 Controller

def index
@report_list = Report.all.load
@q = @report_list.search(params[:q])
@reports = @q.result(distinct: true).order('created_at DESC')
end

有人有搜索加密数据的经验并可以帮助我生成可行的解决方案吗?

最佳答案

load 将导致 Active Record Collection 执行查询并检索与您的查询匹配的结果(除了运行 after_create 回调之外,我相信这就是您期望的解密发生的地方)。

def index
#returns all records in DB
@report_list = Report.all.load


#I'm surprised these aren't throwing undefined method search of Array (or something similar)
@q = @report_list.search(params[:q])
@reports = @q.result(distinct: true).order('created_at DESC')
end

我想在此之前,我通常手动执行此操作,并且不熟悉 attr_encrypted 或 Ransack,但我相信这些概念足够通用,它们可以应用于任何设置。所以,对于你的问题,有两种可能性。

如果您可以搜索精确值:

Model.where(encrypted_field: encrypt(params[:value])).first

其中 encrypt 是加密并返回传递的字符串的方法。

其次(也是痛苦的)

Model.all.delete_if{|m| !m.encrypted_field.include?(params[:value]) }

这将真正提取、解密并扫描数据库中的每个条目。

我强烈建议不要这样做,但你需要做你需要做的事情。

如果您绝对需要对信息进行加密,但仍然需要能够进行这样的搜索。我强烈建议在您的模型中添加某种标签。这将允许您删除敏感信息,但仍按某些属性进行搜索。

关于ruby-on-rails - 如何有效地搜索加密字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24845224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com