2008-09-08 85 views
2

我仍然试图绕过LINQ并访问SQL数据库。LINQ和数据库权限

我总是被教导你应该只对你的数据有执行存储过程的权限。

你不应该选择/插入/更新/删除。

(这是因为性能和安全性)

来获取数据了LINQ的你显然需要选择权限。我知道你可以在LINQ中使用存储过程,但是因为我不能加入,所以有什么意义?

我错过了什么?

回答

2

1)我们是程序员,而不是DBA法西斯分子。如果你的要求声明数据库必须被锁定100%,Linq不适合你。我不是DBA,所以我相信大多数性能/安全性宣传就是这样。 Linq是给我的。

2)你可以用linq做连接。

@Philippe:Linq自动将评估转换为查询参数,因此它提供了一些SQL注入保护。但是,您仍然需要严格评估您的需求,以确定您需要多少安全性以及在多大程度上。 Linq使得处理数据库变得更加容易,但它使得将安全的设计放在后台上更容易,这是一件坏事。

0

我非常同意Jeff Atwood关于“存储过程与内联SQL/LINQ”问题:Who Needs Stored Procedures, Anyways?

我很困惑,为什么你甚至想要执行JOIN,如果你在SPROCs for everything的人群中;你不应该把这个加入到另一个SPROC中吗?正如Will说的那样,LINQ并不是专为您所谈论的那种数据库应用而设计的;它旨在为我们提供静态类型的内联SQL。但是,如果您使用LINQ to SQL,则可以通过用户权限控制访问权限。

0

那么,出于安全原因,你不应该输入任何用户输入的数据到查询中。如果你坚持这个规则,我不会看到有选择权限的问题。

1

是否所有数据库访问都是“后面”存储过程取决于应用程序和公司的需求。我已经实现了使用视图来获取所有更新的所有数据和存储过程的系统。这允许集中安全性和数据库逻辑,同时仍然允许前端开发人员在适当的地方使用SQL查询。

像编程中的其他东西一样 - 这取决于您项目的需求。

LinqToSql不支持存储过程。 Scott Gu上有个帖子:

http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored-procedures.aspx