具有行级安全性和实体框架的 SQL 服务器

时间:2020-12-18 18:07:41

标签: entity-framework

我有一个数据库 (MS SQL Server),其中表使用了行级安全性。如果我想将它与实体框架一起使用会不会有任何并发​​症。例如,假设我在学生和课程之间有 n:n 关系,如下所示:

Student:
Bob
Alice

Course:
Math
History

Student_Course:
Bob | Math
Bob | History
Alice | Math
Alice | History

“课程”表具有行级访问权限,我不能看到“历史”行。那么,如果我从“Student”表中获取 Bob 然后执行以下操作,会发生什么:

var bobsCourses = bobTheStudent.Courses
  • 该框架足够智能,可以为我提供 [数学] 吗?
  • 我得到 [Math, null]?
  • 因为“Student_Course”中的条目在“Course”中没有匹配项,所以一切都会崩溃和烧毁?

数据库已经存在但应用程序不存在,所以这是“数据库优先” 该应用程序将仅用于数据呈现,因此无需关心向数据库写入任何更新。

2 个答案:

答案 0 :(得分:0)

除非您将 RLS 谓词也应用于 Student_Course 表,否则它可能会中断。 RLS 在 SQL Server 中不会“级联”。

答案 1 :(得分:0)

我做了一些测试,它似乎是这样工作的: 对于 n:n 关系没有问题,该示例工作正常,结果将是 [Math]。 对于 1:1 关系,它有点复杂,例如假设我们有这些表:

Student:         ### Table with students + main subject foreign key
Bob | Math
Alice | History

Subject:   ### Subjects
Math       ### This row is private
History

那么:

AllStudents

会给我 [鲍勃,爱丽丝] 和

BobTheStudent.MainSubject

将简单地为空。 但接下来是可怕的事情......

AllStudents.Include("MainSubject")

会给我[爱丽丝]。 我想那是因为在这种情况下,将使用 SQL 内部联接从两个表中检索数据。 (如果外键允许空值,可能会有所不同,但我没有测试。)