我目前正在使用knex
将我的 node.js 服务器连接到postgres
数据库,并且我已经开始使用pgcrypto
它来加密我的一些数据。我在加密数据方面有点晚了,所以我有几个查询需要更新,并且正在寻找最有效的方法,不仅可以交换我的查询,还可以实际查询数据库。当我尝试PGP_SYM_DECRYPT
直接在knex.select()
查询中实现时,我收到一条错误消息,提示找不到用户。但是,如果我使用knex.raw()
查询,我可以让它工作。有什么方法可以使用查询PGG_SYM_DECRYPT
内部.select()
,或者可能有一种方法可以在查询旁边传递密钥,以便自动解密任何加密列?
示例工作代码:
const user = await knex("n_user AS u")
.where({
"u.uuid": uuid,
"su.site_id": site.id
})
.first()
.join("site_has_user AS su", { "su.user_id": "u.id" })
.select(
"u.id",
"u.uuid",
"u.mobile_number",
"u.email",
"u.first_name",
"u.last_name",
"u.department",
// "u.note", the note is the encrypted data
"u.disabled",
"su.role"
)
.select(
knex.raw(
`PGP_SYM_DECRYPT(u.note::bytea, '${process.env.SECRET_KEY}') as note`
)
);
示例 DESIRED 代码(或其他一些变体):
const user = await knex("n_user AS u")
.where({
"u.uuid": uuid,
"su.site_id": site.id
})
.first()
.join("site_has_user AS su", { "su.user_id": "u.id" })
.select(
"u.id",
"u.uuid",
"u.mobile_number",
"u.email",
"u.first_name",
"u.last_name",
"u.department",
`PGP_SYM_DECRYPT(u.note::bytea, '${process.env.SECRET_KEY}') as note`,
"u.disabled",
"su.role"
);
有什么想法吗?