資料庫之淚第一章節
幸福的家庭似乎都一樣的美好無可挑剔,不幸福的家庭總是有各種各樣的不和諧,各種各樣的災難或痛苦。 出處:俄國 列夫·托爾斯泰 《安娜·卡列尼娜》第一章第一句話。
解析:列夫·托爾斯泰的這句“幸福的家庭都是相似的,不幸的家庭各有各的不幸”和中國的俗語“家家有本難唸的經”有異曲同工之妙。每一個家裡都有一些旁人不為所知的難事,每個家庭都有別人所不同的煩惱。看著貌似很幸福的家庭,也有自己的煩惱事,只不過沒有說出來而已。
有一次我在我的群裡說這話時候信通院的劉老師說可以寫個專題。今天先開個頭吧。 計算機是二進位制的,只認識 0和1,連2都不認識。所以很多時候是真假的判斷。資料庫也是計算機的一個分支,也不例外。
一般開發寫SQL,select * from t where 1=1.這是為了後續增加條件 and t.id=1這樣的繼續往後新增。
1、如果單獨1=1這樣是恆等於真所以這樣是全表查詢。這種是有意而為之。
2、如果 select * from t where t.id=1 or 1=1 ,由於or是或的關係,而1=1又是恆為真,又是全表。而這個就是SQL隱碼攻擊的一個典型體現。
3、如果select * from t where t.id>1,那麼也是恆為真,返回所有符合條件的。只不過是id大約1的幾乎是所有的,如果有一億條資料,那麼就是返回1億資料。
4、如果select * from t where t.id!=1,那麼也是恆為真,返回所有符合條件的。同上。
以上可能還算常見, 接下來可能就是大家沒見過的。
5、如果select * from t where 1-1 and 其他條件。說真的我第一次見到1-1.這是什麼操作?後來想想,想通了,鍵盤上=和-是挨著的,開發不仔細,本來是想1=1結果變成了1-1.那麼就是select * from t where 0
0代表為假。所以全部不顯示。而這種不報錯的是可以執行的,只是執行了個寂寞。
6、由於疏忽漏寫,基於剛才的大家知道select * from t where 1是全部,0是什麼都不做。
那麼如果本來想 update t set name='1' where id=1;結果寫錯了update t set name='1' where 1呢?
期望是下面的圖。
漏寫了id=1,而執行就變成了這樣。
這個時候就希望是Oracle吧。還能給你用閃回找回。其他資料庫指望備份也不可能恢復出錯之前,還需要一些工作量,甚至較大的工作量。如果這個表有幾千萬上億。那真的就呵呵了。
5和6是我們不常見的問題,但是隻有你想不到的,沒有開發做不到的。這就是資料庫流下的淚水。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2896635/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫之淚第五章節資料庫
- 資料庫之淚第二章節資料庫
- 資料庫之淚第四章節資料庫
- 第一章---資料庫介紹資料庫
- mysql資料庫操作之------查的各種小細節MySql資料庫
- MySQL資料庫初級學習筆記---第一章-資料庫概述MySql資料庫筆記
- 大資料圖資料庫之TAO資料庫大資料資料庫
- mongo資料庫單節點搭建Go資料庫
- 第一章:第一節資料載入及初步觀察-課程
- (資料庫之pymysql)資料庫MySql
- 資料庫之DAO資料庫
- 資料庫之AR資料庫
- 國產資料庫調研之——AntDB資料庫資料庫
- 資料庫系統概述之國產資料庫資料庫
- MYSQL資料庫常用操作命令節選MySql資料庫
- 資料庫系統概述(章節摘要)資料庫
- 教資教育知識與能力之第一章第五節 教育制度
- 《資料庫系統概論》第一章筆記資料庫筆記
- 資料庫系統概論 第一章 緒論資料庫
- 第一章. 理解什麼是資料庫恢復資料庫
- 【RAC】刪除RAC資料庫節點(一)——刪除資料庫例項資料庫
- 資料庫升級之-資料泵資料庫
- 3節點RAC資料庫夯故障分析資料庫
- exadata vmwate 安裝資料庫節點資料庫
- 資料庫安全之金融資料庫
- MySQL資料庫之索引MySql資料庫索引
- luffy之資料庫配置資料庫
- Go之資料庫操作Go資料庫
- 資料庫之建立索引資料庫索引
- mongoDB資料庫之聚合MongoDB資料庫
- oracle 之資料庫核查Oracle資料庫
- 資料庫國產化實戰之達夢資料庫資料庫
- 資料庫系統概述之資料庫最佳化資料庫
- IOS資料儲存之Sqlite資料庫iOSSQLite資料庫
- IOS資料儲存之FMDB資料庫iOS資料庫
- 大資料python包mrjob的血淚史大資料Python
- RAC資料庫的RMAN備份異機恢復到單節點資料庫資料庫
- MySQL預設資料庫之mysql庫MySql資料庫