如何防止sql注入 存儲(chǔ)過程跟SQL語句比較,各有什么優(yōu)點(diǎn)和缺點(diǎn)?
存儲(chǔ)過程跟SQL語句比較,各有什么優(yōu)點(diǎn)和缺點(diǎn)?SQL存儲(chǔ)過程位于SQL數(shù)據(jù)庫1中,因此無需在程序中拼接SQL語句。2. SQL Server預(yù)編譯存儲(chǔ)過程,因此速度很快。3. 它不需要在網(wǎng)絡(luò)上傳輸冗長
存儲(chǔ)過程跟SQL語句比較,各有什么優(yōu)點(diǎn)和缺點(diǎn)?
SQL存儲(chǔ)過程位于SQL數(shù)據(jù)庫1中,因此無需在程序中拼接SQL語句。
2. SQL Server預(yù)編譯存儲(chǔ)過程,因此速度很快。
3. 它不需要在網(wǎng)絡(luò)上傳輸冗長的SQL語句,而是直接調(diào)用存儲(chǔ)過程的名稱,這樣可以加快速度。當(dāng)然,在一些外包軟件開發(fā)中不允許使用存儲(chǔ)過程。
由于對(duì)方無法向您公開數(shù)據(jù)庫,此時(shí)您只能使用SQL語句。
然而,SQL存儲(chǔ)過程的使用在國內(nèi)一些小企業(yè)中仍然非常流行。
由于程序代碼不包含SQL語句,因此數(shù)據(jù)庫將相對(duì)安全。
存儲(chǔ)過程的優(yōu)缺點(diǎn)?
存儲(chǔ)過程是預(yù)先編譯并存儲(chǔ)在數(shù)據(jù)庫中的SQL語句的集合。調(diào)用存儲(chǔ)過程可以簡(jiǎn)化應(yīng)用程序開發(fā)人員的大量工作,減少數(shù)據(jù)庫與應(yīng)用服務(wù)器之間的數(shù)據(jù)傳輸,提高數(shù)據(jù)處理效率。優(yōu)點(diǎn):1。重用:存儲(chǔ)過程可以重用,這可以減少數(shù)據(jù)庫開發(fā)人員的工作量。
2. 減少網(wǎng)絡(luò)流量:存儲(chǔ)過程位于服務(wù)器上。當(dāng)它被調(diào)用時(shí),只需要傳遞存儲(chǔ)過程的名稱和參數(shù),這樣就減少了在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)量。
3. 安全性:參數(shù)化存儲(chǔ)過程可以防止SQL注入攻擊,并且可以對(duì)存儲(chǔ)過程應(yīng)用grant、deny和revoke權(quán)限。存儲(chǔ)過程的缺點(diǎn)如下:1。更改很麻煩:如果更改范圍太大,需要更改輸入存儲(chǔ)過程參數(shù),或者需要更改存儲(chǔ)過程返回的數(shù)據(jù),則仍需要更新程序集中的代碼以添加參數(shù)、更新getvalue()調(diào)用,等等。在這個(gè)時(shí)候,估計(jì)是很麻煩的。2可移植性差:因?yàn)榇鎯?chǔ)過程將應(yīng)用程序綁定到SQL server,所以用存儲(chǔ)過程封裝業(yè)務(wù)邏輯將限制應(yīng)用程序的可移植性。如果應(yīng)用程序的可移植性在您的環(huán)境中非常重要,那么您需要將業(yè)務(wù)邏輯封裝在獨(dú)立于RDBMS的中間層中。
什么時(shí)候用存儲(chǔ)過程?存儲(chǔ)過程的優(yōu)點(diǎn)及缺點(diǎn)?
存儲(chǔ)過程是一組預(yù)編譯的SQL語句。其優(yōu)點(diǎn)如下:
1。模塊化編程是允許的,也就是說,一個(gè)過程只需要?jiǎng)?chuàng)建一次,以后可以在程序中隨時(shí)調(diào)用。
2. 允許更快的執(zhí)行。如果一個(gè)操作需要執(zhí)行大量SQL語句或重復(fù)執(zhí)行,則存儲(chǔ)過程的執(zhí)行速度將比SQL語句快。
3. 減少網(wǎng)絡(luò)流量。例如,一個(gè)需要幾百行SQL代碼的操作是由一個(gè)執(zhí)行語句完成的,因此不需要在網(wǎng)絡(luò)中發(fā)送幾百行代碼。
4. 更好的安全機(jī)制,對(duì)于沒有權(quán)限執(zhí)行存儲(chǔ)過程的用戶,還可以授權(quán)他們執(zhí)行存儲(chǔ)過程。
使用存儲(chǔ)過程有哪些好處?
優(yōu)點(diǎn):缺點(diǎn):小結(jié):一般來說,應(yīng)該盡可能多地使用或不使用存儲(chǔ)過程,特別是在具有高并發(fā)性和復(fù)雜體系結(jié)構(gòu)的大型系統(tǒng)中。為了減少存儲(chǔ)過程的使用,業(yè)務(wù)邏輯的工作應(yīng)該由應(yīng)用服務(wù)器來處理,而不是交給數(shù)據(jù)庫。很多時(shí)候,存儲(chǔ)過程可以快速地解決問題,但是它的可維護(hù)性、可擴(kuò)展性和可移植性都不好。如果你的系統(tǒng)很小,架構(gòu)比較簡(jiǎn)單,開發(fā)人員也熟悉存儲(chǔ)過程,可以考慮使用存儲(chǔ)過程來減少工作量;但是隨著系統(tǒng)的增加,架構(gòu)變得越來越復(fù)雜,開發(fā)人員越來越多,存儲(chǔ)過程的存在可能會(huì)導(dǎo)致更多的問題問題。當(dāng)然,您可以考慮將存儲(chǔ)過程用于定時(shí)ETL或報(bào)表統(tǒng)計(jì)等任務(wù)。
存儲(chǔ)過程和觸發(fā)器優(yōu)缺點(diǎn)有哪些?
在函數(shù)中調(diào)用存儲(chǔ)過程。當(dāng)代碼中使用您編寫的存儲(chǔ)過程時(shí),您將調(diào)用存儲(chǔ)過程的名稱。參數(shù)在其后面?zhèn)鬟f。不能用不同或難以區(qū)分來形容。觸發(fā)器的優(yōu)點(diǎn)是,當(dāng)insert觸發(fā)器被觸發(fā)時(shí),新的數(shù)據(jù)行將被插入到觸發(fā)器表和插入表中。插入的表是一個(gè)邏輯表,其中包含已插入的數(shù)據(jù)行的副本。insert表包含insert語句中記錄的insert操作。插入的表還允許引用通過初始化insert語句生成的日志數(shù)據(jù)。觸發(fā)器檢查插入的表以確定是否或如何執(zhí)行觸發(fā)器操作。插入表中的行始終是觸發(fā)器表中一個(gè)或多個(gè)行的副本