gpt4 book ai didi

sql - 以正交方式向数据库查询添加条件

转载 作者:太空狗 更新时间:2023-10-30 01:57:46 26 4
gpt4 key购买 nike

手头的问题是如何以“正交方式”向预先存在的应用程序发出的 SQL 数据库查询添加条件,这意味着该操作应该以应用程序不需要关心的方式完成。如果您好奇的话,实际的问题涉及添加与 Multi-Tenancy 相关的标准,这些标准应该阻止租户获取彼此的数据。实际上,这意味着向 WHERE 子句添加额外条件(可能在查询中的多个位置)。

我的团队一直在研究一种解决方案,该解决方案涉及在将查询发送到 DBMS 之前“拦截”和解析查询。正如你们中的许多人可能知道的那样,SQL 解析并不是最容易实现的东西,尤其是当您需要支持大多数主要 DBMS 的语法扩展时。

另一个被抛出的想法是可以让 DBMS 自己处理条件注入(inject)。毕竟,它是一个完全了解查询语法的元素,并且(希望)在执行查询语法之前对其进行修改应该没有问题。那么问题就是弄清楚如何将 Multi-Tenancy 元数据传递给 DBMS。这完全可行吗?这是个坏主意吗?

关于如何解决这个问题还有其他想法吗?

感谢您的宝贵时间。

最佳答案

通过 View 工作会不会更容易,每个 View 都限于适用用户的数据。预先编写的 SQL 可以使用 View 的基本名称,然后在代码中修改该名称以向 View 名称添加前缀或后缀以提供用户 View 。

示例:

tennant_data 具有名为 tennant_data_user1tennant_data_user2 的 View 。您的 SQL 是 select col1, col2 from tennant_data_{view}您的程序代码获取当前用户(user1 或 user2)的名称,并在 SQL 中将 {view} 替换为他们的 userid,然后执行 SQL。

根据您使用的 DBMS(和语言?),您可能会授予访问权限,以便 user1 只能使用 xxx_user1 View 等,因此他们不可能访问错误的数据查看或直接访问基础表。

关于sql - 以正交方式向数据库查询添加条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23679861/

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