Inception SQL稽核註解

haoge0205發表於2019-07-03

Inception SQL稽核註解


1、建表語句

建表語句檢查項


表屬性的檢查項

 這個表不存在

 對於create table like,會檢查like的老表是不是存在。

 對於create table db.table,會檢查db這個資料庫是不是存在

 表名、列名、索引名的長度不大於64個位元組

 如果建立的是臨時表,則必須要以tmp為字首

 必須要指定建立innodb的儲存引擎(可配置)

 必須要指定utf8的字符集(字串可配置,指定支援哪些字符集)

 表必須要有註釋(可配置)

 表不能建立為分割槽表(可配置)

 只能有一個自增列

 索引名字不能是Primay

 不支援Foreign key(可配置)

 建表時,如果指定auto_increment的值不為1,報錯(可配置)

 如果自增列的名字不為id,說明有可能是有意義的,MySQL這樣使用比較危險,所以報警(可配置)

 列屬性的檢查項

 不能設定列的字符集(可配置)

 列的型別不能使用集合、列舉、點陣圖型別。(可配置)

 列必須要有註釋(可配置)

 char長度大於20的時候需要改為varchar(長度可配置)

 列的型別不能是BLOB/TEXT。(可配置)

 每個列都使用not null(可配置)

 如果列為BLOB/TEXT型別的,則這個列不能設定為NOT NULL。

 如何是自增列,則使用無符號型別(可配置)

 如果自增列,則長度必須要大於等於4個位元組(可配置)

 如果是timestamp型別的,則要必須指定預設值。

 對於MySQL5.5版本(包含)以下的資料庫,不能同時有兩個TIMESTAMP型別的列,如果是DATETIME型別,則不能定義成DATETIME DEFAULT CURRENT_TIMESTAMP及ON UPDATE CURRENT_TIMESTAMP等語句。

 每個列都需要定義預設值,除了自增列、主鍵列及大欄位列之外(可配置)

 不能有重複的列名

 索引屬性檢查項

 索引必須要有名字

 不能有外來鍵(可配置)

 Unique索引必須要以uniq_為字首(可配置)

 普通索引必須要以idx_為字首(可配置)

 索引的列數不能超過5個(數目可以配置)

 表必須要有一個主鍵(可配置)

 最多有5個索引(數目可配置)

 建索引時,指定的列必須存在。

 索引中的列,不能重複

 BLOB列不能建做KEY

 索引長度不能超過766

 不能有重複的索引,名字及內容

 預設值檢查項

 BLOB/TEXT型別的列,不能有非NULL的預設值

 MySQL5.5以下(含)的版本,對於DATETIME型別的列,不能有函式NOW()的預設值。

 如果設定預設值為函式,則只能是NOW()。

 如果預設值為NULL,但列型別為NOT NULL,或者是主鍵列,或者定義為自增列,則報錯。

 自增列不能設定預設值。

 


2、插入語句

插入語句檢查項


 表是否存在

 必須指定插入列表,也就是要對哪幾個列指定插入值,如insert into t (id,id2) values(...),(可配置)

 必須指定值列表,與上面對應的列,插入的值是什麼,必須要指定。

 插入列列表與值列表個數相同,上面二者的個數需要相同,如果沒有指定列列表(因為可配置),則值列表長度要與表列數相同。

 不為null的列,如果插入的值是null,報錯(可配置)

 插入指定的列名對應的列必須是存在的。

 插入指定的列列表中,同一個列不能出現多次。

 插入值列表中的簡單表示式會做檢查,但具體包括什麼不一一指定


3、更新、刪除語句


 更新、刪除語句檢查項

 

 表是否存在

 必須有where條件(可配置)

 delete語句不能有limit條件(可配置)

 不能有order by語句(可配置)

 影響行數大於10000條,則報警(數目可配置)

 對WHERE條件這個表示式做簡單檢查,具體包括什麼不一一指定

 對更新列的值列表表示式做簡單檢查,具體不一一指定

 對更新列物件做簡單檢查,主要檢查列是不是存在等

 多表更新、刪除時,每個表必須要存在



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28939273/viewspace-2649394/,如需轉載,請註明出處,否則將追究法律責任。

相關文章