我仍在尝试了解 LINQ 并访问 SQL 数据库。
我总是被教导说你应该只对你的数据拥有存储过程的执行权限。
你永远不应该选择/插入/更新/删除。
(这是因为性能和安全性)
要从 LINQ 中获取数据,您显然需要选择权限。我知道您可以将存储过程与 LINQ 一起使用,但既然我不能加入,那有什么意义呢?
我错过了什么吗???
我仍在尝试了解 LINQ 并访问 SQL 数据库。
我总是被教导说你应该只对你的数据拥有存储过程的执行权限。
你永远不应该选择/插入/更新/删除。
(这是因为性能和安全性)
要从 LINQ 中获取数据,您显然需要选择权限。我知道您可以将存储过程与 LINQ 一起使用,但既然我不能加入,那有什么意义呢?
我错过了什么吗???
1) 我们是程序员,而不是 DBA 法西斯分子。如果您的要求规定数据库必须 100% 锁定,那么 Linq 不适合您。我不是 DBA,所以我相信大多数性能/安全炒作就是这样。Linq 适合我。
2)您可以使用 linq 进行连接。
@Philippe:Linq 自动将评估转换为查询参数,因此它提供了一些 sql 注入保护。但是,您仍然必须仔细评估您的要求,以确定您需要多少安全性以及在什么级别。Linq 使处理数据库变得更加容易,但它更容易将安全设计放在次要位置,这是一件坏事。
在“存储过程与内联 SQL/LINQ”问题上,我非常同意 Jeff Atwood: 无论如何,谁需要存储过程?.
如果您在 SPROCs-for-everything 人群中,我对您为什么还要执行 JOIN 感到困惑;您不应该将该 JOIN 包装到另一个 SPROC 中吗?
正如 Will 所说,LINQ 并不是为您所说的那种 DB 用途而设计的。它旨在为我们提供静态类型的内联 SQL。但是,如果您使用 LINQ to SQL,您仍然可以通过用户权限控制访问。
好吧,出于安全原因,您不应将任何用户输入的数据输入到查询中。如果你坚持这条规则,我看不出有选择权限的问题。
您的所有数据库访问是否都在存储过程“之后”取决于应用程序和公司的需求。我已经实现了使用视图来获取所有数据和所有更新的存储过程的系统。这允许集中的安全性和数据库逻辑,同时仍然允许前端开发人员在适当的情况下使用 SQL 查询。
就像编程中的许多其他事情一样 - 这取决于您项目的需求。
LinqToSql 确实支持存储过程。Scott Gu 有一个帖子: