第1題
隨著資安威脅與法規合規性(如ISO 27001)要求提升,資料庫稽核 (Database Audit)成為確保數據完整性的關鍵機制。假設現有用於記錄 該稽核數據之關聯式資料庫,其資料表及內容敘述如下: 稽核政策(政策編號, 政策名稱, 物件名稱, 物件類型, 稽核動作, 是否啟用, 建立者編號) 政策編號為PK;物件類型之內容值可為「TABLE」、「VIEW」、 「STORE PROCEDURE」、「FUNCTION」之英文;稽核動作之內容 值可為「SELECT」、「INSERT」、「UPDATE」、「DELETE」等指令。 稽核日誌(日誌編號, 政策編號, 操作時間, 操作類型) 日誌編號為PK;政策編號為FK,參考「稽核政策」表中的政策編號。 異常事件(事件編號, 日誌編號, 嚴重程度, 偵測時間, 事件描述, 是否已結案) 事件編號為PK;日誌編號為FK,參考「稽核日誌」資料表的日誌編 號;嚴重程度之內容值可為「高」、「中」、「低」;是否已結案之內容 值為「Y」或「N」。 稽核人員(稽核人員編號, 姓名, 所屬部門) 稽核人員編號為PK。 事件處理紀錄(處理編號, 事件編號, 稽核人員編號, 處理日期) 處理編號為PK;事件編號為FK,參考「異常事件」資料表中的事件 編號;稽核人員編號為FK,參考「稽核人員」資料表的稽核人員編號。 請回答下列問題,其中 至 請使用SQL 語法進行作答。 請透過上述關聯式綱目畫出實體關聯式模型(Entity-Relationship Model, ER Model)。(10 分) 查詢各嚴重程度異常事件的統計資訊,列出嚴重程度、事件總數、已 結案數、未結案數、未結案比例,未結案比例四捨五入計算至小數點 後第2 位,依事件總數由高至低排序。(5 分) 查詢每位稽核人員於2026 年的處理績效,列出稽核人員姓名、所屬部 門、處理事件總數、其中高嚴重程度事件數,只列出處理事件總數大 於5 件的稽核人員,依處理事件總數由高至低排序。(5 分) 假設現新增一筆稽核政策資料,政策編號為「P2025001」,政策名稱為 「財務資料表異動稽核」,物件名稱為「Finance」,物件類型為 「TABLE」,稽核動作為「DELETE」,是否啟用為「Y」,建立者編號 為「U001」。請寫出對應的SQL 新增語法。(5 分)
參考解答(AI 生成,非官方)
- 一、實體(Entity)與屬性辨識:本綱目可萃取出四個獨立實體。稽核政策(Audit Policy)以政策編號為候選鍵,屬性為政策名稱、物件名稱、物件類型、稽核動作、是否啟用、建立者編號;稽核日誌(Audit Log)以日誌編號為主鍵,屬性為操作時間、操作類型;異常事件(Incident)以事件編號為主鍵,屬性為嚴重程度、偵測時間、事件描述、是否已結案;稽核人員(Auditor)以稽核人員編號為主鍵,屬性為姓名、所屬部門。事件處理紀錄因帶有處理日期等描述性屬性,宜視為「處理」關聯的關聯實體(associative entity),繪圖時可畫成菱形加屬性,或畫成弱實體(weak entity)。
- 二、關聯型態與基數標註:(1)稽核政策-稽核日誌為 1:N 的「產生(Generate)」關聯,政策端標 1、日誌端標 N(烏鴉腳),且日誌對政策為完全參與(total participation,雙線);(2)稽核日誌-異常事件為 1:N 的「觸發(Trigger)」關聯,一筆日誌可觸發多筆異常,異常事件必屬某筆日誌;(3)稽核人員-異常事件為 M:N 的「處理(Handle)」關聯,以事件處理紀錄為橋接表,屬性含處理編號與處理日期。因處理編號為單一主鍵,允許同一人重複處理同一事件,屬多重值關聯,需在圖上以基數 (0,N) 標明。
- 三、繪圖配置提醒:以矩形表示實體、菱形表示關聯、橢圓表示屬性,主鍵屬性加底線;1:N 關聯在 N 端畫烏鴉腳,並在連線上標示 1 與 N;參與限制以雙線表示完全參與、單線表示部分參與。另建議以虛線框或註記標明「物件類型 ∈ {TABLE, VIEW, STORE PROCEDURE, FUNCTION}」、「稽核動作 ∈ {SELECT, INSERT, UPDATE, DELETE}」、「嚴重程度 ∈ {高, 中, 低}」、「是否已結案 ∈ {Y, N}」等值域限制(domain constraint),並註明外鍵所在端。考生請依上述結構自行繪製,並確認 FK 與 PK 對應無誤。
- 四、嚴重程度統計查詢(對應第小題):以嚴重程度分組,用 CASE WHEN 配合 SUM 計算已結案與未結案數,再以 ROUND(...,2) 四捨五入至小數第二位。 SELECT 嚴重程度, COUNT(*) AS 事件總數, SUM(CASE WHEN 是否已結案='Y' THEN 1 ELSE 0 END) AS 已結案數, SUM(CASE WHEN 是否已結案='N' THEN 1 ELSE 0 END) AS 未結案數, ROUND(SUM(CASE WHEN 是否已結案='N' THEN 1 ELSE 0 END)*100.0/COUNT(*), 2) AS 未結案比例 FROM 異常事件 GROUP BY 嚴重程度 ORDER BY COUNT(*) DESC; 若「比例」採 0 至 1 的比率而非百分比,則去掉乘 100,結果如 0.33;答題時宜註明所採定義。
- 五、2026 年稽核人員處理績效查詢:以稽核人員為主體串接事件處理紀錄與異常事件,日期建議採半開區間以免漏掉含時分秒的資料;「處理事件總數」宜用 COUNT(DISTINCT 事件編號),避免同一事件多次處理被重複計數。 SELECT A.姓名, A.所屬部門, COUNT(DISTINCT H.事件編號) AS 處理事件總數, COUNT(DISTINCT CASE WHEN E.嚴重程度='高' THEN H.事件編號 END) AS 高嚴重事件數 FROM 稽核人員 A JOIN 事件處理紀錄 H ON A.稽核人員編號 = H.稽核人員編號 JOIN 異常事件 E ON H.事件編號 = E.事件編號 WHERE H.處理日期 >= '2026-01-01' AND H.處理日期 < '2027-01-01' GROUP BY A.稽核人員編號, A.姓名, A.所屬部門 HAVING COUNT(DISTINCT H.事件編號) > 5 ORDER BY 處理事件總數 DESC;
- 六、新增稽核政策:應明列欄位名稱,避免因欄位順序或日後擴充欄位導致錯誤;字串值以單引號括住,且須符合物件類型與稽核動作的值域限制。 INSERT INTO 稽核政策 (政策編號, 政策名稱, 物件名稱, 物件類型, 稽核動作, 是否啟用, 建立者編號) VALUES ('P2025001', '財務資料表異動稽核', 'Finance', 'TABLE', 'DELETE', 'Y', 'U001'); 補充:若資料庫已建立 FK,寫入前須確認建立者編號存在於人員表;若採嚴格模式,物件類型與稽核動作可再加 CHECK 條件以確保資料完整性。