1. 程式人生 > >SQL注入、觸發器、儲存結構那些事兒~-

SQL注入、觸發器、儲存結構那些事兒~-

前言:機房重構的時候,就用過儲存過程,但是對於SQL注入和觸發器不是很清楚。在敲牛腩的時候,對於這些內容又進行了深一步的理解,於是總結了一下這三個方面的內容,下面和大家來分享一下。

(一)SQL注入

1.是什麼

所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。

例如:插入新語句的同時,進行刪除舊語句
Insert into category (name) values(‘娛樂新聞’)delete category where id=1–)

具體來說,它是利用現有應用程式,將(惡意的)SQL命令注入到後臺資料庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。

比如先前的很多影視網站洩露VIP會員密碼大多就是通過WEB表單遞交查詢字元暴出的,這類表單特別容易受到SQL注入式攻擊.

2.特點:

根據構造的語句,進行修改,安全性差

3.如何避免SQL注入

做系統的時候應該避免SQL注入,可以採用【設定輸入限制】、【web設定只讀許可權】、【輸入驗證】等方式來避免SQL注入。

(二)觸發器(trigger)

1.是什麼

①觸發器是SQL server 提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表事件相關的特殊的儲存過程,它的執行【不是由程式呼叫】,也【不是手工啟動】,而【是由事件來觸發】。

例如:當對一個表進行操作( insert,delete, update)時就會啟用它執行。觸發器經常用於加強資料的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 資料字典中查到。

②SQL的觸發器是一個能由系統自動執行對資料庫修改的語句。

觸發器可以查詢其他表,而且可以包含複雜的SQL語句。它們主要用於強制服從複雜的業務規則或要求。

例如:根據客戶當前的帳戶狀態,控制是否允許插入新訂單。

③觸發器也可用於強制引用完整性,以便在多個表中新增、更新或刪除行時,保留在這些表之間所定義的關係。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外來鍵約束。如果使用資料庫關係圖,則可以在表之間建立關係以自動建立外來鍵約束。

2.特點:

①輕鬆可靠地實現許多複雜的功能。
②如果應用不好,可能會影響資料庫結構,資料庫維護起來困難。

(三)儲存過程(Stored Procedure)

1.是什麼

儲存過程是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。

2.特點:

每個引數名前要有一個"@"符號,每一個儲存過程的引數僅為該程式內部使用,引數的型別除了IMAGE外,其他SQL Server所支援的資料型別都可使用。

3.和觸發器的區別

觸發器是一種特殊型別的儲存過程。

觸發器主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名字而被直接呼叫。

例如:對某一表進行諸如Update、 Insert、 Delete 這些操作時,SQL Server 就會自動執行觸發器所定義的SQL 語句,從而確保對資料的處理必須符合由這些SQL 語句所定義的規則

總結:知識的學習是在點滴積累中收穫的,多學習,多總結~