2011-05-10 193 views
0

我在處理應用程序,其中某些SQL Server的查詢將被限制在基於一組特定身份的用戶存儲中複雜的查詢。ASP.NET/SQL服務器:SQL Server數據庫

這似乎是有道理的存儲應用程序數據庫,在那裏我可以將其與組名稱關聯起來這些,很容易添加/未來刪除。

的查詢是相當複雜的,但並採取了一些參數如jQuery,並從日期字段,當前用戶名等,所以查詢構造,如:

MyQuery = "SELECT * FROM Table1 WHERE Username = '" + System...CurrentUser +"' AND Somedate > '" + from.text +'"; 

現在我不知道該如何拿這個代碼並在數據庫中創建一個等價的表示。我想過使用特定的標識符,例如%USERNAME%,%FROMDATE%等,然後使用字符串替換函數,但我不確定這會帶出單引號。

會像Replace("%USERNAME%", "'" + CurrentUser + "'")工作?

任何更好的主意!

兩件事情:

  1. 限制基於用戶組的一些疑問。
  2. 相當容易添加/刪除在未來/編輯查詢(沒有硬編碼到C#?)
+0

愚蠢的問題:不能你剛纔創建的使用標準SQL Server功能的存儲過程(包括參數),以及手柄的權限? – 2011-05-10 16:34:56

+0

marc_s - 這應該是一個答案。我想自己發佈這個答案,但是你打敗了我。如果我已經將它作爲評論發佈,那麼我會覺得自己像一個腳跟。此外,我會包含一個鏈接到OWASP關於SQL注入的文章。發佈作爲答案,我會投票。 – David 2011-05-10 16:41:31

+0

http://databases.about.com/od/sqlserver/a/storedprocedure.htm和https://www.owasp.org/index.php/SQL_injection – David 2011-05-10 16:44:17

回答

4

第一關:BIG警告:串聯SQL語句一起承擔的SQL injection attacks有很大的危險。您應該不惜一切代價避免此技術,而應使用參數化查詢

所有第二:不能你剛纔創建的「複雜查詢」存儲過程(包括參數) - 這就是存儲過程是在真正的好 - 封裝複雜查詢到從外面一個簡單的調用。

然後,您可以處理使用標準的SQL Server功能的權限 - 爲這些用戶(和/或組)對誰被允許調用它的存儲過程的執行權限。

相關問題