首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据应用程序用户属性限制或过滤数据库访问

如何根据应用程序用户属性限制或过滤数据库访问
EN

Stack Overflow用户
提问于 2009-01-11 21:08:49
回答 4查看 2.2K关注 0票数 5

我现在已经想了太多,显然没有正确的解决方案。这可能是一个真正的树木换木材的情况,所以我需要stackoverflow的帮助。

我正在尝试在区域基础上强制执行数据库过滤。我的系统有不同的用户,每个用户都被分配到一个区域办公室。我只希望用户能够看到与他们的区域办公室相关的数据。

简单地说,我的应用程序是: Java App -> JPA (hibernate) -> MySQL

该数据库包含来自所有区域的对象,但我只希望用户能够操作来自他们自己区域的对象。我想过以下几种方法:

1)修改所有数据库查询,使其读取类似select * from tablex where region="myregion“的内容。这真是太恶心了。它在JPA中不能很好地工作,例如entitymanager.find()方法只接受主键。当然,我可以转到本机,但我只需错过一条select语句,我的安全性就会失败

2)使用mysql代理对结果进行过滤。有点古怪,但mysql代理只看到原始调用,并不知道它应该如何过滤它们(即发出此请求的用户属于哪个区域)。好吧,我可以为每个地区启动一个代理,但它开始变得有点混乱。

3)对每个区域使用单独的模式。是的,很简单,我使用spring,这样我就可以使用RoutingDataSource通过正确的数据源(每个模式一个数据源)路由请求。当然,现在的问题是,我想要按区域和其他类别进行过滤。哦。

4) ACL -对此不是很确定。如果a执行了select * from tablex;它会悄悄地过滤掉我没有访问权限的对象,还是会抛出大量访问异常?

但是我是不是想得太多了?这似乎是一个非常常见的问题。一定有什么简单的解决方案,我只是太傻了,看不出来。我确信它将是接近/或在数据库中的东西,因为你想要过滤尽可能接近源代码,但是什么呢?

不希望被填鸭式喂养-任何链接,关键字,想法,商业/开源产品建议将非常感谢!谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-12 08:49:51

在过去的几周里,我一直在实现类似的东西(REALbasic与MySQL对话),用于对会计软件包进行分层的多公司扩展。

有大量的现有代码组成了SQL语句,所以我们不得不接受它,并只做了大量的审计,以确保每个表中都适当地包含了限制。一个陷阱是相关的查找,其中查找表通常仅与主表组合使用,但对于某些维护GUI将直接加载查找表本身。

有泄露隐含信息的危险,例如透露Acme色情明星是公司某个部门的客户;-)

对于这一部分,唯一的解决方案是非常仔细地构建DB图,以显示所有隐含的关系和大量的审计和令人讨厌的源代码,并仔细注释以指示不需要额外限制的区域。

我提出的一种模式是,使用由全局CurrentEntityForRole("blah")函数提供的任意entityID,而不是显式的region=currentRegionVar类型搜索。

这种抽象允许共享一些数据以及实现表示其他限制边界的伪实体。

我对Java和Spring知之甚少,还不能说清楚,但是有没有一种方法可以使用视图来提供单键查找,其中视图受区域过滤器的限制?

提供聚合和可能的数据共享的愿望是我们没有走单独的数据库路线的原因。

票数 1
EN

Stack Overflow用户

发布于 2009-01-12 03:34:59

问得好。

似乎#1是最好的,因为它是最灵活的。

Region恰好是您今天要过滤的内容,但明天可能是region +部门+头发的颜色。

如果您开始对数据进行过多的分割,那么您似乎将不得不更加努力地工作,以便将所有这些数据粘合在一起,以便进行报告。

票数 1
EN

Stack Overflow用户

发布于 2009-02-06 13:03:15

我也有同样的问题。很难相信这种常见的任务(基于用户配置文件过滤模型实体列表)没有“标准”方法、模式或最佳实践来完成。

我找到了PostgreSQL模块pgacl。基本上,您可以像往常一样执行查询,然后添加一个acl_access()谓词来充当过滤器。

也许MySQL也有类似的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/433707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档