精細的存取權控管機制總覽

Spanner 精細的存取控管機制,兼具 Identity and Access Management (IAM) 和 SQL 角色式存取控管的優點。透過精細的存取控管機制,您可以定義資料庫角色、授予角色權限,以及建立 IAM 政策,將資料庫角色的權限授予 IAM 主體。本頁面說明如何搭配使用精細存取權控管與 Spanner,適用於 GoogleSQL 方言資料庫和 PostgreSQL 方言資料庫。

管理員必須為個別 IAM 主體啟用精細的存取權控管機制。啟用精細存取控管機制的主體 (即「精細存取控管使用者」) 必須擔任資料庫角色,才能存取 Spanner 資源。

如果使用者不是精細存取權控管使用者,則資源存取權由 IAM 資料庫層級角色控管。精細的存取控管機制完全相容,可與現有的 IAM 資料庫層級存取控管機制並存。您可以使用這個物件存取個別資料庫物件。如要控管整個資料庫的存取權,請使用 IAM 角色

透過精細的存取控管,您可以控管資料表、資料欄、檢視區塊和變更串流的存取權。

如要管理精細的存取控管機制,請使用下列 DDL 陳述式:

  • CREATEDROP 陳述式,用於建立及捨棄資料庫角色。 資料庫角色是一組權限。您最多可以為資料庫建立 100 個角色。
  • GRANTREVOKE 陳述式,可授予及撤銷資料庫角色的權限。權限包括 SELECTINSERTUPDATEDELETEEXECUTE。權限名稱對應於同名的 SQL 陳述式。舉例來說,具有 INSERT 權限的角色可以對 GRANT 陳述式中指定的資料表執行 INSERT SQL 陳述式。

    下列 DDL 陳述式會將資料表 employeesSELECT 授予 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 陳述式,可將角色授予其他角色,以建立角色階層,並繼承權限。

用途

以下是精細存取權控管的應用實例:

  • 人力資源資訊系統,其中包含銷售薪酬分析師、銷售管理和人力資源分析師的角色,每個角色對資料的存取層級都不同。舉例來說,薪酬分析師和銷售管理人員不應看到身分證字號。
  • 共乘應用程式,為乘客和駕駛人提供不同的服務帳戶和權限。
  • 允許 SELECTINSERT 作業,但不允許 UPDATEDELETE 作業的帳本。

Spanner 資源及其權限

以下列出 Spanner 資源,以及可授予的精細存取控管權限

結構定義
您可以將結構定義的 USAGE 權限授予特定資料庫角色。如果不是預設結構定義,資料庫角色必須具備 USAGE 權限,才能存取資料庫物件。權限檢查如下所示:

您是否在結構定義中設定了 USAGE

否:拒絕存取。

是:您是否也擁有資料表的適當權利?

否:拒絕存取。

是:您可以存取資料表。

資料表
您可以將資料表上的 SELECTINSERTUPDATEDELETE 權限授予資料庫角色。如果是交錯式資料表,在父項資料表上授予的權限不會傳播至子項資料表。
資料欄
您可以針對資料表中的部分資料欄授予 SELECTINSERTUPDATE。這樣一來,權限就只會對這些資料欄有效。DELETE 不允許在資料欄層級使用。
瀏覽次數
您可以授予資料檢視的SELECT權限。檢視畫面僅支援 SELECT。Spanner 支援呼叫端權限檢視畫面和定義端權限檢視畫面。如果您使用呼叫端權限建立檢視區塊,資料庫角色或使用者必須具備檢視區塊的 SELECT 權限,以及檢視區塊所參照基礎物件的 SELECT 權限,才能查詢檢視區塊。如果您使用定義者的權限建立檢視區塊,資料庫角色或使用者只需要檢視區塊的 SELECT 權限,即可查詢檢視區塊。詳情請參閱「檢視畫面總覽」。
變更串流
您可以對變更串流授予 SELECT。您也必須對與變更串流相關聯的讀取函式授予 EXECUTE 角色。詳情請參閱「變更串流的精細存取控管」。
序列
您可以對序列授予 SELECTUPDATE。詳情請參閱「序列的精細存取權控管」。
模型
您可以對模型授予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_managerhr_director 是角色 pii_access 的成員,並繼承資料表 employeesSELECT 權限。

權限繼承

hr_managerhr_director 也可以有成員,這些成員會繼承 employeesSELECT 權限。

角色階層的深度沒有限制,但如果角色階層結構深且廣,查詢效能可能會降低。

備份與還原

Spanner 備份包含資料庫角色定義。從備份還原資料庫時,系統會重新建立資料庫角色及其獲授權限。不過,IAM 政策不屬於資料庫備份,因此您必須重新授予還原資料庫中主體的資料庫角色存取權。

設定精細存取權控管機制總覽

如要開始使用精細的存取權控管機制保護資料,請按照下列高階步驟操作。詳情請參閱「設定精細的存取控管」。

您必須獲得 roles/spanner.adminroles/spanner.databaseAdmin IAM 角色,才能執行這些工作。

  1. 建立資料庫角色,並授予角色權限。
  2. 選用:將角色授予其他角色,建立具有繼承權的角色階層。
  3. 針對每個要成為細部存取控管主體的使用者,執行下列步驟:
    1. 為主體啟用精細的存取權控管機制。 系統隨後會自動授予主體 public 資料庫角色,但預設沒有任何權限。每個主體只需要執行這項操作一次。
    2. 將一或多個資料庫角色的 IAM 權限授予主體。
    3. 授予主體所有必要資料庫角色後,如果主體具有資料庫層級的 IAM 角色,請考慮撤銷資料庫層級的角色,這樣主體的存取控管就會只透過一種方法管理。

限制

  • 匯出作業不會匯出資料庫角色和權限,匯入作業也無法匯入這些項目。匯入完成後,您必須手動設定角色和權限。
  • Google Cloud 控制台的「TABLE」頁面不提供「資料」分頁,因此無法供細部存取控制使用者使用。

後續步驟