110 一般警察特考二等 刑事警察人員數位鑑識組 資料庫管理與運用 考古題詳解

110 年・一般警察特考・二等・刑事警察人員數位鑑識組
試題代碼 資料庫管理與運用

第 一 題30 分

在某國家,其圖書館公會欲建置一個資料庫。

該國有數十間公立圖書館,各圖書館有其編號與名稱,此二者均不會重複。各圖書館至少有一個分館。分館編號、名稱、所在地址、設立時間,均是必須留存的紀錄。不過,不同圖書館可能有相同的分館名稱或編號,例如「夢想圖書館」、「閱悅圖書館」均有 001 號及「信義分館」;但同一圖書館不可能有相同的分館名稱或編號。

民眾均得免費至各圖書館加入會員,辦理借書證借書。各圖書館借書證不相通,但同一圖書館可在其各分館借書。要蒐集民眾的身分證字號、姓名、性別、手機、地址等資料。另外,各圖書館也會統一給每位民眾一個借書證編號,而各圖書館主要使用的是此編號。

書籍有其獨一的國際標準書號(ISBN)來辨識,當然有名稱。書籍的出版商除其名稱、地址外,各給一個編號。書籍有其作者,當然可能一本書有多位作者。對於作者,我們各給一個編號,不過只知其名字、國籍。

圖書館購置並保管書籍的複本(Book Copy)。每一書籍複本各有其獨一的索書號(Call Number)及條碼號(Bar Code)。

例如「美人記」為一部小說叢書,全集共有 10 冊。「大同圖書館」「信義分館」保有其第 4 集(ISBN 為 978-986-96855-6-6)兩個複本,其索書號分別為 857.7 1171 V4 c1、857.7 1171 V4 c2。

會員借書是刷書籍複本的條碼號,資料庫要記錄其借出時間(含日期與時、分、秒)、歸還時間、逾期罰金(借期為 21 天,每超過一天罰 10 元)。

注意:

  1. 同一人可能對同一書籍複本借過多次。例如李小花在 2018/10/1 借過「美人記」第 4 集 857.7 1171 V4 c1,2020/9/3 又再借一次。此情況甚至有可能發生在同一天,例如 2018/10/1 借、還、又再借上述 857.7 1171 V4 c1。
  2. 會員可能同一天借多本書,但是還書時不見得同時歸還。

請針對上述資訊需求,繪出實體關係圖(Entity-Relationship Diagram),必須標示出主鍵(Primary Keys),另註明除主鍵外的其他候選鍵,以及各實體參與各關係之「至少」、「至多」的對應比率次數限制。

此圖中不得有多餘的實體或關係。對實體、關係、屬性的命名,可以選擇中文、英文夾雜;必要時請另註明中英對照,以避免看不懂英文命名的意涵。

同時請注意:實體關係圖中不得漏列題目中所提及的屬性,亦不得增列題目未談到的屬性。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查實體關係圖(ERD)的辨識與建模,重點是:

  • 主鍵與候選鍵:主鍵用來唯一識別實體;候選鍵是所有能唯一識別實體的最小屬性組合。題目要求標示主鍵,並列出主鍵以外的候選鍵。
  • 弱實體與複合主鍵:分館編號與名稱只在同一圖書館內不重複,因此須結合所屬圖書館的編號才能唯一識別分館。
  • 基數與參與限制:以「至少、至多」標示關係兩端的參與次數;例如每間圖書館至少有一個分館,表示圖書館端的分館數下限為 1。
  • 關係本身有屬性:借閱需要記錄借出、歸還時間及逾期罰金;同一會員可多次借同一複本,因此借閱不能只用會員與複本組成的鍵識別,必須納入借出時間。

本題不是選擇題,沒有選項分析。

解題方法

先將題目中的名詞整理成實體,再找出實體間的關係與限制。為符合「不得增列題目未談到的屬性」,不自行加入會員流水號、借閱流水號等欄位;重複發生的借閱以題目已有的借出時間區分。

實體、屬性與鍵

圖示約定:PK 表示主鍵;AK 表示主鍵以外的候選鍵;複合鍵以括號列出。

圖書館 Library
 PK:圖書館編號
 AK:圖書館名稱

分館 Branch(弱實體)
 PK:(圖書館編號, 分館編號)
 AK:(圖書館編號, 分館名稱)
 屬性:分館編號、分館名稱、所在地址、設立時間

會員 Member
 PK:(圖書館編號, 借書證編號)
 AK:(圖書館編號, 身分證字號)
 屬性:身分證字號、姓名、性別、手機、地址、借書證編號

書籍 Book
 PK:ISBN
 屬性:ISBN、書名

出版商 Publisher
 PK:出版商編號
 屬性:出版商編號、名稱、地址

作者 Author
 PK:作者編號
 屬性:作者編號、名字、國籍

書籍複本 Book Copy
 PK:條碼號
 AK:索書號
 屬性:索書號、條碼號

借閱 Borrowing(關係實體)
 PK:(圖書館編號, 借書證編號, 條碼號, 借出時間)
 屬性:借出時間、歸還時間、逾期罰金

會員的借書證編號由各圖書館統一編配,且各館借書證不相通,因此跨圖書館識別會員時,需把圖書館編號納入主鍵。題目說民眾身分證字號可用來蒐集民眾資料,並以各館借書證編號作為主要使用編號;在同一圖書館內,身分證字號也能識別該會員,故列為候選鍵。

分館是弱實體:分館編號及名稱都只保證在同一圖書館內不重複,所以分館主鍵分別由「圖書館編號+分館編號」構成;以「圖書館編號+分館名稱」也能唯一識別分館,列為候選鍵。

書籍複本的索書號與條碼號各自唯一,故條碼號作主鍵,索書號列為其他候選鍵。借閱主鍵納入借出時間,可區分同一會員對同一複本的多次借閱,包括同一天借還後再次借閱的情形。

關係與參與次數限制

圖書館 (1..*) ──擁有── (1..1) 分館

圖書館 (0..*) ──辦理會員── (1..1) 會員

分館 (0..*) ──保管── (1..1) 書籍複本
書籍 (0..*) ──有複本── (1..1) 書籍複本

出版商 (0..*) ──出版── (1..1) 書籍
書籍 (1..1) ──由出版商出版── (0..*) 出版商

書籍 (1..*) ──著作── (0..*) 作者

會員 (0..*) ──借閱── (0..*) 書籍複本

上列「書籍—出版商」表示每本書由一個出版商出版;一個出版商可出版零本或多本書。「書籍—作者」為多對多:每本書至少有一位作者;題目未規定每位作者至少著作一本書,因此作者端下限為 0。

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 二 題25 分

下面三個資料庫表格分別代表賽車手(Racer)、跑車(Sports_Car)及駕駛(Drive)的資料。

Racer 表格包含賽車手資料:編號(RID)、姓名(Name)、手機(CellPhone)、評等(Rating)及年齡(Age)。評等資料值為 1 至 10 間的整數,數值越大越好。

Sports_Car 表格包含跑車資料:賽車編號(SNum)、牌照號碼(License_Num)、引擎號碼(Engine_Num)、可開的最高速度(Max_Speed)及顏色(Color)。顏色資料值如 red、green、yellow 等各種顏色。

Drive 表格包含某賽車手編號(RID)於某天(Date)開某跑車編號(SNum)的資料。Date 格式為 YYYY-MM-DD。

Racer (RID, Name, CellPhone, Rating, Age)

Sports_Car (SNum, License_Num, Engine_Num, Max_Speed, Color)

Drive (RID, SNum, Date)

請以 SQL 語言,寫出下列查詢:

(一)在 2021-06-06 當天沒開紅色跑車的賽車手姓名。(8 分)

(二)在 2021-06-17 當天開各種顏色跑車的賽車手人數。(8 分)

(三)想了解評等至少為 6、年齡至少 18 歲的賽車手,各評等賽車手族群的平均年齡;但只對滿足上述條件之各評等賽車手人數超過 3 人者有興趣,需要去統計列出。(9 分)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查關聯式資料庫的多表連接、集合排除、分組聚合與分組篩選:

  • Racer 與 Drive 以 RID 連接;Drive 與 Sports_Car 以 SNum 連接。
  • WHERE 用來篩選個別資料列;GROUP BY 用來依欄位分組;HAVING 用來篩選分組後的結果。
  • COUNT(DISTINCT ...) 可避免同一賽車手因多筆駕駛紀錄,在人數統計中被重複計算。
  • 「沒有開過符合條件的車」屬於反向存在判斷,可用 NOT EXISTS 表達。

解題方法與 SQL

(一)2021-06-06 當天沒開紅色跑車的賽車手姓名

以 NOT EXISTS 檢查每位賽車手是否沒有任何一筆紀錄,同時符合指定日期且所開跑車為紅色。這種寫法會列出當天沒有開紅車的人,也包含當天沒有駕駛紀錄的人。

SELECT R.Name
FROM Racer AS R
WHERE NOT EXISTS (
 SELECT 1
 FROM Drive AS D
 JOIN Sports_Car AS S
 ON D.SNum = S.SNum
 WHERE D.RID = R.RID
 AND D.Date = '2021-06-06'
 AND S.Color = 'red'
);

若同一賽車手有多筆資料,姓名可能重複;題目要求列出賽車手姓名而非駕駛紀錄,若需每個姓名只出現一次,可在 SELECT 後加上 DISTINCT。

(二)2021-06-17 當天開各種顏色跑車的賽車手人數

先連接 Drive 與 Sports_Car,限定日期後依顏色分組。每組計算不同賽車手的數量,避免同一人當天開同色跑車多次而重複計數。

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 三 題25 分

假設要設計一個犯罪的關聯式資料庫,已知屬性包含 AA、BB、CC、DD、EE、FF 六者,已知的功能相依如下:

A→{B,C,D,E,F}A\rightarrow\{B,C,D,E,F\}

{B,C}→{A,D,E,F}\{B,C\}\rightarrow\{A,D,E,F\}

B→FB\rightarrow F

D→ED\rightarrow E

D→BD\rightarrow B

(一)請先以功能相依的推導,找出上述功能相依的 Minimal Cover。(7 分)

(二)若上述六個屬性形成一個 Universal Relation RR,請問 RR 所有的候選鍵,並呈現你的功能相依推導。(6 分)

(三)請對此犯罪的關聯式資料庫,列出滿足第三正規化的關聯資料庫綱要設計,並說明為何滿足第三正規化。(12 分)

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查功能相依的最小覆蓋、候選鍵判定,以及第三正規化(3NF)分解。

功能相依 X→YX\rightarrow Y 表示:在關係中,任意兩筆資料只要 XX 值相同,YY 值就必須相同。最小覆蓋須符合三項條件:

  1. 每條相依右側只有一個屬性。
  2. 左側沒有多餘屬性。
  3. 沒有可刪除的冗餘功能相依。

屬性集合 XX 的閉包 X+X^+,是由已知功能相依可推得的所有屬性。若 X+=RX^+=R,則 XX 是超鍵;若再沒有任何真子集是超鍵,則 XX 是候選鍵。

3NF 的判準是:對每一個非平凡功能相依 X→AX\rightarrow A,至少符合下列之一:

  • XX 是超鍵;或
  • AA 是主屬性,也就是至少出現在一個候選鍵中。

(一)求 Minimal Cover

先將右側拆成單一屬性:

A→B,A→C,A→D,A→E,A→FBC→A,BC→D,BC→E,BC→FB→F,D→E,D→B\begin{aligned} A&\rightarrow B,\quad A\rightarrow C,\quad A\rightarrow D,\quad A\rightarrow E,\quad A\rightarrow F\\ BC&\rightarrow A,\quad BC\rightarrow D,\quad BC\rightarrow E,\quad BC\rightarrow F\\ B&\rightarrow F,\quad D\rightarrow E,\quad D\rightarrow B \end{aligned}

接著檢查左側多餘屬性及冗餘相依。

化簡 BC→A,D,E,FBC\rightarrow A,D,E,F

  • 在 BC→ABC\rightarrow A 中,CC 不多餘:由 BB 無法推出 AA,由 CC 也無法推出 AA。
  • 在 BC→DBC\rightarrow D 中,CC 不多餘:由 BB 無法推出 DD,由 CC 也無法推出 DD。
  • BC→EBC\rightarrow E 可由 BC→DBC\rightarrow D 及 D→ED\rightarrow E 推出,因此刪除。
  • BC→FBC\rightarrow F 可由 B→FB\rightarrow F 推出,因此刪除。

化簡 A→E,FA\rightarrow E,F

  • A→EA\rightarrow E 可由 A→DA\rightarrow D 及 D→ED\rightarrow E 推出,因此刪除。
  • A→FA\rightarrow F 可由 A→BA\rightarrow B 及 B→FB\rightarrow F 推出,因此刪除。

其餘相依皆不可刪除。例如 D→BD\rightarrow B 不可由其他相依推出;A→DA\rightarrow D 也不可由其餘相依推出。

因此最小覆蓋為:

{A→B, A→C, A→D, BC→A, BC→D, B→F, D→E, D→B}\boxed{ \{A\rightarrow B,\ A\rightarrow C,\ A\rightarrow D,\ BC\rightarrow A,\ BC\rightarrow D,\ B\rightarrow F,\ D\rightarrow E,\ D\rightarrow B\} }

(二)求所有候選鍵

先觀察右側屬性:所有功能相依的右側都沒有 CC,所以 CC 不可能由其他屬性推出。每一個候選鍵都必須包含 CC。

計算 A+A^+

A+={A}A^+=\{A\}

由 A→B,C,DA\rightarrow B,C,D,加入 B,C,DB,C,D;再由 B→FB\rightarrow F 加入 FF,由 D→ED\rightarrow E 加入 EE。故:

A+={A,B,C,D,E,F}A^+=\{A,B,C,D,E,F\}
🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

第 四 題20 分

假設某設計師設計了一個全國警察資料庫,其中包含 police 表格。可能部署的資料庫管理軟體是微軟 SQL Server,也可能是 MySQL。

當警員想檢視自己的資料時,必須輸入自己的 ID 與密碼。該設計師以 SQL 程式的字串直接結合對話框所取得的兩個字串來搜尋資料庫並回應,示意如下:

SELECT * FROM police WHERE (ID = '輸入的 ID 字串') AND (password = '輸入的密碼');

上述單引號內的「輸入的 ID 字串」表示直接由對話框取得的 ID 字串;「輸入的密碼」也是直接由對話框取得的密碼字串。

例如警員甲的 ID 是 john,密碼是 John2021AbCd5678。警員甲輸入後,程式片段會變成:

SELECT * FROM police WHERE (ID = 'john') AND (password = 'John2021AbCd5678');

請問這樣的程式寫法可能會有什麼資安風險問題?為什麼?請假設至少兩種狀況,以 SQL 程式詳細解釋為何有可能產生資安風險。

🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查 SQL Injection(SQL 注入)。程式把使用者輸入直接串接進 SQL 語句,資料庫便會把輸入中的引號、運算子與註解符號當成 SQL 語法解析,而非單純的 ID 或密碼文字。

因此,攻擊者可改變 WHERE 條件的意義,造成登入驗證繞過或查詢資料外洩。實際影響範圍取決於資料庫帳號的權限。

解題方法

觀察使用者輸入會被放在 SQL 單引號內,再檢查輸入能否:

  1. 用單引號結束原本的字串。
  2. 加入新的 SQL 條件。
  3. 用註解符號遮蔽原本的密碼檢查或後續語句。

只要輸入能改變查詢結構,就不是一般的輸入驗證問題,而是 SQL 注入。

狀況一:注入永遠成立的條件,取得整張資料表

假設攻擊者把 ID 欄位輸入為:

') OR 1=1 -- 

密碼欄位可輸入任意內容。串接後的 SQL 會成為:

SELECT * FROM police
WHERE (ID = '') OR 1=1 -- ') AND (password = '任意內容');

1=1 永遠成立;-- 則將該行後續內容註解掉,因此原本的密碼檢查不會執行。查詢條件實際上等同於「ID 為空字串,或條件永遠成立」,會回傳 police 表中的所有資料。

這會繞過登入檢查,並使警員資料遭到未授權讀取。SQL Server 與 MySQL 都支援 -- 行註解;MySQL 的 -- 後方須接空白或控制字元,本例已提供空白。

🔒

後續完整解題步驟與【答案】

免費註冊,享 3 天全站完整詳解閱覽。

免費註冊

其他考古題