将 pgcrypto 插件添加到您正在使用的架构中的步骤
登录到 postgres 并转到所使用的架构 或者 如果您正在运行
pgadmin
...转到架构...右键单击...单击 Query Tool
。
运行此查询以检查 postgres 中的可用插件 -
select * from pg_available_extensions
上面的命令将帮助您了解 Postgres 中已有的所有插件。滚动并检查
是否可用。如果是...继续第三点,否则先下载 pgcrypto 插件。pgcrypto
select * from pg_extension
以上命令将帮助您了解您选择的架构支持的所有连接。检查
是否存在,如果是-跳到第(5)点,如果没有-继续到第(4)点pgcrypto
pgcrypto
插件从扩展引入当前架构支持的扩展 -create extension pgcrypto
您可以在第 (3) 点验证运行 cmd,以检查 pgcrypto 是否已成功拉取到当前架构支持的 pluings。
现在我们准备在 Nodejs 应用程序中使用 pgcrypto
对于要加密的查询,请使用
sequelize
对其进行加密。使用下面的代码将该列的文本值修改为加密值。
query: sequelize.fn("PGP_SYM_ENCRYPT", "data_to_encrypt",
"secret_key")
当您使用
create
将数据保存到数据库时 - 数据将使用 PGP_SYM_ENCRYPT 进行加密,这是 pgcrypto 插件提供的方法。
要立即查询或解密值,您可以在 postgres 中运行此查询
select PGP_SYM_DECRYPT(colum_name::bytea, 'secret_key') FROM table where PGP_SYM_DECRYPT(column_name::bytea, 'secret_key' LIKE '%search_string%';
sequelize.findAll({
attribute: [
[
sequelize.fn(
'PGP_SYM_DECRYPT',
sequelize.cast(sequelize.col('column_name'), 'bytea'),
'secret_key'
),
"column_name"
]
]
}).then(data => console.log(data))
注意: 要自动化第一部分(扩展到架构中),您可以使用
sequelize raw query
,这样您就不必每次需要时手动执行。
CREATE EXTENSION IF NOT EXISTS pgcrypto;
我没有足够的声誉来评论已接受的答案,因此在这里发帖是为了帮助那些可能尝试并因为一些很小的事情而放弃的人。
接受的答案有一个拼写错误,这将使解决方案无法工作。
第 4 步 应该有“attributes”而不是“attribute”
sequelize.findAll({
attributes: [
[
sequelize.fn(
'PGP_SYM_DECRYPT',
sequelize.cast(sequelize.col('column_name'), 'bytea'),
'secret_key'
),
"column_name"
]
]
}).then(data => console.log(data))