【发布时间】:2025-11-25 00:55:02
【问题描述】:
我想提供对存储在多个表中的数据的受控访问。访问是基于与用户关联的某些运行时属性决定的。我正在寻找一种可扩展、高性能且高度安全的解决方案。
插图:
有一个框架级模块存储多个其他模块的授权/访问相关数据。然后有n个模块管理它们自己的生命周期对象。例如模块 Test1 有 1000 个实例,这些实例被创建并存储在其基表中。作为框架解决方案,我想保护用户对这些数据的访问,因此我创建了一个特权概念,并将他们对用户的映射存储在我自己的表中。现在为了提供对数据的受控访问,我的目标是只向用户显示他/她有权访问的对象。
我的想法:
我使用 oracle 数据库,目前我们正在使用 VPD(虚拟私有数据库),所以在这里我们在上述模块的每个基表上添加一个策略,它首先从权限评估当前登录用户的访问权限给他,然后将该数据附加到其他模块的每个基表的所有查询中(默认情况下由数据库本身)。
优点:非常高效且高度安全的解决方案。
缺点:如果基表和我们当前的表在两个不同的模式中,则无法工作。可能可以克服同一数据库实例中的两个不同架构,但我的一些集成器系统可能完全位于不同的数据库中。在java层设计:
我们通过 JPA 数据源连接到我们的数据库。所以我可以写一个薄层,基本上是一个对 EntityManager 的包装器,然后复制 VPD 为我所做的,首先从我的表中获取与访问相关的数据,然后在我的积分器的表上使用受监控的查询,然后可以缓存数据到缓存服务器(优化)。
缺点:我想在生产系统中使用它,因此想在第一时间完成它。想知道行业中已经实施的任何模式。
【问题讨论】:
标签: database security jpa distributed