台灣最大程式設計社群網站
線上人數
422
 
會員總數:245486
討論主題:189239
歡迎您免費加入會員
討論區列表 >> MySQL >> Stored Procedure/Function 與 Trigger 的實做應用方式
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Stored Procedure/Function 與 Trigger 的實做應用方式
價值 : 10 QP  點閱數:6181 回應數:5

樓主

初學者
門外漢
0 4
64 16
發送站內信

To 各位前輩:

在 Study 過這三種 MySQL 功能之後,我知道

1. Stored Procedure(預儲程序):把一連串的SQL程序步驟儲存起來,最後透過 『call 預儲程序名稱;』來呼叫。

2. Stored Function(預儲函數):或稱為使用者定義函數,跟預儲程序很像,不過最後會傳回值。呼叫方式不是 call,而是Select,例如:『select 預儲函數名稱(引數值);』或『select 預儲函數名稱();』。

3. Trigger (觸發程序):在 INSERT, UPDATE, DELETE 命令被執行的時候,也可以針對紀錄來做觸發的處理,比如 INSERT 的資料若符合特定條件,同步可以記錄在其他的 table 中。或是 DELETE 一筆資料前,先對其做紀錄,以避免事後要還原或是查詢舊的資料。

小弟想請教,以上除了觸發程序比較好理解其『應用面』之外,一般在預儲程序或預儲函數,可以用來做哪些比較有用或常用的功能呢?? 因為書上的範例都很基礎,所以想請教各位前輩,預儲程序與預儲函數這兩種功能,在實做上,比較經常用來做哪些用途??

多謝!!!

搜尋相關Tags的文章: [ Stored Procedure ] , [ Stored Function ] , [ Trigger ] ,
本篇文章發表於2009-10-26 17:20
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
5樓
作者回應

初學者
檢舉此回應
感謝 MySQL CMDBA 大哥的解惑^^
本篇文章回覆於2009-10-30 12:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
最有價值解答

MySQL CMDBA
檢舉此回應
忘了提書籍...

我印象中沒有看到過專門在講 SQL-Injection 的書。大部份都是資安類書籍(或 DBA 書籍)中,會有某幾個章節提到這件事,但也僅止於概念性講述,也許要請其他專門研究資安的達人幫忙介紹一下。
本篇文章回覆於2009-10-27 08:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

MySQL CMDBA
檢舉此回應
防堵 SQL-Injection 的方式大體上來說分兩種。

1. 程式端:
在取得使用者輸入的 data 時要做 escape,至於 escape 的方式視程式語言的不同用的 function 不太一樣,甚至同一個語言會有許多不同的 escape function,阻擋的效果也不太一樣。(總之在程式端不太可能做到100%安全,只能儘量提升難度)

2. Server 端:
撰寫 Stored Routines,所有程式要操作 DB 時,只允許透過 Stored Routines 去處理,此法是目前已知唯一可以根絕 SQL-Injection 的方式。

註:
也有一些資安設備 firewall 可以做到防睹 SQL-Injection 的功能,但效果如何我沒有客觀的數據。
本篇文章回覆於2009-10-27 08:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

初學者
檢舉此回應
感謝大哥的說明! 因小弟初接觸 MySQL,目前都僅止於單機操作練習!!
這個 SQL Injection 名詞我還是頭一遭聽到! 經過 Google 才知道原來有這個多的 SQL Injection 資訊!

能否請教大哥,有沒有相關這方面的書籍可進一步的了解如何防禦這類的攻擊呢?? 大大的感謝您!
本篇文章回覆於2009-10-27 01:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
1樓
回應

MySQL CMDBA
檢舉此回應
Stored Procedure/Function:
防堵 SQL-Injection,這是目前唯一可以 100% 防範的手段。書上應該會告訴你它有一大堆的好處,但就我自己實際觀察到的情況來說,最主要還是用來擋 SQL-Injection(其它優點都只是附加價值)。

範例:
你去 maintain 一些 EC site 之後就會經常性的發現 Stored Routines(註1) 被大量使用,大體上來說就是用來處理一些 "比較敏感的資訊",例如處理訂單 table 等等。

註1:
在 MySQL 中,Stored Procedure 與 Stored Function 被合稱為 Stored Routines。
本篇文章回覆於2009-10-26 21:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.