gpt4 book ai didi

sql - 用户生成的 SQL 查询

转载 作者:行者123 更新时间:2023-12-04 02:50:39 24 4
gpt4 key购买 nike

我正在使用 Ruby on Rails 开发数据仓库,我应该允许用户在应用程序数据库上执行任意 SELECT 查询。

我知道这是你通常不应该做的,但它是我的客户实际需要的接口(interface)(我想不出用户可能想要做的所有可能的查询并将它们转换为 ActiveRecord 查询)。可能有复杂的连接和子查询等等。我宁愿这样做(将其集成到我的应用程序中)也不愿让他们通过 pgAdmin 访问数据库(我正在使用 postgresql)。

我的问题是:这样做最安全的方法是什么?我应该能够转义任何内容,例如 INSERT、UPDATE、DROP TABLE 等...

我正在考虑获取查询字符串并清理这些“危险”词,然后使用 ActiveRecord::Base.connection.execute(sanitized_sql_string)。这是一种合理的方法吗?

最佳答案

最安全的方法是让 Postgres 为您处理此安全性。创建新用户:

CREATE USER Reader; -- Your Rails app should logon with this user

然后,显式授予对您希望他们能够查询的对象的SELECT权限:

GRANT INSERT ON TableFoo TO Reader;
GRANT INSERT ON TableBar TO Reader;

然后,他们将能够从这两个表运行任意 SELECT 查询,但如果他们尝试 INSERT,他们将得到 Permission denied . 然后您可以捕获这些安全异常并在您的 UI 中适本地处理它们。

关于sql - 用户生成的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17821493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com