【发布时间】:2021-04-11 14:09:27
【问题描述】:
我目前正在使用knex 将我的node.js 服务器连接到postgres 数据库,并且我已经开始使用pgcrypto 来加密我的一些数据。我在加密数据方面有点晚了,所以我有几个查询需要更新,并且正在寻找最有效的方法,不仅可以交换我的查询,还可以实际查询数据库。当我尝试直接在knex.select() 查询中实现PGP_SYM_DECRYPT 时,我收到一条错误消息,提示找不到用户。但是,如果我使用 knex.raw() 查询,我可以让它工作。有什么方法可以在.select() 查询中使用PGG_SYM_DECRYPT,或者可以在查询旁边传递密钥以便自动解密任何加密列?
示例工作代码:
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"
);
有什么想法吗?
【问题讨论】:
标签: node.js postgresql knex.js pgcrypto