我有
attr_accessible :access_token
attr_encrypted :access_token, key: ENV['ENCRYPTION_KEY']
我正在做一些User.find_by_access_token
,所以我想在数据库中索引该字段。
但是,不存在 access_token
,只有 encrypted_access_token
。
索引此字段与索引任何其他字段的作用相同吗?
最佳答案
保存加密数据的全部目的是防止显示明文。显然你无法搜索它,否则整个概念就会有缺陷。
您可以使用普通索引来索引加密 token ,并使用加密 token 搜索表 - 显然您需要加密 key 。
CREATE INDEX tbl_encrypted_access_token_idx ON tbl(encrypted_access_token);
SELECT *
FROM tbl
WHERE encrypted_access_token = <encrypted_token>;
如果您的所有 token 都可以使用 IMMUTABLE
Postgres 函数解密,您可以使用 index on an expression :
CREATE INDEX tbl_decrypted_token_idx
ON tbl(decrypt_func(encrypted_access_token));
SELECT *
FROM tbl
WHERE decrypt_func(encrypted_access_token) = <access_token>;
请注意,表达式必须与索引中的表达式匹配才能使索引有用。
但这会造成多层面的安全隐患。
关于ruby-on-rails - 如何在 attr_encrypted 数据库字段上添加索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874823/