amazon-web-services - 使用 AWS RDS 代理时准备好的语句的替代方法

标签 amazon-web-services aws-lambda amazon-rds amazon-rds-proxy

它在 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/

相关文章:

amazon-rds - 使用最新引擎版本创建 RDS 数据库集群

amazon-web-services - 如何使用 Terraform 自动切换到 AWS RDS 中的新参数组?

amazon-web-services - AWS : DB Instance quota exceeded

amazon-web-services - 如何输出 IAM 角色并在另一个堆栈中使用它?

c# - 使用亚马逊AWS创建离线数据库

amazon-web-services - Amazon Lex "slots"用于字母数字值

node.js - putBotAlias 在 AWS LexModelBuildingService node.js 中不起作用

javascript - 尝试使用不同的解析器时,cb 不是函数

amazon-web-services - LetsEncrypt 未通过 AWS EKS 中的 Kubernetes 入口和负载均衡器进行验证

amazon-web-services - 如何禁用某个区域?