它在 RDS 代理的文档中说,当应用程序使用准备好的语句时,连接会自动固定:
Prepared statements cause the proxy to pin the session. This rule applies whether the prepared statement uses SQL text or the binary protocol. (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-proxy.html)
在使用 RDS 代理时,我应该如何保护我的应用程序免受 SQL 注入(inject)?
我正在使用此服务在我的微服务中更快地与数据库的连接,因此我希望重用连接。
最佳答案
我有同样的问题。我将 RDS 代理用于 Postgresql RDS。为了连接到 RDS 代理,我使用了 gem 'pg'(ruby 上的项目)。
起初,我在建立连接时禁用了对数据库的一些初始查询(如设置时区等)。
以及准备好的语句的问题。如果 rds 代理看到如下查询,则会锁定 session :
SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
因此,如果 rds 代理看到该查询, session 将被固定。但是,如果您以这种方式进行查询, session 将不会被固定:SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
所以当我稍微改变我的库代码时,我解决了这个问题。如果您为 rds 代理启用日志(高级配置),它也会真正有帮助。启用后,您可以看到为什么您的 session 被固定在 Cloud Watch Metrics 中。
关于amazon-web-services - 使用 AWS RDS 代理时准备好的语句的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62945842/