我需要將存儲過程執行腳本存儲在數據庫表中。將Sql腳本存儲在數據庫表中的最佳方法
作爲一個例子:
exec proc_name 'somedata'
這些是在將要改變已通過審覈流程數據之後稍後的時間執行。
清理腳本的最佳方法是什麼,以便該語句不能用於sql注入。
是否有我可以使用的編碼的特定類型?或者就像在上執行替換一樣簡單'
我需要將存儲過程執行腳本存儲在數據庫表中。將Sql腳本存儲在數據庫表中的最佳方法
作爲一個例子:
exec proc_name 'somedata'
這些是在將要改變已通過審覈流程數據之後稍後的時間執行。
清理腳本的最佳方法是什麼,以便該語句不能用於sql注入。
是否有我可以使用的編碼的特定類型?或者就像在上執行替換一樣簡單'
您可以存儲您的腳本,以便稍後在「存儲過程」或計劃作業中執行。我沒有看到編碼存儲過程的任何理由,因爲您可以將用戶權限設置爲防止不同的用戶閱讀甚至看到它們。
它的一個相當複雜的元數據結構,用戶將會改變其中的數據,它不是一個真正可以執行的單個SP。 – shenku 2012-04-05 03:26:02
然後,它聽起來像你想要使用varchar(max)列,並有一個單獨的表的參數..如果你使用參數你應該是安全的SQL注入。見下面匆匆的C#示例:
C#僞代碼示例
SQLCommand command = new SQLCommand("select * from myScripts where scriptid = @scriptid");
SQLParameter param = new SQLParameter("@scriptid", 12, int);
...new SQLCommand("select * from myParams where scriptid = @scriptid");
...new SQLParameter...
DataReader dr = new blah blah...
SQLCommand userCommand = new SQLCommand(dr['sql']);
foreach (parameter in params)
{
userCommand.Parameter.Add(parameter['name'], value);
}
userCommand.Execute...
有沒有辦法 「清洗」 的腳本。
保護您的代碼的唯一方法是將代碼與數據分開。僅「清理」數據。
這就是爲什麼我們的代碼與數據分離。
代碼穩固且安全,數據可變,可以「清理」數據。
正如你打破這一基本法律,將代碼視爲數據,無法保護它。
根據任務的完全不同尋常的判斷,我會說有一個合適的解決方案。
你只是選擇了錯誤的架構。因此,你最好再問一個問題,比如「我想處理相當複雜的元數據結構(結構和目的)」,你將得到一個合適的解決方案,它不需要存儲SQL代碼數據。
您是否熟悉存儲過程? – Colin 2012-04-05 01:54:02
需要保存什麼樣的「SQL腳本」?您沒有提供可用於回答您的問題的信息。請編輯並提供有關您實際嘗試執行的操作的詳細信息;正如所寫,這不是一個真正的問題,應該關閉。謝謝。 :) – 2012-04-05 02:00:47
您好,感謝您的回覆,但我的問題很清楚,「什麼是最好和最安全的方式來存儲SQL腳本以供執行」,SQL腳本?好的可能是任何東西,但在這種情況下,它是一個存儲過程的執行,如「exec proc_name'somedata'」 - 希望清除混淆 – shenku 2012-04-05 03:20:13