LINQ和数据库权限
我仍在努力了解LINQ并访问SQL数据库。
总是告诉我,我们应该只对数据具有存储过程的执行权限。
我们不应该选择/插入/更新/删除。
(这是因为性能和安全性)
为了从LINQ中获取数据,我们显然需要选择权限。我知道我们可以将存储的proc与LINQ一起使用,但是由于我无法进行联接,所以有什么意义呢?
我错过了什么吗?
解决方案
回答
1)我们是程序员,而不是DBA法西斯主义者。如果要求表明必须将数据库锁定100%,则Linq不适合我们。我不是DBA,所以我相信大多数性能/安全性炒作就是这样。 Linq是给我的。
2)我们可以使用linq进行联接。
@Philippe:Linq自动将求值转换为查询参数,因此它提供了一些SQL注入保护。但是,我们仍然必须仔细评估需求,以确定所需的安全性和级别。 Linq使数据库处理变得容易得多,但是使安全设计放到后燃烧器上也变得更加容易,这是一件坏事。
回答
在"存储过程与内联SQL / LINQ"问题上,我与Jeff Atwood非常一致:无论如何,谁需要存储过程?
如果我们在SPROC适用于所有人群中,为什么我们甚至想执行JOIN,我感到困惑。我们不应该将JOIN包装到另一个SPROC中吗?
正如Will所说,LINQ并不是为我们正在谈论的那种DB使用而设计的。它旨在为我们提供静态类型的嵌入式SQL。但是,如果使用LINQ to SQL,我们仍然可以通过用户权限控制访问。
回答
好吧,出于安全原因,我们不应在查询中输入任何用户输入的数据。如果我们遵守此规则,则看不到具有选择权限的问题。
回答
我们所有的数据库访问是否都在"存储过程的后面",取决于应用程序和公司的需求。我已经实现了使用视图来获取所有更新的所有数据和存储过程的系统。这允许集中的安全性和数据库逻辑,同时仍允许前端开发人员在适当的地方使用SQL查询。
像编程中的许多其他事情一样,它取决于项目的需求。
LinqToSql确实支持存储过程。顾志刚(Scott Gu)上有一篇文章:
http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored-procedures.aspx