【问题标题】:How to use postgres pgcrypto with Nodejs and Sequelize?如何将 postgres pgcrypto 与 Nodejs 和 Sequelize 一起使用?
【发布时间】:2022-01-26 23:10:18
【问题描述】:
  1. 如何在 postgres 中使用带有 pgcrypto 插件的 sequelize。
  2. 如何使用 sequelize 加密和解密列的值
  3. 如何使用 nodejs 和 sequelize 使用 PGP_SYM_ENCRYPT 和 PGP_SYM_DECRYPT

【问题讨论】:

    标签: node.js postgresql encryption sequelize.js pgcrypto


    【解决方案1】:

    我将从您需要遵循的步骤开始介绍:)

    将 pgcrypto 插件添加到您正在使用的架构中的步骤

    1. 登录到 postgres 并转到使用的架构如果您有 pgadmin 正在运行...转到架构...右键单击...单击 Query Tool

    2. 在此处运行此查询以检查您的 postgres 中的可用插件 -

    select * from pg_available_extensions
    

    以上命令将帮助您了解 Postgres 中已有的所有插件。滚动并检查pgcrypto 是否可用。如果是...继续第 3 点,否则请先下载 pgcrypto 插件。

    1. 运行另一个查询,这将帮助您了解您在第 (1) 点中选择的 Schema 中有哪些插件 -
    select * from pg_extension
    

    以上命令将帮助您了解您选择的架构支持的所有管道。检查pgcrypto是否存在,如果是-跳到第(5)点,如果没有-继续第(4)点

    1. 运行此命令以将 pgcrypto 插件从扩展程序带到当前支持 Schema 的扩展程序 -
    create extension pgcrypto
    

    您可以在第 (3) 点验证运行 cmd 以检查 pgcrypto 是否已成功拉入当前 Schema 支持的插件。


    现在我们准备好在我们的 Nodejs 应用程序中使用 pgcrypto

    1. 对于您要加密的查询,请使用sequelize 对其进行加密。使用下面的代码将该列的文本值修改为加密值。

      query: sequelize.fn("PGP_SYM_ENCRYPT", "data_to_encrypt", 
      "secret_key")
      
    2. 当您使用 create 将数据保存到数据库时,数据将使用 PGP_SYM_ENCRYPT 加密,这是 pgcrypto 插件提供的一种方法。

    3. 现在要查询或解密这些值,您可以在 postgres 中运行此查询

    select PGP_SYM_DECRYPT(colum_name::bytea, 'secret_key') FROM table where PGP_SYM_DECRYPT(column_name::bytea, 'secret_key' LIKE '%search_string%';
    
    1. 要解密 Node 应用程序中的值,请使用:
    sequelize.findAll({
      attribute: [
        [
          sequelize.fn(
            'PGP_SYM_DECRYPT',
            sequelize.cast(sequelize.col('column_name'), 'bytea'), 
            'secret_key'
          ), 
          "column_name"
        ]
      ]
    }).then(data => console.log(data))
    

    注意:要自动化第一部分(将扩展名添加到 Schema 中),您可以使用 sequelize raw query,这样您就不必每次都手动进行。

    CREATE EXTENSION IF NOT EXISTS pgcrypto;
    

    【讨论】:

      猜你喜欢
      • 2022-01-28
      • 2015-10-08
      • 2020-07-23
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 2017-08-23
      相关资源
      最近更新 更多