Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

663
Vistas
¿Cómo uso pgcrypto con knex dentro de una declaración .select? (Base de datos Postgres)

Actualmente estoy usando knex para conectar mi servidor node.js a una base de datos de postgres y comencé a usar pgcrypto para cifrar algunos de mis datos. Llegué un poco tarde al juego con el cifrado de mis datos, por lo que tengo varias consultas que tendré que actualizar, y estoy buscando la forma más eficiente no solo de intercambiar mis consultas, sino también de consultar la base de datos. Cuando trato de implementar PGP_SYM_DECRYPT directamente dentro de la consulta knex.select() , aparece un error que dice que no se puede encontrar al usuario. Sin embargo, si uso la consulta knex.raw() , puedo hacer que funcione. ¿Hay alguna forma de usar PGG_SYM_DECRYPT dentro de la consulta .select() , o tal vez una forma de pasar la clave secreta junto con la consulta para que descifre automáticamente las columnas encriptadas?

Ejemplo de código de trabajo:

 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` ) );

Ejemplo de código DESEADO (o alguna otra variante):

 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" );

¿Alguna idea?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Puede agregar un fragmento sin procesar dentro de una selección como esta:

 .select( "u.id", "u.uuid", "u.mobile_number", "u.email", "u.first_name", "u.last_name", "u.department", knex.raw("PGP_SYM_DECRYPT(??::bytea, ?) as note", ['u.note', process.env.SECRET_KEY]), "u.disabled", "su.role" );

¿En sintaxis cruda ?? es reemplazo de identificador y ? es un enlace de valor para que la clave secreta se pase al controlador de forma segura como enlace sin intentar interpolarlo directamente a la cadena SQL.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda