Dice en la documentación del proxy RDS que la conexión se fija automáticamente cuando la aplicación usa una declaración preparada:
Las declaraciones preparadas hacen que el proxy fije la sesión. Esta regla se aplica ya sea que la declaración preparada use texto SQL o el protocolo binario. ( https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-proxy.html )
¿Cómo se supone que debo proteger mi aplicación contra las inyecciones de SQL mientras uso el proxy RDS? Estoy usando este servicio para hacer que la conexión con la base de datos sea más rápida en mis microservicios, por lo que quiero que se reutilice la conexión.
Yo tuve el mismo problema. Usé RDS Proxy para Postgresql RDS. Para conectarme a RDS Proxy, utilicé la gema 'pg' (proyecto en ruby).
Al principio, deshabilité algunas consultas iniciales a la base de datos cuando se estableció la conexión (como establecer la zona horaria, etc.).
Y el problema con una declaración preparada. El proxy rds fija la sesión si ve una consulta como la siguiente:
SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]Entonces, si el proxy rds ve esa consulta, la sesión se fijará. Pero si realiza la consulta de esa manera, la sesión no se anclará:
SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1Entonces, cuando cambio un poco el código de mi biblioteca, resolví este problema. Y también será de gran ayuda si habilita los registros para el proxy rds (Configuración avanzada). Después de habilitar, puede ver por qué su sesión está anclada en Cloud Watch Metrics.
Traté de agregar ?binary_parameters=yes o &binary_parameters=yes a la cadena de conexión.
es decir
postgres://user:password@rds-proxy.proxy-dgi349gjv95j.us-east-1.rds.amazonaws.com:5432/db_name?binary_parameters=yes y vi una caída en las declaraciones prepared_statements ancladas.
Todavía no he seguido esa solución porque todavía estoy investigando si el proxy RDS sigue siendo la mejor opción para nuestro caso de uso.