3

希望允许客户端应用程序对我们的数据库执行 SQL 查询。

查询将是对数据的请求,客户端永远不能修改数据。

有没有办法让客户端发送一条 SQL 语句,然后筛选它是否有恶意注入,然后通过数据库传递它?

我们正在针对 PostgreSQL 数据库使用 Python 的 SQLAlchemy 库。

谢谢!

4

3 回答 3

4

比尝试解释恶意查询更简单的选择是创建具有只读权限的 db 用户。然后,您的最终用户将使用该帐户运行 SELECT 查询。您无需担心恶意插入和删除,因为不允许“写入”查询。您还可以进一步修改权限,以不允许访问您不希望客户看到的数据等。

有关创建“只读”用户的一些信息,请参阅此SO 问题和答案。

于 2013-01-13T16:42:24.100 回答
1

执行sql查询时使用prepared statement,使用sqlalchemy.sql.expression.text方法

from sqlalchemy.sql.expression import text

t = text("SELECT * FROM users WHERE id=:user_id")
result = connection.execute(t, user_id=12)

有关方法的完整介绍,请参阅sqlalchemy 文档text

但是即使 DBA 阻止从用户创建和写入角色,保护您的应用程序免受用户定义的 sql 语句的影响也是非常困难的。考虑在开始之前阅读这篇博文

于 2013-01-13T17:03:00.557 回答
0

您始终可以在从属模式下使用仅接受读取连接的第二个数据库来改进您的安全系统。

https://www.postgresql.org/docs/9.2/static/high-availability.html

此策略允许您将数据库以读取模式扩展两、三或四倍。

于 2018-05-24T11:27:03.167 回答