将 PGP_SYM_ENCRYPT 函数与 node-postgres 一起使用 (fastify)

Use PGP_SYM_ENCRYPT function with node-postgres (fastify)

提问人:Geeogee 提问时间:7/13/2023 最后编辑:Geeogee 更新时间:7/13/2023 访问量:70

问:

我正在尝试使用 PGP_SYM_ENCRYPT 函数使用 Fastify 将加密数据保存在 PostgreSQL 数据库中。

使用此命令
添加了 pgcrypto 扩展 CREATE EXTENSION IF NOT EXISTS pgcrypto;

enter image description here

然后,我检查了扩展是否已成功添加到我的数据库中。
SELECT * FROM pg_extension 其中 EXTNAME = 'PGCRYPTO' 且 EXTVERSION 不为 NULL;

enter image description here

在我的application.ts中,我使用以下连接选项连接到postgres db:

 try {
    
      const connectionObject = {
        database: config.db_name,
        host: config.db_url,
        user: config.db_user,
        password: config.db_pass,
        port: 5432,
        pg: pg
      }
    
      await this.server.register(require('@fastify/postgres'), connectionObject)
      await this.server.pg.query('SELECT NOW()');
    
      console.log('DATABASE CONNECTED')
      
    } catch(error){
    
      console.error("CONNECTION ERROR", error);
    }

    await this.server.ready()

数据库正在连接,没有任何问题。然后,在我的 route.ts 中,我有一个 POST 请求,该请求从表单中获取一些数据,我尝试插入带有加密列的数据,如下所示:

server.post(
  "/api/v1/api-name", 
  async function(request: any, reply: any) {
  
      try {

          ...
          // GET THE DATA
          // EXECUTING SOME CHECK ON DATA VALIDITY
          ...


          await server.pg.query(`
              INSERT INTO schema_name.table_name (data1, data2, data3, data3, data5, data6)
              VALUES ($1, $2, $3, $4, $5, PGP_SYM_ENCRYPT($6 ::text, $7 ::text))
          `, [data1, data2, data3, data4, data5, data6, config.secretKey]);

          return reply.code(201).send({
              statusCode: 202
          })

      } catch(error: any) {

          return reply.code(500).send({
              statusCode: 500,
              message: error.message
          })
      }
  }
);

但是当我执行POST请求函数pgp_sym_encrypt(text,text)不存在时收到此错误

直接从 dbeaver 执行查询,插入数据并加密列

PostgreSQL 加密 fastify node-postgres

评论

0赞 jjanes 7/13/2023
直接在 dbeaver 上执行的确切命令是什么?
0赞 Geeogee 7/13/2023
@jjanesINSERT INTO schema_name.table_name (name, lastname, birthdate, birthplace, residence, fiscal_code) VALUES ('name', 'lastname', NOW(), 'birthplace', 'residence', PGP_SYM_ENCRYPT('XXXXXX00A00A000A', 'secret_key'))

答: 暂无答案