C# SQL数据库上的不同用户只能看到自己的数据集(C、EF)

C# SQL数据库上的不同用户只能看到自己的数据集(C、EF),c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我有一个简单的SQL Server数据库,希望通过一个带有实体框架的C应用程序连接到它。从EF迁移对我来说很好 应用程序的用户通过其windows身份验证连接到数据库 有一个表的列ID为| DATA | USERNAME 如何防止用户看到其他用户的数据 当然,我可以过滤应用程序本身中的数据,并且只向用户显示允许的数据 WHERE Username = @Username 但应用程序的代码在源代码管理中是公开的开源代码,因此每个人都可以看到连接和手动连接到读取所有数据的SQL Server 那么

我有一个简单的SQL Server数据库,希望通过一个带有实体框架的C应用程序连接到它。从EF迁移对我来说很好

应用程序的用户通过其windows身份验证连接到数据库

有一个表的列ID为| DATA | USERNAME

如何防止用户看到其他用户的数据

当然,我可以过滤应用程序本身中的数据,并且只向用户显示允许的数据

WHERE Username = @Username
但应用程序的代码在源代码管理中是公开的开源代码,因此每个人都可以看到连接和手动连接到读取所有数据的SQL Server

那么,我的问题是:在SQL Server中隐藏彼此的数据,但仍然允许EF类迁移的完整功能的最佳做法是什么


非常感谢-Konrad不是直接查询表,而是创建一个按用户用户名过滤的对象

WHERE Username = @Username

在函数或存储过程中使用它,将使用应用程序的人员的用户名作为输入参数传递。

创建一个按用户用户名过滤的对象,而不是直接查询表

WHERE Username = @Username

在函数或存储过程中使用它,将使用应用程序的人的用户名作为输入参数传递。

您可以在数据库上添加行级安全性。这样,只有创建了行的用户才能看到它们

通过这种方式,您可以将登录名分发给映射到数据库中用户的每个用户。数据库将只返回属于该用户的行

这不需要任何特定的编码,都是在服务器端实现的

不过,SQL 2016在沃兹。实施起来会很酷


您可以在数据库上添加行级安全性。这样,只有创建了行的用户才能看到它们

通过这种方式,您可以将登录名分发给映射到数据库中用户的每个用户。数据库将只返回属于该用户的行

这不需要任何特定的编码,都是在服务器端实现的

不过,SQL 2016在沃兹。实施起来会很酷


你能发一些代码吗。你想隐藏和/或限制什么?什么样的“应用程序”?网络服务?桌面应用程序?安装桌面应用程序的典型方法是,按用户安装,并将应用程序数据存储在Environment.SpecialFolder.ApplicationData中,这样每个用户都可以获得一个单独的数据库。您可以发布一些代码吗。你想隐藏和/或限制什么?什么样的“应用程序”?网络服务?桌面应用程序?安装桌面应用程序的典型方法是,为每个用户安装,并将应用程序数据存储在Environment.SpecialFolder.ApplicationData中,这样每个用户都可以获得一个单独的数据库。但是,这存在一些安全问题:使用精心编制的查询可能会导致信息泄漏。例如,从PAYROLL中选择1/SALARY-100000,其中NAME='John Doe'会让恶意用户知道John Doe的工资是100000美元。尽管有一个安全谓词可以防止恶意用户直接查询其他人的工资,但用户可以确定查询何时返回除零异常。尽管如此,这也存在一些安全问题:使用精心编制的查询可能会导致信息泄漏。例如,从PAYROLL中选择1/SALARY-100000,其中NAME='John Doe'会让恶意用户知道John Doe的工资是100000美元。即使有一个安全谓词可以防止恶意用户直接查询其他人的工资,用户也可以确定查询何时返回除零异常。