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
陳述式中指定的資料表上執行INSERT
SQL 陳述式。下列 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
?
否:拒絕存取。
是:您是否也有資料表的適當權限?
否:拒絕存取。
是:您可以存取資料表。
- 資料表
- 您可以將
SELECT
、INSERT
、UPDATE
和DELETE
權限授予資料庫角色。對於交錯式資料表,在父資料表中授予的權限不會傳播至子資料表。 - 資料欄
- 您可以在資料表中為部分資料欄授予
SELECT
、INSERT
和UPDATE
。這樣一來,權限就只適用於這些資料欄。資料欄層級不允許使用DELETE
。 - 瀏覽次數
- 您可以授予資料檢視的
SELECT
權限。系統僅支援SELECT
檢視。Spanner 同時支援叫用者的權限檢視畫面和定義者的權限檢視畫面。如果您使用叫用者的權利建立檢視區塊,則資料庫角色或使用者必須具備檢視區塊的SELECT
權限,以及檢視區塊中參照的基礎物件的SELECT
權限,才能查詢檢視區塊。如果您使用定義者權限建立檢視表,資料庫角色或使用者只需要檢視表的SELECT
權限,詳情請參閱「Views 總覽」。 - 變更串流
- 您可以授予變更串流的
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
陳述式 - 序列的精細存取權控管機制
- 模型的精細存取權控管機制