希望允许客户端应用程序对我们的数据库执行SQL查询。
查询将是对数据的请求,客户端永远不能修改数据。
是否有办法允许客户端发送SQL语句,然后将其屏蔽以进行恶意注入,然后将其传递到数据库中?
我们正在使用针对PostgreSQL数据库的Python的SQLAlchemy库。
谢谢!
答案 0 :(得分:4)
比尝试解释恶意查询更容易的选择是创建具有只读权限的db用户。然后,您的最终用户将使用该帐户运行SELECT查询。您不必担心恶意插入和删除,因为不允许“写入”查询。您还可以进一步修改权限,以禁止访问您不希望客户看到的数据等。
有关创建“只读”用户的一些信息,请参阅此SO question and answers。
答案 1 :(得分:1)
使用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)
有关text
方法的完整报道,请参阅sqlalchemy docs。
但即使DBA块从用户创建和编写角色,保护您的应用程序不受用户定义的sql语句的影响也非常困难。 考虑在开始之前阅读this blog post。
答案 2 :(得分:0)
您始终可以通过第二个只接受读取连接的数据库来改进您的安全系统。
https://www.postgresql.org/docs/9.2/static/high-availability.html
此策略允许您在读取模式下扩展数据库两次,三次或四次。