資料庫安全性與權限管理(RBAC, Role-Based Access Control)是不可或缺的基礎設施。ClickHouse 支援細緻的權限設計與 RBAC 機制,能夠確保數據資源的正確隔離與授權,降低操作風險與資安威脅。
元件 | 說明 |
---|---|
User | 資料庫使用者,可指定密碼、網路存取範圍、預設角色等。 |
Role | 角色,承載一組權限(Privilege),可賦予多個使用者。 |
Privilege | 權限,例如 SELECT、INSERT、ALTER、DROP,可指定作用範圍 (Database/Table)。 |
Quota | 資源限制,如每分鐘可執行的查詢數、讀取資料量等。 |
Profile | 設定檔,如 max_memory_usage、readonly 模式等使用者層級設定。 |
RBAC 設計以 User → Role → Privilege 的方式進行權限授予,能讓權限管理變得簡單且可重複使用。
確保 config.xml 中已啟用:
<access_control>
<enabled>true</enabled>
</access_control>
或使用 Docker 時,指定環境變數:
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1
CREATE USER analyst IDENTIFIED WITH plaintext_password BY 'analyst_pass';
CREATE ROLE analytics_reader;
GRANT SELECT ON default.user_events TO analytics_reader;
GRANT analytics_reader TO analyst;
SHOW GRANTS FOR analyst;
CREATE QUOTA daily_quota KEYED BY user_name FOR INTERVAL 1 DAY MAX queries = 1000, errors = 100;
CREATE SETTINGS PROFILE analyst_profile SETTINGS
max_memory_usage = 1000000000,
readonly = 1;
ALTER USER analyst
SETTINGS PROFILE analyst_profile
QUOTA daily_quota;
clickhouse-client --user=analyst --password=analyst_pass --query="SELECT * FROM default.user_events LIMIT 10"
clickhouse-client --user=analyst --password=analyst_pass --query="DROP TABLE default.user_events"
-- Expected: DB::Exception: analyst: Not enough privileges.
情境 | 實作建議 |
---|---|
多使用者查詢不同資料表 | 以 Role 將不同表的 SELECT 權限進行組合管理。 |
嚴格限制查詢資源消耗 | 使用 Quota 及 Profile 限制記憶體、查詢數量、錯誤次數等。 |
只讀帳號/唯讀 API 查詢 | 配置 readonly Profile,禁止寫入/DDL 操作。 |
多租戶 (Multi-Tenant) 架構 | 以 Role 與 Database Scope 控制租戶隔離權限。 |
ClickHouse 的 RBAC 機制,能夠協助你從「靜態權限管理」升級到「動態可控的使用者行為治理」,不僅能細緻控管資料資源存取權限,還能結合 Quota、Profile 等策略進行資源保護與行為限制,提升系統安全性與穩定性。