我喜歡大衛(wèi)·芬奇(David Fincher)拍的電影《龍紋身女孩》,他成功的把小說《龍紋身女孩》搬上了熒幕,超出了我的預期。我本以為這又是一部膚淺的、憤世嫉俗的用來斂錢的好萊塢電影,事實情況卻是,這是一部情節(jié)緊張,能引起共鳴的電影,只是里面的淫殺犯罪讓人毛骨悚然。我最喜歡的一個情節(jié)是龍紋身女孩用SQL來查找40年前的兇殺案的過程。

我們從電影里可以看到她使用筆記本電腦,輕而易舉的進入瑞典警察局數(shù)據(jù)庫,當她敲入像‘unsolved(未破案)’和‘decapitation(斬首)’等關鍵詞時,屏幕上翻滾著綠色的檢索出的信息,雖然我們看不清她使用的完整的查詢語句:
 
處于一種天生的好奇,我忍不住截取了這些鏡頭畫面,用Photoshop拼接了一下,下面是我得到的結果:

你馬上能發(fā)現(xiàn),這不是Oracle SQL——很顯然 AS 關鍵字在Oracle里不能用在表假名上。事實上,如果我們回去看看她那個令人興奮的查詢結果輸出時,你會看到 mysql 的提示符,而且還有 use [dbname] 連接數(shù)據(jù)庫的語法,下面是一個更詳細的畫面:

我們實際上可以把她用的left join關鍵詞表的SQL語句整理出來。
最終我們獲得了一個全屏的輸出結果信息:

下面就是我們Oracle“WTF研究會”部門重新構造出的她使用的SQL:
- SELECT DISTINCT v.fname, v.lname, i.year, i.location, i.report_file
- FROM Incident AS i
- LEFT JOIN V(ictim?)...
- LEFT JOIN Keyword AS k ON k.incident_id = i.id
- WHERE i.year BETWEEN 1947 AND 1966
- AND i.type = 'HOMICIDE'
- AND v.sex = 'F'
- AND i.status = 'UNSOLVED'
- AND ...
- OR v.fname IN ('Mari', 'Magda')
- OR SUBSTR ...
- AND (k.keyword IN ('rape', 'decapitation', 'dismemberment', 'fire', 'altar', 'priest', 'prostitute')
- ...
- AND SUBSTR(v.fname, 1, 1) = 'R' AND SUBSTR(v.lname, 1, 1) = 'L');
-
- +
- | fname | name | year | location | report_file |
- +
- | Anna | Wedin | 1956 | Mark | FULL POLICE REPORT NOT DIGITIZED |
- | Linda | Janson | 1955 | Mariestad | FULL POLICE REPORT NOT DIGITIZED |
- | Simone | Grau | 1958 | Goteborg | FULL POLICE REPORT NOT DIGITIZED |
- | Lea | Persson | 1962 | Uddevalla | FULL POLICE REPORT NOT DIGITIZED |
- | Kajsa | Severin | 1962 | Dals-Ed | FULL POLICE REPORT NOT DIGITIZED |
- +
你也許會很驚訝,很奇怪,這樣一個頂級的黑客為什么要outer-join的方式連接Victims(被害人)表和Keywords(關鍵詞)表呢,還使用這樣的文字過濾方式,豈不知MySQL里是有 like語法的,更奇怪的是輸出結果里根本沒有姓和名分別以’R L’打頭的受害人。 本文出自:億恩科技【xuefeilisp.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|