2008-09-08 87 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