將資料列層級的安全性與其他 BigQuery 功能搭配使用
本文說明如何將資料列層級存取權安全防護機制與其他 BigQuery 功能搭配使用。
閱讀本文前,請先參閱「BigQuery 資料列層級安全防護機制簡介」和「使用資料列層級安全防護機制」,瞭解資料列層級安全防護機制。
TRUE 篩選器
資料列層級存取權政策可篩選您在執行查詢時看到的結果資料。如要執行非查詢作業 (例如 DML),您必須擁有資料表中所有資料列的完整存取權。如要授予完整存取權,請使用資料列存取政策,並將篩選運算式設為 TRUE。這項資料列層級存取權政策稱為「TRUE 篩選器」。
任何使用者 (包括服務帳戶) 都可以獲得TRUE篩選器存取權。
非查詢作業的例子包括:
- 其他 BigQuery API,例如 BigQuery Storage Read API。
- 部分
bq指令列工具指令,例如bq head指令。 - 複製資料表
TRUE 篩選器範例
CREATE ROW ACCESS POLICY all_access ON project.dataset.table1
GRANT TO ("group:all-rows-access@example.com")
FILTER USING (TRUE);
可搭配 TRUE 篩選器使用的功能
對受資料列存取權政策保護的資料表使用 DML 作業時,您必須使用 TRUE 篩選器,這表示您有權存取整個資料表。不會變更資料表結構定義的任何作業,都會保留資料表中的所有資料列存取政策。
舉例來說,ALTER TABLE RENAME
TO 陳述式會將原始資料表的資料列存取政策複製到新資料表。再舉一例,TRUNCATE
TABLE 陳述式會移除資料表中的所有資料列,但會保留資料表結構定義和任何資料列存取政策。
複製工作
如要複製含有至少一項資料列層級存取政策的資料表,您必須先取得來源資料表的TRUE篩選器存取權。來源資料表的所有資料列層級存取政策也會複製到新的目的地資料表。如果將沒有資料列層級存取政策的來源資料表,複製到有資料列層級存取政策的目的地資料表,則目的地資料表的資料列層級存取政策會遭到移除,除非使用 --append_table 旗標或設定 "writeDisposition": "WRITE_APPEND"。
允許跨區域複製,且會複製所有政策。如果查詢在子查詢政策中含有無效的資料表參照,複製完成後,後續查詢可能會中斷。
資料表的資料列層級存取政策名稱不得重複。複製期間,如果資料列層級存取政策名稱發生衝突,就會導致輸入內容無效錯誤。
複製設有資料列層級存取權政策的資料表時,所需的權限
如要複製含有至少一項資料列層級存取權政策的資料表,除了複製資料表和分區的角色之外,您還必須具備下列權限。
| 權限 | 資源 |
|---|---|
bigquery.rowAccessPolicies.list
|
來源資料表。 |
bigquery.rowAccessPolicies.getIamPolicy
|
來源資料表。 |
TRUE 篩選器
|
來源資料表。 |
bigquery.rowAccessPolicies.create
|
目的地資料表。 |
bigquery.rowAccessPolicies.setIamPolicy
|
目的地資料表。 |
BigQuery API 中的 Tabledata.list
如要在具有資料列層級存取權政策的資料表上,使用 BigQuery API 中的 tabledata.list 方法,您需要 TRUE 篩選器存取權。
DML
如要執行 DML 陳述式,更新具有資料列層級存取權政策的資料表,您需要該資料表的TRUE篩選器存取權。
特別是 MERGE 陳述式會與資料列層級存取政策互動,如下所示:
- 如果目標資料表包含資料列層級存取權政策,則您需要
TRUE目標資料表的篩選存取權。 - 如果來源資料表包含資料列層級的存取權政策,則
MERGE陳述式只會對使用者可見的資料列採取行動。
資料表快照
資料表快照支援資料列層級安全防護機制。如要瞭解基本資料表 (來源資料表) 和資料表快照 (目的地資料表) 的必要權限,請參閱「複製含有資料列層級存取權政策的資料表時所需的權限」。
含有 JSON 資料欄的 BigQuery 資料表
資料列層級存取政策無法套用至 JSON 欄。 如要進一步瞭解資料列層級安全防護機制的限制,請參閱「限制」一節。
執行圖
如果作業採用資料列層級存取政策,就無法使用查詢執行圖。
擷取工作
如果資料表設有資料列層級的存取權政策,執行擷取工作時,系統只會將您可檢視的資料匯出至 Cloud Storage。
分區和分群資料表
資料列層級安全防護機制不會參與查詢修剪,這是分區資料表的功能。
資料列層級安全防護機制與分區和叢集資料表相容,但系統不會在分區修剪期間套用篩除資料列資料的資料列層級存取權政策。如果資料表使用資料列層級安全性,您仍可指定在分區資料欄上運作的 WHERE 子句,對資料表使用分區修剪功能。同樣地,資料列層級存取政策本身不會為針對叢集資料表的查詢帶來任何效能優勢,但不會干擾您套用的其他篩選條件。
執行資料列層級存取權政策時,系統會使用政策中的篩選器執行查詢修剪作業。
重新命名資料表
如要重新命名含有至少一項資料列存取政策的資料表,您不需要 TRUE 篩選器存取權。您可以使用 DDL 陳述式重新命名資料表。
您也可以複製資料表,並為目的地資料表指定不同名稱。如果來源資料表設有資料列層級存取權政策,請參閱本頁面的資料表複製工作,瞭解詳情。
串流更新
如要使用變更資料擷取功能執行串流資料表 UPDATE 或 DELETE 作業,您必須具備 TRUE 篩選器存取權。
時間回溯
如果資料表設有 (或曾設有) 資料列層級存取權政策,只有資料表管理員可以存取該資料表的歷來資料。如果其他使用者在具有資料列層級存取權的資料表上使用時間旅行裝飾器,就會收到 access
denied 錯誤訊息。詳情請參閱「時間旅行和資料列層級存取權」。
邏輯、具體化和授權檢視表
本節說明不同類型的 BigQuery 檢視區塊,以及這些檢視區塊如何與資料列層級安全防護機制互動。
邏輯或具體化檢視表
系統會根據資料表查詢建立邏輯或具體化檢視表。 查詢結果通常是資料表資料的子集。
這兩種檢視畫面顯示的資料,都會根據基礎來源資料表的資料列層級存取權政策進行篩選。不過,您無法在資料列層級存取政策中參照檢視表或具體化檢視表。
具體化檢視表的效能
此外,如果materialized view是衍生自具有資料列層級存取權政策的基礎資料表,查詢效能會與直接查詢來源資料表時相同。換句話說,如果來源資料表採用資料列層級安全防護機制,查詢具體化檢視區時,您不會看到相較於查詢來源資料表,典型的效能優勢。
授權檢視表
您也可以授權邏輯或具體化檢視,也就是與特定使用者或群組 (主體) 共用檢視。主體隨後可以查詢檢視區塊,但無法存取基礎資料表。詳情請參閱「授權檢視表」。
萬用字元查詢
如果資料表設有資料列層級存取權政策,對這類資料表執行萬用字元查詢會失敗,並顯示 INVALID_INPUT 錯誤。
後續步驟
- 如要瞭解資料列層級存取政策的最佳做法,請參閱「BigQuery 資料列層級安全防護最佳做法」。