Spanner 精細的存取控管機制,兼具 Identity and Access Management (IAM) 和 SQL 角色式存取控管的優點。您可以透過精細的存取控管機制定義資料庫角色、授予角色權限,以及建立 IAM 政策,將資料庫角色的權限授予 IAM 主體。本頁面說明如何搭配使用 Spanner 的精細的存取控管功能,以及 GoogleSQL 和 PostgreSQL 方言資料庫。
管理員必須為個別 IAM 主體啟用精細的存取控管機制。啟用精細存取控管機制的主體 (「精細存取控管使用者」) 必須擔任資料庫角色,才能存取 Spanner 資源。
如果使用者並非精細存取控管使用者,則其資源存取權由 IAM 資料庫層級角色控管。精細的存取控管機制完全相容,可與現有的 IAM 資料庫層級存取控管機制並存。您可以使用這個物件存取個別資料庫物件。如要控管整個資料庫的存取權,請使用 IAM 角色。
您可以透過精細的存取控管機制,控管資料表、資料欄、檢視表和變更串流的存取權。
如要管理精細的存取控管機制,請使用下列 DDL 陳述式:
CREATE和DROP陳述式,用於建立及刪除資料庫角色。資料庫角色是一組權限。一個資料庫最多可建立 100 個角色。GRANT和REVOKE陳述式,授予及撤銷資料庫角色的權限。權限包括SELECT、INSERT、UPDATE、DELETE和EXECUTE。權限名稱與同名 SQL 陳述式相對應。舉例來說,具備INSERT權限的角色可以對GRANT陳述式中指定的資料表執行INSERTSQL 陳述式。下列 DDL 陳述式會將資料表
employees的SELECT授予hr_rep資料庫角色。GoogleSQL
CREATE ROLE hr_rep; GRANT SELECT ON TABLE employees TO ROLE hr_rep;PostgreSQL
CREATE ROLE hr_rep; GRANT SELECT ON TABLE employees TO hr_rep;如要進一步瞭解權限,請參閱「精細存取控管權限參考資料」。
GRANT陳述式,用於將角色授予其他角色,以建立角色階層,並繼承權限。
用途
以下是精細的存取控管的用途範例:
- 人力資源資訊系統,其中包含銷售薪酬分析師、銷售管理和人力資源分析師等角色,每個角色對資料的存取層級都不同。舉例來說,薪酬分析師和銷售管理人員不應看到身分證字號。
- 多元計程車應用程式,為乘客和司機提供不同的服務帳戶和權限。
- 允許
SELECT和INSERT作業,但不允許UPDATE和DELETE作業的總帳。
Spanner 資源和權限
以下列出 Spanner 資源,以及可授予的精細的存取控管權限。
- 結構定義
- 您可以將結構定義的
USAGE權限授予特定資料庫角色。如果是非預設結構定義,資料庫角色必須具備USAGE權限,才能存取資料庫物件。權限檢查如下所示:
結構定義中是否有 USAGE?
否:拒絕存取。
是:您是否也具備資料表的適當權限?
否:拒絕存取。
是:您可以存取資料表。
- Tables
- 您可以將資料表的
SELECT、INSERT、UPDATE和DELETE權限授予資料庫角色。如果是交錯式資料表,授予父項資料表的權限不會套用至子項資料表。 - 資料欄
- 您可以對資料表中的部分資料欄授予
SELECT、INSERT和UPDATE權限。權限僅適用於這些資料欄。資料欄層級不允許DELETE。 - 瀏覽次數
- 您可以授予檢視表的
SELECT權限。檢視表僅支援SELECT。Spanner 支援叫用者權限檢視表和定義者權限檢視表。如果您以叫用者權限建立檢視表,則資料庫角色或使用者必須具備檢視表的SELECT權限,以及檢視表中參照的基礎物件SELECT權限,才能查詢檢視表。如果您建立具有定義者權限的檢視表,則資料庫角色或使用者只需要檢視表的SELECT權限,即可查詢檢視表。詳情請參閱「檢視畫面總覽」。 - 變更串流
- 您可以授予變更串流的
SELECT。您也必須對與變更串流相關聯的讀取函式授予EXECUTE。詳情請參閱「異動串流的精細存取控管」。 - 序列
- 您可以授予序列的
SELECT和UPDATE權限。詳情請參閱「序列的精細存取控管」。 - 模型
- 您可以授予模型的
EXECUTE。詳情請參閱「模型的精細存取控管」。
精細的存取控管系統角色
精細的存取控管機制會為每個資料庫預先定義系統角色。與使用者定義的資料庫角色一樣,系統角色可以控管 Spanner 資源的存取權。
舉例來說,精細存取控管使用者必須取得 spanner_sys_reader 系統角色,才能存取 Key Visualizer,並需要 spanner_info_reader 系統角色,才能在查詢 INFORMATION_SCHEMA 資料表時查看未篩選的結果。
詳情請參閱「精細的存取控管系統角色」。
資料庫角色階層和繼承
您可以建立資料庫角色的階層結構,讓子項角色繼承父項角色的權限。子項角色稱為父項角色的「成員」。
舉例來說,請看以下 GRANT 陳述式:
GoogleSQL
GRANT SELECT ON TABLE employees TO ROLE pii_access;
GRANT ROLE pii_access TO ROLE hr_manager, hr_director;
PostgreSQL
GRANT SELECT ON TABLE employees TO pii_access;
GRANT pii_access TO hr_manager, hr_director;
hr_manager 和 hr_director 是角色 pii_access 的成員,並繼承資料表 employees 的 SELECT 權限。

hr_manager 和 hr_director 也可以有成員,這些成員會繼承 employees 的 SELECT 權限。
角色階層的深度沒有限制,但如果角色階層結構又深又廣,查詢效能可能會降低。
備份與還原
Spanner 備份包含資料庫角色定義。從備份還原資料庫時,系統會重新建立資料庫角色,並授予相應權限。不過,IAM 政策不屬於資料庫備份,因此您必須重新授予還原資料庫中主體的資料庫角色存取權。
設定精細存取控管機制總覽
以下是開始使用精細的存取控管機制保護資料的大致步驟。詳情請參閱「設定精細的存取控管機制」。
您必須具備 roles/spanner.admin 或 roles/spanner.databaseAdmin IAM 角色,才能執行這些工作。
- 建立資料庫角色並授予權限。
- 選用:將角色授予其他角色,建立具有繼承關係的角色階層。
- 針對要成為精細的存取控管使用者的每個主體,執行下列步驟:
- 為該主體啟用精細的存取控管機制。接著,主體會自動獲得
public資料庫角色,該角色預設沒有任何權限。每個主體只需執行這項操作一次。 - 將一或多個資料庫角色的 IAM 權限授予主體。
- 主體獲得所有必要的資料庫角色後,如果主體具有資料庫層級的 IAM 角色,建議撤銷資料庫層級角色,這樣主體的存取控管機制就只會由一種方法管理。
- 為該主體啟用精細的存取控管機制。接著,主體會自動獲得
限制
- 匯出作業不會匯出資料庫角色和權限,匯入作業也無法匯入這些項目。匯入完成後,您必須手動設定角色和權限。
- 精細的存取控管使用者無法使用 Google Cloud 控制台「TABLE」(資料表) 頁面上的「Data」(資料) 分頁。
後續步驟
- 使用精細的存取控管機制存取資料庫
- 異動串流的精細存取控管
- 設定精細的存取控管機制
- 精細存取控管權限參考資料
- 精細的存取控管系統角色
- GoogleSQL
GRANT和REVOKE陳述式 - PostgreSQL
GRANT和REVOKE陳述式 - 精細控管序列存取權
- 精細控管模型存取權