Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

DCL(資料控制語言)入門:SQL 權限管理基礎

最後更新:2025年3月4日資料庫

本文為 SQL 關聯資料庫 基本介紹系列文,第 6 篇:

  1. 關聯式資料庫與資料完整性:初學者指南
  2. SQL 觸發器(Triggers):自動執行的資料庫機制
  3. Django 信號(Signals) vs SQL 觸發器(Triggers):關係與差異解析
  4. 關聯式資料庫與交易(Transaction)機制入門
  5. 深入理解死結(Deadlock)與發生條件
  6. DCL(資料控制語言)入門:SQL 權限管理基礎 👈進度
  7. SQL 儲存程序(Stored Procedure)入門
  8. ORM(對象關係對映):讓資料庫操作更簡單的工具
  9. SQL 儲存程序 vs ORM:如何選擇最適合的數據庫操作方式?
  10. 關聯式資料庫 View(檢視)是什麼?完整指南
  11. 理解 Materialized View:初學者指南

在資料庫管理中,除了資料查詢(SELECT)、插入(INSERT)、更新(UPDATE)和刪除(DELETE) 這些基本操作外,如何控制哪些人可以存取、修改、刪除數據 也是非常重要的一環。

這就是 DCL(Data Control Language,資料控制語言) 的用途。

DCL 主要負責 管理資料庫的存取權限,確保數據的安全性和隱私性,防止未授權的用戶讀取或修改數據。


什麼是 DCL(Data Control Language)?

DCL(資料控制語言) 是 SQL 語言的一部分,負責 控制使用者對資料庫的存取權限。

主要用來設定「誰」可以對資料庫執行哪些操作。這在多使用者系統或企業環境中特別重要,因為企業通常需要確保:

  • 普通員工只能查詢數據,但不能修改或刪除數據。
  • 管理員可以新增、修改、刪除數據,並管理其他使用者的權限。
  • 某些機密數據(如財務報表、客戶個資)只能由特定角色存取。

DCL 主要透過 GRANT(授權)和 REVOKE(撤銷權限) 兩個指令來實現這些權限管理功能。

graph LR;
    A[SQL 總體架構] -->|管理數據| B[DML - 資料操作語言]
    A -->|管理結構| C[DDL - 資料定義語言]
    A -->|管理權限| D[DCL - 資料控制語言]
    A -->|管理交易| E[TCL - 交易控制語言]
    A -->|進階功能| F[其他高級 SQL 概念]
    
    B --> B1[SELECT - 查詢數據]
    B --> B2[INSERT - 插入數據]
    B --> B3[UPDATE - 更新數據]
    B --> B4[DELETE - 刪除數據]

    C --> C1[CREATE - 建立資料庫/表]
    C --> C2[ALTER - 修改表結構]
    C --> C3[DROP - 刪除表]
    C --> C4[TRUNCATE - 清空表]

    D --> D1[GRANT - 授權權限]
    D --> D2[REVOKE - 撤銷權限]

    E --> E1[COMMIT - 提交交易]
    E --> E2[ROLLBACK - 回滾交易]
    E --> E3[SAVEPOINT - 設置保存點]

    F --> F1[儲存程序(Stored Procedure)]
    F --> F2[觸發器(Trigger)]
    F --> F3[索引(Index)]
    F --> F4[視圖(View)]

DCL 的主要指令

DCL 主要包含以下兩個 SQL 指令:

指令功能
GRANT授權(賦予權限) 給特定的使用者或角色,使其能夠執行某些 SQL 操作。
REVOKE撤銷權限,使某個使用者或角色無法再執行先前授予的 SQL 操作。
功能授權(賦予權限) 給特定的使用者或角色,使其能夠執行某些 SQL 操作。
功能撤銷權限,使某個使用者或角色無法再執行先前授予的 SQL 操作。

如何使用 DCL 來管理資料庫的權限?

GRANT:授權權限

GRANT 指令用來賦予特定使用者或角色存取資料庫的權限。語法如下:

GRANT 權限 ON 資料表 TO 使用者;

📌 示例 1️⃣:授予使用者讀取權限

假設我們有一個資料庫 company_db,其中包含 employees 表,我們希望讓 user1 能夠查詢員工資料,但不允許修改。可以使用以下指令:

GRANT SELECT ON company_db.employees TO 'user1';

✅ 結果:使用者 user1 現在可以執行 SELECT 來查詢 employees 表的數據,但無法執行 INSERT、UPDATE 或 DELETE。

📌 示例 2️⃣:授予管理員完整權限

如果 admin_user 需要完全控制 employees 表(讀取、插入、更新、刪除),可以這樣做:

GRANT ALL PRIVILEGES ON company_db.employees TO 'admin_user';

✅ 結果:admin_user 現在可以對 employees 表進行任何操作,包括刪除數據。

📌 示例 3️⃣:授予多個權限


我們也可以同時授予多個權限,例如允許 user2 查詢和插入數據,但不能刪除或修改數據:

GRANT SELECT, INSERT ON company_db.employees TO 'user2';

✅ 結果:user2 只能執行 SELECT 和 INSERT,但不能 UPDATE 或 DELETE。

REVOKE:撤銷權限

REVOKE 指令用來移除先前賦予的權限,防止使用者繼續執行某些操作。語法如下:

REVOKE 權限 ON 資料表 FROM 使用者;

📌 示例 1️⃣:撤銷 user1 的查詢權限

如果我們不希望 user1 再查詢 employees 表,可以使用以下指令:

REVOKE SELECT ON company_db.employees FROM 'user1';

✅ 結果:user1 將無法再使用 SELECT 來查詢 employees 表的數據。

📌 示例 2️⃣:撤銷 admin_user 的所有權限
如果 admin_user 不應再擁有對 employees 表的管理權限,可以這樣做:

REVOKE ALL PRIVILEGES ON company_db.employees FROM 'admin_user';

✅ 結果:admin_user 將失去對 employees 表的所有存取權限。

📌 示例 3️⃣:撤銷部分權限
如果 user2 仍然可以查詢數據,但我們不希望他再插入新數據,可以使用:

REVOKE INSERT ON company_db.employees FROM 'user2';

✅ 結果:user2 現在只能查詢 employees 表,但不能再新增數據。


DCL 在不同資料庫系統的應用

DCL 在不同的 SQL 資料庫系統(如 MySQL、PostgreSQL、Oracle)中有些許不同,但核心概念是一樣的。

資料庫GRANT(授權)REVOKE(撤銷)
MySQLGRANT SELECT ON mydb.users TO 'user1';REVOKE SELECT ON mydb.users FROM 'user1';
PostgreSQLGRANT SELECT ON mydb.users TO user1;REVOKE SELECT ON mydb.users FROM user1;
OracleGRANT SELECT ON mydb.users TO user1;REVOKE SELECT ON mydb.users FROM user1;
GRANT(授權)GRANT SELECT ON mydb.users TO 'user1';
REVOKE(撤銷)REVOKE SELECT ON mydb.users FROM 'user1';
GRANT(授權)GRANT SELECT ON mydb.users TO user1;
REVOKE(撤銷)REVOKE SELECT ON mydb.users FROM user1;
GRANT(授權)GRANT SELECT ON mydb.users TO user1;
REVOKE(撤銷)REVOKE SELECT ON mydb.users FROM user1;

✅ 注意:在某些資料庫系統(如 MySQL)中,修改權限後可能需要執行以下指令讓變更生效:

FLUSH PRIVILEGES;

DCL 的重要性

DCL 在資料庫安全管理中扮演著關鍵角色,以下是它的核心功能:

✅ 確保數據安全性:防止未授權的使用者讀取、修改或刪除敏感數據。
✅ 保護資料完整性:透過設定不同層級的權限,確保只有合適的人員可以修改數據。
✅ 提高系統可管理性:透過 GRANT 和 REVOKE 來靈活控制不同使用者的存取權限。


結論

  • DCL(Data Control Language,資料控制語言)負責管理資料庫的存取權限,確保數據的安全性。
  • GRANT 指令用來授權使用者對資料庫的操作權限,例如允許查詢 (SELECT)、修改 (UPDATE)、刪除 (DELETE) 等。
  • REVOKE 指令用來撤銷使用者的權限,防止未授權存取或誤操作。
  • 不同的 SQL 資料庫(MySQL、PostgreSQL、Oracle)對 DCL 的語法略有不同,但基本原理相同。

透過 DCL,企業可以有效管理資料庫的存取權限,確保數據的安全與穩定! 💡

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 什麼是 DCL(Data Control Language)?
  • DCL 的主要指令
  • 如何使用 DCL 來管理資料庫的權限?
  • DCL 在不同資料庫系統的應用
  • DCL 的重要性
  • 結論