什麼是評估C#中的SQL語句,以確定它不僅僅是選擇? - 即 - 如果語句稍後執行,則檢查值是否會更改(插入,更新,刪除,修改或刪除)。在C#中評估sql語句的最佳方法是什麼?
只要我可以使用C#dlls /函數即可使用的任何想法,或者這是我應該使用字符串分析技術編碼自己的東西嗎?
謝謝。
什麼是評估C#中的SQL語句,以確定它不僅僅是選擇? - 即 - 如果語句稍後執行,則檢查值是否會更改(插入,更新,刪除,修改或刪除)。在C#中評估sql語句的最佳方法是什麼?
只要我可以使用C#dlls /函數即可使用的任何想法,或者這是我應該使用字符串分析技術編碼自己的東西嗎?
謝謝。
我會使用db權限。創建一個只有讀取訪問權限的數據庫用戶,然後,執行除SELECT之外的任何查詢都將失敗。
+1更好的回答:) – mellamokb
小小的警告 - 即使是一個'SELECT'可以削弱服務器...一個交叉加入或7應該是足夠的... –
嗯 - 這是他必須做出的折衷,如果他想要安全地檢查查詢是否要更改數據。嘗試解析SQL會產生一個問題世界,只是在等待注入攻擊。 –
一種方法是使用事務,然後回滾,具有明顯的限制(可能無法在複雜查詢上工作,例如在其他更新之間返回多個結果集,並且對使用非回滾的查詢無效像DBCC命令 - 可能想要捕捉異常以及類似情況):
using(SqlConnection sqlConn = new sqlConnection(CONNECTION_STRING))
{
sqlConn.Open();
using (SqlTransaction trans = sqlConn.BeginTransaction())
{
// execute code and see if rows are affected here
var query = " ... " ;
var cmd = new SqlCommand(query, sqlConn);
var rowsAffected = cmd.ExecuteNonQuery();
if (rowsAffected > 0) { ... }
// roll back the transaction
trans.RollBack();
}
sqlConn.Close();
}
什麼是用例?您正在評估用戶輸入的即席查詢(可能是惡意的),還是在應用程序內部實施某些內容? – mellamokb
http://stackoverflow.com/questions/589096/parsing-sql-code-in-c-sharp? –
用戶將輸入查詢,然後我的代碼將執行查詢(如果它被確定爲非惡意,並且不修改數據源)。 – Chris