【问题标题】:Table or row level security in ASP.NET MVC 5 and Entity Framework 6ASP.NET MVC 5 和 Entity Framework 6 中的表或行级安全性
【发布时间】:2015-08-13 01:03:37
【问题描述】:

在 stackoverflow、asp.net 论坛和代码项目中,我的 last question 关于这个主题完全被误解了!但是现在,我对自己的需求和要求以及它的实际名称有了更多的了解。我读过this question,也熟悉CSLA .NET。在 Entity Framework 6 和 ASP.NET MVC 5 中是否有更直接的方法来实现表甚至更好的行级安全性?事实上this custom approach 听起来更好更容易。根据您的经验,您有何看法?

由于某些原因,我们的用户需要拥有他们的数据库登录名。但我们不希望他们能够错过。所以完美的解决方案是在数据库级别进行身份验证和授权。如果有人能够澄清步骤和流程,我将不胜感激。到目前为止,我想出的是为不同的用户提供不同的 DB logins 并使用 login 连接到数据库。所以当一个新用户注册时,实际上是创建了一个新的数据库登录,并且安全权限都是在数据库中实现的。

我不确定我必须为这个需求做些什么。它应该如何在数据库中实现,可以用实体框架完成还是我应该手动编写?任何开箱即用的解决方案?欢迎对此主题的任何解释。

【问题讨论】:

标签: asp.net-mvc entity-framework authentication asp.net-mvc-5 entity-framework-6


【解决方案1】:

您需要一种叫做动态数据屏蔽的东西。

我工作的公司 Axiomatics(免责声明 - 我为该公司工作)有一个策略驱动的解决方案,可以实现数据过滤和屏蔽。这意味着基于策略和属性,可以定义用户可以选择/插入/删除的内容...

它的工作方式是您定义一个策略,例如:

  • 当且仅当 userId ==assignedDoctor 时,具有角色 == 医生的用户可以执行操作 == SELECT 表 == MEDICALRECORD。

然后,在应用程序和数据库之间,部署一个代理,它将拦截流并附加相关的 SQL 过滤语句(通常是 WHERE 子句),例如:

  • SQL 截获:SELECT * FROM medicalrecords
  • WHERE 子句生成:WHERE medicalrecords.assignedDoctor='Alice'
  • 发送到数据库的最终 SQL 语句:SELECT * FROM medicalrecords WHERE medicalrecords.assignedDoctor='Alice'

这些策略采用称为 的标准格式,并启用基于属性的访问控制(也称为)。

以下链接可能对您有用:

【讨论】:

    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2013-10-27
    • 2017-08-05
    相关资源
    最近更新 更多