iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0
自我挑戰組

零程式碼的現代數據力:用 Tableau 與 Dify/n8n 打造自動化商業戰情室 30 天系列 第 27 篇

【Day 27】資料合規不踩雷:在 Tableau 與 n8n 實作列級安全性(RLS)與多租戶權限隔離

  • 分享至 

  • xImage
  •  

隨著我們的商業戰情室功能日漸完備,從互動圖表、情境模擬到 AI 自動化通報應有盡有,但在系統推廣到全公司、甚至跨分公司使用時,IT 主管與法務部門通常會立刻提出一個最嚴厲的審查要求:

「南部區經理絕對不能看到北部區的營收與獲利!」

「外包廠商只能看自己負責的產品線,不可以調閱全公司客戶名單。」

「AI 在 Discord 頻道推播營運摘要時,如何確保主管不會看到越權的敏感機密?」

如果為了不同部門各複製一份儀表板或分流建好幾條 n8n 流程,未來的維護成本將是天文數字。

今天我們將展示企業級 BI 與自動化架構中最關鍵的安全防護機制——列級安全性(Row-Level Security, RLS) 與 多租戶權限過濾,確保「同一座儀表板、同一條管線,每個人登入只能看見屬於自己的數據」!

一、什麼是列級安全性(Row-Level Security, RLS)?
傳統的權限管理往往是「工作表層級」或「專案資料夾層級」(能看這張報表 vs. 不能看這張報表)。

而 RLS(列級安全性) 則是將權限精確控制到「資料集的每一列(Row)」:

當北部主管(User A) 打開報表時,系統在底層強制加入 WHERE Region = 'North'。

當南部主管(User B) 打開同一個網址時,系統動態套用 WHERE Region = 'South'。

即使使用者試圖拉動篩選器或下載摘要資料,系統也會在底層直接攔截,絕無越權讀取其他區域資料的風險。

二、實戰步驟一:在 Tableau 建立使用者安全對應表
在 Tableau 中實作動態 RLS 最穩健且業界通用的做法,是建立一張 使用者權限對應表(Security Entitlement Table):

步驟 1:建立權限映射資料表
在試算表或資料庫中建立一張簡單的權限清單:

sername(登入帳號 / Email)Allowed_Region(授權區域)alice@superstore.comWestbob@superstore.comEastcarol@superstore.comCentralboss@superstore.comSouth💡 若主管有多區權限,可多列記錄或使用特定萬用群組。

步驟 2:在資料模型中進行關聯(Relationships)
打開 Tableau 的「資料來源」頁面。

將剛才的 Security_Mapping 表拖入畫布,與主要的 Orders 表建立關聯。

關聯條件設定為:Orders.Region = Security_Mapping.Allowed_Region。

步驟 3:撰寫動態使用者計算欄位
建立計算欄位,命名為 【資安】RLS_權限過濾器。

輸入 Tableau 原生使用者函數:USERNAME() = [Username]
註:若使用 Tableau Cloud / Server,USERNAME() 會自動抓取目前登入者的帳號名稱。
設為全域資料來源篩選器:

在左側資料來源名稱上點擊右鍵 ➔ 選擇 「編輯資料來源篩選條件 (Edit Data Source Filters)」。

將 【資安】RLS_權限過濾器 加入,勾選為 True。

設定完成後,整份工作簿在資料進入圖表前就已被硬性裁切,非授權區域的資料在記憶體中根本不存在!

三、實戰步驟二:n8n 自動化流程的多租戶分流隔離
不只 Tableau 要防禦,在後端的 n8n 自動通報與 AI 問答流程中,同樣必須做權限隔離:

┌─────────────────────────┐
│ 使用者在通訊軟體發起請求│ ──> 帶有發送者的 User ID / 帳號
└─────────────────────────┘
│
▼
┌─────────────────────────┐
│ n8n 權限查詢節點 │ ──> 比對員工名冊,查詢該員隸屬地區 (如:West)
└─────────────────────────┘
│
▼
┌─────────────────────────┐
│ 資料擷取 (強制帶 Filter)│ ──> 僅撈取 Region = 'West' 的訂單數據
└─────────────────────────┘
│
▼
┌─────────────────────────┐
│ Dify AI 推理與回覆 │ ──> AI 僅針對該主管權限內的資料進行解讀
└─────────────────────────┘
操作步驟:
驗證身分(Authentication):

當 n8n 接收到來自 Discord / Slack 的提問或 Webhook 時,先抓取發話者的 User ID 或 Email。

條件分流(Switch / Filter 節點):

使用 n8n 內建的 Switch 或 Google Sheets Lookup 節點,查詢該使用者被賦予的業務區域代碼。

強制注入查詢條件:

在向資料庫或 Google Sheets 撈取數據時,不可讓使用者自訂查詢範圍。

強制在 API 請求中鎖定其專屬參數:
{
"filter": {
"Region": "{{ $('Lookup_Permission').item.json.Allowed_Region }}"
}
}
這樣就能杜絕一般門市員工藉由 Prompt 越權套取全公司機密財務數字的漏洞。


上一篇
【Day 26】預測未來的決策沙盒:打造 What-If 營運情境模擬器與 AI 損益評估
下一篇
【Day 28】走入正式生產環境:用 Docker Compose 一鍵自架高可用 n8n 與 Dify 伺服器
系列文
零程式碼的現代數據力:用 Tableau 與 Dify/n8n 打造自動化商業戰情室 30 天 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言