這篇文章寫給剛踏入資安領域的你——不需要任何程式底子,讀完就能搞懂資料庫到底在幹嘛、跟資安有什麼關係。
一、資料庫是什麼?
你可以把資料庫想成一個「超級進階版的 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 挑戰)實際動手打打看,邊打邊學最快!
