当前位置: 首页 > 面试题库 >

如何在Hibernate中在数据库级别限制用户访问

薛宜
2023-03-14
问题内容

应用程式

我需要实现一个可供不同用户使用的Web应用程序。每个用户在各种表上都有不同的特权,例如

  • 用户A可以从表中看到字段“名称”和“地址” Student
  • 用户B可以在表格中看到字段“名称”和“电话号码”,但看不到“地址” Student
  • 用户C可以查看和修改上述所有字段

我将在UI级别上进行一些操作以限制某些访问,例如,为无权修改条目的用户隐藏“编辑”按钮。但是,我认为我应该在较低级别上(也许在数据库级别上)来确保数据安全。

问题

我正在为我的应用程序使用Hibernate,JBoss,DB2和Struts。我认为我应该使用某种JBoss
LoginModule,它可以通过具有用户/密码/角色的数据库对用户进行身份验证(但我可能是错的(?))。我进行了一些研究,并提出了以下选择,但似乎没有一个适合我的情况。我认为这是多用户Web应用程序中非常常见的数据访问问题。有人可以指出我正确的方向吗?
先感谢您!

  1. hibernate.cfg.xmlJACC事件侦听器中使用’grant’标签。这可以在所有hibernate实体上设置“插入”,“更新”,“读取”权限。但是,如果我需要更好的控制该怎么办?我需要在某些字段而不是整个对象上设置权限。http://www.hibernate.org/hib_docs/v3/reference/zh-CN/html/objectstate-decl-security.html

  2. 限制每个ejb的getter / setter方法的权限。如果我正确理解这一点,则需要为每个用户配置文件手动配置每个bean,这对我来说似乎不现实。 EJB方法权限

  3. 编写DAO的代码以检查用户权限。滚动我自己的实用程序函数,该函数在每次调用特定的DAO方法时都会检查巨型权限表,以确定已登录的用户是否可以执行该操作。

  4. 在Hibernate中使用“拦截器”和“事件”。为每个类定义特定的“ onLoad”,“ onSaveorUpdate”等事件和拦截器。在这种情况下,我可以为各个字段指定权限级别吗?http://www.hibernate.org/hib_docs/v3/reference/zh-CN/html/objectstate-events.html

我可能在错误的树上吠叫。以上所有这些似乎都是劳动密集型的,不是很聪明。以上选项均未提供给我编程方式来在运行时更改用户权限,当管理员级别的用户希望在此应用中为其他用户提供更多控制权时,这将非常有用。

在这里进行数据访问控制的一种好方法是什么?


问题答案:
  1. 安全密钥添加到实体,创建权限表,并将用户与具有实体类型的许可以及具有角色的安全密钥链接。这样,您可以说出类似的话:Admin_role可以访问Student(实体类型)并进行读取(权限中的操作)和Write(操作),而Student_role可以为其自身和Read_permission访问Student_key。您可以通过将地址重构为实体并向其中添加安全密钥来解决该地址。

    1. 您的四号可能有一个封闭世界的假设,并说除非您可以担任用户的当前角色,否则将属性名与字典(实体+属性)哈希中的标记链接到flag,即封闭世界的假设默认情况下不允许读取。那么,您当然不会获得任何写权限等。

    2. 您可以在数据库中定义视图,并使用数据库身份验证系统为其分配权限。如果您能够自己编写代码,这可能是最干净的方法,这取决于我们是哪个角色来选择要调用的视图。(我以前的RDBMS老师会喜欢我这么说;)这也与Hibernate有所不同,并将您的东西更多地耦合到数据库中。我想这取决于代码的可移动性/可移植性。

    3. 围绕通用dao(IRepository)使用一个方面,该方面根据您的权限重写查询。当然,这意味着您在代码中具有基于权限的安全性。

实际上,只有在您首先移植代码权限时,才能在gui中隐藏编辑按钮,例如在我的观点1上。我建议您看一下Ayendes博客以获取对此的开源实现,他是一个非常熟练的人。编码器。



 类似资料:
  • 我正在尝试使用django-storages为带有服务帐户json文件的google云存储桶授予权限。但是,只有当我向所有具有对象视图权限的用户授予访问权限时,才能访问桶中的项目。我如何限制桶的公共访问。

  • 问题内容: 这是我的类,用于从数据库中获取数据 这是我的文件: 当我运行该程序时,出现异常后,请帮助我如何解决它。我是Hibernate的新手,尝试学习但被卡住了。 虽然我能够将数据存储在数据库中,但我有2个用于第一和第二类的数据获取数据,但在获取数据时遇到了问题PLZ帮助。 问题答案: 让我引述一下: 据我所知,您正在使用表名。 所以应该是这样的:

  • 问题内容: 我已经创建了一个关于餐馆的在线数据库,我需要通过我的android应用程序访问该数据库,以便在过滤后可以向用户显示数据。我的应用程序不需要更新数据库,但是我的问题是如何连接到我的在线mysql数据库并将其提供给用户?我已经在该站点以及其他站点上查看了许多建议,但我发现访问时必须使用JSON解析器,但不必这样做。 问题答案: 最好的解决方案是提供一个公共API,例如,使用PHP管理该AP

  • 问题内容: 我有一个用户组:“演示”。 我想设置该用户只能运行10个命令的策略,例如“ vim”,“ nano”,“ cd”等。 或者,将策略设置为对除“ ssh”和“ cat”命令之外的所有命令具有访问权限。 谢谢 问题答案: 您可以通过许多不同的方法来实现这一目标。我将列出几种可能的解决方案之一。 我建议使用几个不同的保护层,以防止用户运行不应被允许访问的命令。此处的所有说明均假定用户具有自己

  • 安装oracle 19C后,它要求用户名和密码。输入什么,以及如何创建一个具有所有权限和身份验证权限的新用户。(注意,我试图通过登录SYSDBA创建用户命令,但它显示错误为无效的普通用户或角色名.在这里输入图像描述 [在此处输入图像描述][2]