本頁面說明如何搭配使用精細存取權控管和 Spanner 變更串流,適用於 GoogleSQL 方言資料庫和 PostgreSQL 方言資料庫。
對於精細的存取權控管使用者,您可以使用下列授權,允許讀取變更串流資料。兩項授權都必須授予。
在變更串流上授予
SELECT。GoogleSQL
GRANT SELECT ON CHANGE STREAM CHANGE_STREAM_NAME TO ROLE ROLE_NAME;
PostgreSQL
GRANT SELECT ON CHANGE STREAM CHANGE_STREAM_NAME TO ROLE_NAME;
在系統為變更串流自動建立的讀取函式上,授予
EXECUTE。您可以使用讀取函式讀取變更串流記錄。GoogleSQL
GRANT EXECUTE ON TABLE FUNCTION READ_FUNCTION_NAME TO ROLE ROLE_NAME;
PostgreSQL
GRANT EXECUTE ON FUNCTION READ_FUNCTION_NAME TO ROLE_NAME;
如要瞭解變更串流讀取函式的命名慣例,以及傳回資訊的格式,請參閱下列主題:
INFORMATION_SCHEMA 變更串流的檢視畫面
下列檢視畫面會顯示變更串流的資料庫角色和權限資訊:
- GoogleSQL 方言資料庫:
INFORMATION_SCHEMA.CHANGE_STREAM_PRIVILEGES - PostgreSQL 方言資料庫:
information_schema.change_stream_privileges
系統會根據變更串流的目前資料庫角色權限,篩選這些檢視表中的資料列。這可確保主體只能查看自己有權存取的角色、權限和變更串流。
列篩選也適用於下列變更串流相關檢視畫面:
GoogleSQL
INFORMATION_SCHEMA.CHANGE_STREAMSINFORMATION_SCHEMA.CHANGE_STREAM_TABLESINFORMATION_SCHEMA.CHANGE_STREAM_COLUMNSINFORMATION_SCHEMA.CHANGE_STREAM_OPTIONS
系統角色 spanner_info_reader 和其成員一律會看到未經過濾的內容 INFORMATION_SCHEMA。
PostgreSQL
information_schema.change_streamsinformation_schema.change_stream_tablesinformation_schema.change_stream_columnsinformation_schema.change_stream_options
系統角色 spanner_info_reader 和其成員會看到未經過濾的 information_schema。
資料列篩選也適用於變更串流讀取函式的下列中繼資料檢視:
GoogleSQL
PostgreSQL
注意事項
變更串流會使用中繼資料庫來維護內部狀態。中繼資料庫可以與應用程式資料庫相同,也可以不同。建議您使用其他資料庫。不過,對於細部存取控管使用者,中繼資料資料庫不能與應用程式資料庫相同。這是因為執行 Dataflow 工作的 IAM 主體需要中繼資料資料庫的資料庫層級讀取或寫入權限。這會覆寫為應用程式資料庫設定的精細存取控管權限。
詳情請參閱「考慮使用獨立的中繼資料資料庫」。
由於變更串流包含所追蹤資料表和資料欄的個別資料副本,因此授予使用者變更串流存取權時,請務必小心謹慎。即使變更串流的讀取者沒有資料表和資料欄的
SELECT權限,仍可查看所追蹤資料表和資料欄的資料變更。雖然針對變更串流及其追蹤的資料表和資料欄設定個別控制項,彈性較高,但仍有潛在風險,因此請務必相應地設定資料庫角色和權限。舉例來說,從角色撤銷資料表的SELECT權限時,請考慮是否也要撤銷變更串流的SELECT權限,以及撤銷相關讀取函式的EXECUTE權限。如果您在追蹤所有資料表的變更串流上授予
SELECT,受讓人就能查看日後新增的任何資料表資料變更。