BigQuery 資料列層級安全防護機制簡介
本文件說明資料列層級安全性的概念、在 BigQuery 中的運作方式、何時使用資料列層級安全性保護資料,以及其他詳細資訊。
什麼是資料列層級安全性?
資料列層級安全性可讓您篩選資料,並根據符合資格的使用者條件,啟用資料表中特定資料列的存取權。
BigQuery 支援專案、資料集和資料表層級的存取權控管機制,以及透過政策標記實施的資料欄層級安全防護機制。資料列層級安全防護機制會透過資料列層級存取權政策,針對 BigQuery 資料表中的部分資料啟用精細的存取權控管機制,進而擴大最低權限原則的適用範圍。
一個資料表可以有多個資料列層級存取權政策。資料表可以同時使用資料表層級的列層級安全性 ,以及資料集層級、資料表層級和專案層級存取權控管。
資料列層級安全性的運作方式
從較高的層級來看,資料列層級安全防護機制涉及在目標 BigQuery 資料表上建立資料列層級存取政策。這些政策會做為篩選器,根據使用者或群組是否在許可清單中,隱藏或顯示特定資料列。任何不在許可清單中列出的使用者或群組都會遭到拒絕。
具備 Identity and Access Management (IAM) 角色 BigQuery 管理員或 BigQuery 資料擁有者 的授權使用者,可以在 BigQuery 資料表上建立資料列層級存取權政策。
建立列層級存取權政策時,您可以依名稱指定資料表,以及哪些使用者或群組 (稱為 grantee-list
) 可以存取特定列資料。這項政策也包含您要篩選的資料,稱為 filter_expression
。filter_expression
函式就像一般查詢中的 WHERE
子句。
如需建立及使用資料列層級存取權政策的操作說明,請參閱「管理資料列層級安全性」。
如需建立資料列層級存取權政策時的完整語法、用法和選項,請參閱 DDL 參考資料。
應用實例
以下範例說明列層安全性的潛在用途。
依區域篩選資料列資料
請考慮表格 dataset1.table1
包含屬於不同區域的資料列 (以 region
欄表示) 的情況。
您可以使用下列查詢建立並填入範例資料表:
CREATE TABLE IF NOT EXISTS dataset1.table1 (partner STRING, contact STRING, country STRING, region STRING); INSERT INTO dataset1.table1 (partner, contact, country, region) VALUES ('Example Customers Corp', 'alice@examplecustomers.com', 'Japan', 'APAC'), ('Example Enterprise Group', 'bob@exampleenterprisegroup.com', 'Singapore', 'APAC'), ('Example HighTouch Co.', 'carrie@examplehightouch.com', 'USA', 'US'), ('Example Buyers Inc.', 'david@examplebuyersinc.com', 'USA', 'US');
資料列層級安全性可讓資料擁有者或管理員實施政策。以下陳述式會實作政策,限制 APAC 郵寄群組中的使用者只能查看來自 APAC 區域的合作夥伴:
CREATE ROW ACCESS POLICY apac_filter ON dataset1.table1 GRANT TO ("group:sales-apac@example.com") FILTER USING (region="APAC" );
這會導致 sales-apac@example.com
群組中的使用者只能查看 region
值為 APAC
的資料列。
以下陳述式會實作一項政策,限制個人和群組只能查看美國地區的合作夥伴:
CREATE ROW ACCESS POLICY us_filter ON dataset1.table1 GRANT TO ("group:sales-us@example.com", "user:jon@example.com") FILTER USING (region="US");
這會導致群組 sales-us@example.com
中的使用者和使用者 jon@example.com
只能查看 region
值為 US
的資料列。
下圖顯示前述兩個存取權政策如何限制哪些使用者和群組可查看表格中的哪些資料列:
不在 APAC
或 US
群組中的使用者不會看到任何資料列。
根據機密資料篩選資料列
接下來,我們來看看另一種用途,假設您有一個包含薪資資訊的表格。
您可以使用下列查詢建立並填入範例資料表:
CREATE OR REPLACE TABLE dataset1.table1 (name STRING, department STRING, salary INT64, email STRING); INSERT INTO dataset1.table1 ( name, department, salary, email) VALUES ('Jim D', 'HR', 100000, 'jim@example.com'), ('Anna K', 'Finance', 100000, 'anna@example.com'), ('Bruce L', 'Engineering', 100000, 'bruce@example.com'), ('Carrie F', 'Business', 100000, 'carrie@example.com');
下列陳述式中的資料列存取權政策會將查詢限制在公司網域的使用者。此外,使用 SESSION_USER()
函式時,系統會根據使用者電子郵件地址,將存取權限制在執行查詢的使用者所屬資料列。
CREATE ROW ACCESS POLICY salary_personal ON dataset1.table1 GRANT TO ("domain:example.com") FILTER USING (Email=SESSION_USER());
下圖說明資料列存取政策如何限制含有薪資資訊的資料表。在這個範例中,使用者名為 Jim,電子郵件地址為 jim@example.com
。
根據查詢表篩選資料列
有了子查詢支援功能,資料列存取政策就能參照其他資料表,並將這些資料表用作查閱表。篩選規則中使用的資料可儲存在資料表中,而單一子查詢資料列存取政策可取代多個已設定的資料列存取政策。如要更新資料列存取政策,您只需更新查詢表,即可取代多個資料列存取政策。您不需要更新個別的資料列存取政策。
資料列層級安全性與其他方法的使用時機
授權檢視畫面、列層級存取權政策,以及在個別資料表中儲存資料,都能提供不同層級的安全性、效能和便利性。為您的用途選擇正確的機制非常重要,這樣才能確保資料的安全性達到適當的程度。
與授權檢視畫面的比較:漏洞
資料列層級安全性和使用授權檢視表實施資料列層級存取權限制,如果使用不當,都可能會有安全漏洞。
如果您使用授權檢視畫面或資料列層級存取權政策來實施資料列層級安全防護機制,建議您使用稽核記錄功能監控任何可疑活動。
側邊通道 (例如查詢時間長度) 可能會洩漏儲存區分片邊緣的資料列資訊。這類攻擊可能需要瞭解資料表的分割方式,或是大量的查詢。
如要進一步瞭解如何防範這類側通道攻擊,請參閱「資料列層級安全性的最佳做法」。
授權檢視表、資料列層級安全性和個別表格的比較
下表比較了授權檢視畫面、資料列層級存取權政策和個別資料表的彈性、效能和安全性。
方法 | 安全性考量 | 建議 |
---|---|---|
授權 檢視 |
建議用於彈性。可能會遭到精心設計的查詢、查詢時間長度和其他類型的側通道攻擊。 | 如果您需要與他人共用資料,且彈性和效能至關重要,建議您使用授權檢視畫面。舉例來說,您可以使用經過授權的檢視畫面,在工作群組中分享資料。 |
資料列層級存取權政策 | 建議使用,可兼顧彈性和安全性。可能會遭到查詢時間旁路攻擊。 | 如果您需要與他人分享資料,並希望為檢視畫面或資料表切片提供額外安全性,資料列層級存取權政策就是不錯的選擇。舉例來說,您可以使用資料列層級存取權政策,與使用相同資訊主頁的使用者分享資料,即使有些使用者可存取的資料比其他使用者多也沒問題。 |
分開的資料表 | 建議用於安全性用途。使用者無法在沒有資料表存取權的情況下推斷資料。 | 當您需要與他人分享資料,且需要將資料隔離時,使用個別的資料表格會是個不錯的選擇。舉例來說,如果您需要保密資料列的總數,可以使用個別的資料表與第三方合作夥伴和供應商分享資料。 |
建立及管理資料列層級存取政策
如要瞭解如何建立、更新 (重新建立)、列出、查看及刪除資料表中的資料列層級存取權政策,以及如何查詢設有資料列層級存取權政策的資料表,請參閱「使用資料列層級存取權安全性」。
配額
如要進一步瞭解列層級安全性的配額和限制,請參閱 BigQuery 的配額與限制。
定價
BigQuery 提供資料列層級安全防護機制,無須額外付費。不過,資料列層級存取權政策可能會影響執行查詢的費用,具體影響如下:
資料行層級存取權政策 (特別是包含參照其他資料表的子查詢的政策) 可能會導致額外收費。
資料列層級存取權政策篩選器不會參與分區和叢集資料表的查詢裁剪作業。這並不表示在執行主要查詢時會讀取更多資料。不會利用資料列存取政策述元來進一步裁剪。
使用資料列層級存取權政策篩選器時,並非所有使用者篩選器都會提早套用。這可能會增加從資料表讀取的資料量,並且可能會讀取更多資料列並計費。
如要進一步瞭解 BigQuery 查詢的定價,請參閱 BigQuery 定價。
限制
如要瞭解資料列層級安全防護機制的限制,請參閱 BigQuery 的「資料列層級安全防護機制的限制」。下列各節將說明其他資料列層級安全性限制。
效能限制
使用包含資料列層級存取權政策的資料表時,部分 BigQuery 功能不會加速,例如 BigQuery BI Engine 和物化檢視表。
資料列層級安全防護機制不會參與查詢修剪作業,這是分區資料表的功能。詳情請參閱「分區和叢集資料表」。這項限制不會影響主要查詢的執行速度。
查詢具有資料列層級安全性的資料表時,效能可能會略為降低。
如要進一步瞭解資料列層級安全防護機制與部分 BigQuery 功能和服務的互動方式,請參閱「將資料列層級的安全性與其他 BigQuery 功能搭配使用」。
其他限制
使用特定 BigQuery 版本建立的預留項目,可能無法使用這項功能。如要進一步瞭解各個版本啟用的功能,請參閱「BigQuery 版本簡介」。
資料列存取政策與舊版 SQL 不相容。針對設有資料列層級存取權政策的資料表進行查詢時,必須使用 GoogleSQL。舊版 SQL 查詢會遭到拒絕,並顯示錯誤訊息。
您無法對 JSON 欄套用資料列層級存取權政策。
資料表中如果有資料列存取政策,則不支援萬用字元表格查詢。
資料列存取政策無法套用至臨時資料表。
您無法將資料列層級存取權政策套用至參照其他資料列層級安全性的資料表。
BigQuery 的部分功能與資料列層級安全性不相容。詳情請參閱「使用資料列層級安全性」。
- 納入子查詢的資料列存取權政策與 BigQuery Storage Read API 不相容。BigQuery Storage Read API 僅支援簡單的篩選器述詞。
非查詢作業 (包括服務帳戶工作) 需要對資料表資料擁有完整存取權,因此可以使用
TRUE
篩選器,搭配資料列層級安全性。例如資料表複製、Dataproc 工作流程等。詳情請參閱「使用資料列層級安全性」。您可以使用 DDL 陳述式或資料列存取政策 API,建立、取代或刪除資料列層級存取政策。您也可以在 bq 指令列工具中,執行所有可用的資料列存取權政策 API 動作。您可以在Google Cloud 控制台中列出及查看資料列層級存取權政策。
預覽或瀏覽資料表與資料列層級安全防護機制不相容。
資料表取樣與資料列層級安全性不相容。
頂層子查詢政策結果大小上限為 100 MB。這項限制適用於每個資料列層級存取權政策。
資料列存取政策中不支援頂層
IN
子查詢,其中search_value
的類型為FLOAT
、STRUCT
、ARRAY
、JSON
或GEOGRAPHY
。如果系統因刪除任何參照資料表而無法評估資料列層級存取政策述詞,查詢就會失敗。
子查詢的列層級存取權政策僅支援 BigQuery 資料表、BigLake 外部資料表和 BigLake 管理的資料表。
稽核記錄和監控
當您讀取含有一或多個資料列層級存取權政策的資料表時,系統會在該讀取要求的 IAM 授權資訊中,顯示為讀取存取權授權的資料列層級存取權政策,以及子查詢中參照的任何對應資料表。
建立和刪除資料列層級存取權政策會記錄在稽核記錄中,您可以透過 Cloud Logging 存取這些記錄。稽核記錄會包含資料列層級存取權政策的名稱。不過,列層級存取權政策的 filter_expression
和 grantee_list
定義會從記錄中略過,因為這些定義可能包含使用者或其他機密資訊。列出和查看資料列層級存取權政策不會記錄稽核。
如要進一步瞭解如何在 BigQuery 中記錄資料,請參閱「BigQuery 監控簡介」。
如要進一步瞭解如何記錄 Google Cloud,請參閱 Cloud Logging。
後續步驟
如要瞭解如何管理資料列層級安全防護機制,請參閱「使用資料列層級安全防護機制」。
如要瞭解資料列層級安全防護機制如何與其他 BigQuery 功能和服務搭配運作,請參閱「將資料列層級的安全性與其他 BigQuery 功能搭配使用」。
如要瞭解資料列層級安全性的最佳做法,請參閱 BigQuery 資料列層級安全性的最佳做法。