[資安入門] 010 資料庫入門:資安人必備的基礎知識

這篇文章寫給剛踏入資安領域的你——不需要任何程式底子,讀完就能搞懂資料庫到底在幹嘛、跟資安有什麼關係。


一、資料庫是什麼?

你可以把資料庫想成一個「超級進階版的 Excel」。

日常生活中,我們到處都在跟資料庫打交道:網購下單的訂單紀錄、銀行帳戶的存款餘額、社群平台上的貼文與留言……這些資料不是存在某個人的電腦桌面上,而是被放在一個專門設計來「存放、整理、快速查找大量資料」的系統裡——這就是資料庫(Database)

用生活化的比喻來說:

  • 資料夾 → 你把檔案隨便丟進去,要找的時候自己翻。
  • Excel 試算表 → 有欄位、有列,查找方便一點,但資料一多就很卡。
  • 資料庫 → 有完整的規則和索引機制,幾百萬筆資料也能在幾毫秒內找到你要的那一筆。

簡單說,資料庫就是一套有組織地儲存資料、並且能高效率存取的系統。


二、為什麼資安人需要懂資料庫?

你可能會想:「我又不是後端工程師,幹嘛要懂資料庫?」

答案很直接——因為攻擊者的目標就是資料庫裡的資料。

資安領域中,資料庫幾乎無處不在:

1. 攻擊面:SQL Injection(SQL 注入)
這是 OWASP Top 10 上年年有名的經典漏洞。攻擊者透過網頁的輸入欄位(像登入框、搜尋框)塞入惡意的 SQL 指令,就可能繞過驗證、偷走整個資料庫。如果你連 SQL 長什麼樣子都不知道,要怎麼理解這個攻擊手法?

2. 防禦面:日誌分析與事件調查
資安事件發生時,你需要從各種日誌(Log)裡撈資料。這些日誌很多時候就存在資料庫中,你必須會寫查詢語法才能快速找到關鍵線索。

3. 滲透測試與紅隊演練
在做滲透測試的時候,拿到資料庫的存取權限幾乎等於拿到了「寶庫的鑰匙」。帳號密碼、個資、信用卡號……全部都在裡面。

4. 合規稽核
台灣的《個人資料保護法》對個資的儲存與存取都有規範。資安人員需要了解資料庫的存取控制機制,才能確保企業合規。

一句話總結:資料庫是攻防雙方的必爭之地,不懂資料庫,就像打仗不認識地圖。


三、DBMS 是什麼?

光有資料庫還不夠,你還需要一套「管理工具」來操作它——這就是 DBMS(Database Management System,資料庫管理系統)

資料庫本身只是「資料的集合」,而 DBMS 是負責管理這些資料的軟體。它幫你處理以下事情:

  • 建立與刪除資料庫和資料表
  • 新增、修改、刪除、查詢資料(也就是常說的 CRUD)
  • 權限控管:誰可以看哪些資料、誰可以改
  • 備份與還原:出事的時候能把資料救回來
  • 同時處理多人存取:不會因為兩個人同時寫入而搞爛資料

常見的 DBMS 有這些:

DBMS 名稱 類型 常見用途
MySQL 關聯式(SQL) 網站後端、WordPress
PostgreSQL 關聯式(SQL) 企業應用、地理資訊
Microsoft SQL Server 關聯式(SQL) 企業內部系統
SQLite 關聯式(SQL) 手機 App、小型應用
MongoDB 非關聯式(NoSQL) 大數據、即時應用
Redis 非關聯式(NoSQL) 快取、即時排行榜

你可以這樣理解:資料庫是倉庫,DBMS 就是倉庫管理員。


四、SQL 跟 NoSQL 的差異

資料庫的世界大致分成兩大派系:SQL(關聯式)NoSQL(非關聯式)

SQL(關聯式資料庫)

  • 資料存在表格(Table) 裡,就像 Excel 有欄位(Column)和列(Row)。
  • 表格之間可以透過關聯(Relation) 互相連結。例如「訂單表」可以透過「客戶 ID」連到「客戶表」。
  • 使用 SQL(Structured Query Language) 這套標準語言來操作資料。
  • 資料結構必須事先定義好(稱為 Schema),結構嚴謹。

NoSQL(非關聯式資料庫)

  • 資料存放的格式比較彈性,常見的有:文件型(JSON 格式)、鍵值型(Key-Value)、圖形型(Graph)等。
  • 不需要事先定義嚴格的結構,想加欄位隨時加。
  • 特別適合處理大量、快速變動、結構不固定的資料。

比一比

比較項目 SQL(關聯式) NoSQL(非關聯式)
資料結構 固定表格,需事先定義 Schema 彈性格式,不需固定結構
查詢語言 SQL(標準化語言) 各家語法不同
適合情境 交易系統、需要資料一致性 大數據、即時分析、彈性需求
代表 MySQL、PostgreSQL MongoDB、Redis
資安常見度 極高(SQL Injection 的目標) 也會被攻擊(如 NoSQL Injection)

對資安新手來說,先把 SQL 學好是最重要的,因為絕大多數的 Web 應用程式後端都還是用關聯式資料庫,而 SQL Injection 也是你最先會碰到的攻擊手法之一。


五、SQL 查詢語言有哪些?

SQL 的指令依照功能,可以分成以下幾大類:

1. DQL(Data Query Language)— 查詢資料

用來「查」資料,是你最常用到的。

  • SELECT:從資料表中撈出你要的資料

2. DML(Data Manipulation Language)— 操作資料

用來「增、改、刪」資料。

  • INSERT:新增一筆資料
  • UPDATE:修改現有資料
  • DELETE:刪除資料

3. DDL(Data Definition Language)— 定義結構

用來「建立或修改」資料庫的結構。

  • CREATE:建立資料表、資料庫
  • ALTER:修改資料表的結構(例如新增欄位)
  • DROP:刪除整張資料表

4. DCL(Data Control Language)— 權限控管

用來管理誰有權限做什麼。

  • GRANT:給予某個使用者權限
  • REVOKE:收回某個使用者的權限

5. TCL(Transaction Control Language)— 交易控制

用來管理「交易」的完整性(確保一連串操作要嘛全部成功,要嘛全部取消)。

  • COMMIT:確認交易完成
  • ROLLBACK:交易失敗,全部回復原狀

六、實戰舉例

以下用一個情境帶你走過最常見的 SQL 操作。

情境:你是某間電商網站的資安人員,需要調查一起異常登入事件。

步驟一:先建立一張使用者資料表

CREATE TABLE users (
    id         INT PRIMARY KEY,
    username   VARCHAR(50),
    email      VARCHAR(100),
    password   VARCHAR(255),
    login_time DATETIME,
    ip_address VARCHAR(45)
);

步驟二:新增幾筆測試資料

INSERT INTO users (id, username, email, password, login_time, ip_address)
VALUES
(1, 'alice',   '[email protected]',   'hashed_pw_1', '2026-02-28 08:30:00', '203.69.11.25'),
(2, 'bob',     '[email protected]',     'hashed_pw_2', '2026-02-28 03:15:00', '185.220.101.1'),
(3, 'charlie', '[email protected]', 'hashed_pw_3', '2026-02-28 09:00:00', '140.112.5.10');

步驟三:查詢所有使用者資料

SELECT * FROM users;

步驟四:找出凌晨登入的可疑帳號(可能是異常行為)

SELECT username, login_time, ip_address
FROM users
WHERE login_time BETWEEN '2026-02-28 00:00:00' AND '2026-02-28 06:00:00';

這會撈出 bob 的紀錄——凌晨 3:15 從一個境外 IP 登入,很可疑。

步驟五:發現 bob 帳號被盜,先把密碼強制重設

UPDATE users
SET password = 'temp_reset_pw'
WHERE username = 'bob';

步驟六:事件處理完畢,移除測試用的資料表

DROP TABLE users;

SQL Injection 長什麼樣子?

假設網站的登入功能背後有這樣的 SQL:

SELECT * FROM users WHERE username = '輸入的帳號' AND password = '輸入的密碼';

如果攻擊者在帳號欄位輸入:

' OR '1'='1' --

那最終被執行的 SQL 就會變成:

SELECT * FROM users WHERE username = '' OR '1'='1' --' AND password = '';

'1'='1' 永遠為真,-- 後面的內容被當成註解忽略掉了。結果?不用密碼就能登入任何帳號。

這就是為什麼資安人員一定要懂 SQL——你得知道它怎麼運作,才能理解漏洞從哪來、怎麼防。


小結

你學到了什麼 重點
資料庫 有組織地存放與管理大量資料的系統
為什麼資安人要懂 SQL Injection、日誌分析、滲透測試、合規稽核都需要
DBMS 管理資料庫的軟體,像 MySQL、PostgreSQL、MongoDB
SQL vs NoSQL SQL 結構嚴謹適合交易系統;NoSQL 彈性大適合大數據
SQL 語言分類 DQL 查、DML 增改刪、DDL 定義結構、DCL 權限、TCL 交易
實戰 從建表、新增、查詢到理解 SQL Injection 的原理

下一步建議: 找一個線上的 SQL 練習平台(如 SQLZoo、HackTheBox 的 SQL 挑戰)實際動手打打看,邊打邊學最快!

飛飛
飛飛

講師學歷:臺科資工所、逢甲資工系畢業。
技術專長:OSINT、滲透測試、網站開發、專業易懂教育訓練。
證照書籍:OSCP、OSCE³、著《資安這條路:領航新手的 Web Security 指南》。
教學經驗:60+ 企業教學經驗、指導過上百位學員。
教學特色:新手友善、耐心指導、擅長圖解(流程圖、心智圖)引導學習。
社群經驗:目前經營全臺資安社群 CURA,曾任臺科資安社社長、逢甲黑客社社長。
社群交流:LINE 社群《飛飛的資安大圈圈》,即時分享經驗、鼓勵交流。
社群分享:FB 粉專《資安這條路,飛飛來領路》,分享文章與圖卡整理。
個人網站:feifei.tw 分享資安技術文章;pbtw.tw 分享 AI 相關應用;ssdlc.feifei.tw 分享軟體安全開發流程文章。