將資料列層級的安全性與其他 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
您必須具備 TRUE
篩選器存取權,才能在具有列層級存取權政策的資料表中,使用 BigQuery API 中的 tabledata.list
方法。
DML
如要執行 DML 陳述式,以更新具有資料列層級存取政策的資料表,您需要擁有該資料表的 TRUE
篩選器存取權。
具體來說,MERGE
陳述式會與資料列層級存取權政策互動,如下所示:
- 如果目標資料表包含資料列層級存取政策,您需要對目標資料表具備
TRUE
篩選器存取權。 - 如果來源資料表包含資料列層級存取權政策,則
MERGE
陳述式只會對使用者可見的資料列執行。
資料表快照
資料表快照支援資料列層級安全性。如要瞭解基礎資料表 (來源資料表) 和資料表快照 (目的地資料表) 所需的權限,請參閱「使用資料表列級存取權政策複製資料表所需的權限」一文。
含有 JSON 欄的 BigQuery 資料表
資料列層級存取權政策無法套用至 JSON 欄。如要進一步瞭解資料列層級安全防護機制的限制,請參閱「限制」一節。
執行圖
您無法針對具有資料列層級存取權政策的工作使用查詢執行圖。
擷取工作
如果資料表設有列層級存取權政策,執行擷取工作時,系統只會將您可查看的資料匯出至 Cloud Storage。
分區和分群資料表
資料列層級安全防護機制不會參與查詢修剪作業,這是分區資料表的功能。
雖然資料列層級安全性與分區和叢集資料表相容,但在分區裁剪期間,篩選資料列資料的資料列層級存取權政策不會套用。您仍可在使用資料列層級安全性的資料表上使用分區修剪功能,方法是指定在分區欄上運作的 WHERE
子句。同樣地,資料列層級存取權政策本身不會為針對叢集資料表的查詢帶來任何效能優勢,但不會干擾您套用的其他篩選條件。
執行資料列層級存取政策時,系統會使用政策中的篩選器執行查詢裁剪作業。
重新命名資料表
您不需要 TRUE
篩選器存取權,即可重新命名含有一或多個資料列存取政策的資料表。您可以使用 DDL 陳述式重新命名資料表。
您也可以複製資料表,並為目標資料表指定不同的名稱。如果來源資料表設有資料列層級存取權政策,請參閱本頁的資料表複製工作相關說明。
串流更新
如要使用「變更資料擷取」執行串流資料表 UPDATE
或 DELETE
作業,您必須具備 TRUE
篩選器存取權。
時光旅行
只有資料表管理員可以存取具有或先前曾設有資料表層級存取權政策的資料表歷來資料。如果其他使用者在具有資料列層級存取權的資料表上使用時間旅行修飾符,就會收到 access
denied
錯誤。詳情請參閱「時間旅行和資料列層級存取」一文。
邏輯、具體化和授權檢視表
本節將說明不同類型的 BigQuery 檢視表,以及這些檢視表與資料列層級安全防護機制的互動方式。
邏輯或具體化檢視表
邏輯檢視表或具體化檢視表是根據對資料表的查詢建立。查詢結果通常是資料表資料的子集。
無論是哪一種檢視畫面,其中顯示的資料都會根據底層來源資料表的資料列層級存取政策進行篩選。不過,您無法在資料列層級存取政策中參照檢視表或具體化檢視表。
具體化檢視表的效能
此外,如果具體化檢視表是從具有列層級存取政策的基礎資料表衍生而來,則查詢效能會與直接查詢來源資料表時相同。換句話說,如果來源資料表設有資料列層級安全防護機制,您就不會在查詢實際資料檢視時,看到與查詢來源資料表時相同的效能優勢。
授權檢視表
您也可以授權邏輯或具象化檢視畫面,也就是與特定使用者或群組 (主要使用者) 共用檢視畫面。這樣一來,管理員就能查詢檢視畫面,但無法存取基礎資料表。詳情請參閱「授權檢視表」。
萬用字元查詢
針對設有資料列層級存取權政策的資料表執行萬用字元查詢時,會發生 INVALID_INPUT
錯誤。
後續步驟
- 如要瞭解資料列層級存取政策的最佳做法,請參閱 BigQuery 資料列層級安全防護機制的最佳做法。