本頁說明您可以授予資料庫角色的權限,以便進行精細的存取權控管。這項資訊適用於 GoogleSQL 方言資料庫和 PostgreSQL 方言資料庫。
如要瞭解資料庫角色和精細的存取權控管機制,請參閱「精細的存取權控管機制總覽」。
下表列出精細存取權控管權限,以及可授予這些權限的資料庫物件。
SELECT | INSERT | 更新 | 刪除 | 執行 | 用量 | |
---|---|---|---|---|---|---|
結構定義 | ✓ | |||||
資料表 | ✓ | ✓ | ✓ | ✓ | ||
欄 | ✓ | ✓ | ✓ | ✓ | ||
查看 | ✓ | |||||
變更串流 | ✓ | |||||
變更串流讀取函式 | ✓ | |||||
順序 | ✓ | ✓ | ||||
模型 | ✓ |
以下各節將詳細說明每項權限。
SELECT
允許角色讀取或查詢資料表、檢視畫面、變更串流、序列或模型。
如果為資料表指定資料欄清單,則權限只會在這些資料欄上生效。如果未指定資料欄清單,則權限會對資料表中的所有資料欄有效,包括之後新增的資料欄。資料檢視不支援資料欄清單。
Spanner 同時支援叫用者的權限檢視畫面和定義者的權限檢視畫面。詳情請參閱「檢視表總覽」。
如果您使用叫用者的權利建立檢視畫面,則資料庫角色或使用者必須具備檢視畫面的
SELECT
權限,以及檢視畫面中參照的基礎物件SELECT
權限,才能查詢檢視畫面。舉例來說,假設檢視畫面SingerNames
是在Singers
資料表上建立。CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
假設資料庫角色
myRole
執行查詢SELECT * FROM SingerNames
。該角色必須具備檢視畫面的SELECT
權限,且必須具備三個參照資料欄或整個Singers
資料表的SELECT
權限。如果您使用定義者的權限建立檢視畫面,資料庫角色或使用者只需要在檢視畫面上具備
SELECT
權限,即可查詢檢視畫面。舉例來說,假設檢視畫面AlbumsBudget
是在Albums
資料表上建立。CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
假設資料庫角色
Analyst
執行查詢SELECT * FROM AlbumsBudget
。這個角色只需要在檢視畫面上有SELECT
權限。在三個參照資料欄或Albums
資料表上,不需要SELECT
權限。在資料表的資料欄子集上授予
SELECT
後,FGAC 使用者就無法再在該資料表上使用SELECT *
。對該資料表執行的查詢必須命名要納入的所有資料欄。在產生的資料欄上授予
SELECT
不會授予基礎資料欄的SELECT
。對於交錯資料表,在父項資料表中授予的
SELECT
不會傳播至子項資料表。在變更資料流上授予
SELECT
時,您也必須在變更資料流的資料表值函式上授予EXECUTE
。詳情請參閱「EXECUTE」。當
SELECT
與匯總函式搭配使用,且用於特定欄時 (例如SUM(col_a)
),該角色必須對這些欄擁有SELECT
權限。如果匯總函式未指定任何資料欄 (例如COUNT(*)
),則角色至少必須在資料表中有一欄SELECT
權限。將
SELECT
與序列搭配使用時,您只能查看具有查看權限的序列。
使用 GRANT SELECT
的範例
GoogleSQL
GRANT SELECT ON TABLE employees TO ROLE hr_director; GRANT SELECT ON TABLE customers, orders, items TO ROLE account_mgr; GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO ROLE hr_manager; GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO ROLE hr_rep; GRANT SELECT ON VIEW orders_view TO ROLE hr_manager; GRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst; GRANT SELECT ON SEQUENCE sequence_name TO ROLE role_name;
PostgreSQL
GRANT SELECT ON TABLE employees TO hr_director; GRANT SELECT ON TABLE customers, orders, items TO account_mgr; GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO hr_manager; GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO hr_rep; GRANT SELECT ON TABLE orders_view TO hr_manager; // orders_view is an invoker rights view GRANT SELECT ON CHANGE STREAM orders_change_stream TO hr_analyst; GRANT SELECT ON SEQUENCE sequence_name TO hr_package;
INSERT
允許角色將資料列插入指定的資料表。如果指定資料欄清單,權限只會在這些資料欄上有效。如果未指定資料欄清單,則權限就會套用至資料表中的所有資料欄。
如果指定資料欄名稱,則未納入的資料欄會在插入時取得預設值。
INSERT
無法授予產生的資料欄。
使用 GRANT INSERT
的範例
GoogleSQL
GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;
PostgreSQL
GRANT INSERT ON TABLE employees, contractors TO hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO hr_rep;
UPDATE
允許該角色更新指定資料表中的資料列。更新作業可限制在部分資料表欄中執行。當您將此角色與序列搭配使用時,角色便可在序列上呼叫 get-next-sequence-value
函式。
除了 UPDATE
權限之外,角色還需要在所有查詢的資料欄上具備 SELECT
權限。查詢的資料欄包括 WHERE
子句中的資料欄。
UPDATE
無法授予產生的資料欄。
使用 GRANT UPDATE
的範例
GoogleSQL
GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;
PostgreSQL
GRANT UPDATE ON TABLE employees, contractors TO hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO hr_rep;
DELETE
允許該角色刪除指定資料表中的資料列。
無法在欄位層級授予
DELETE
。這個角色也需要在查詢的
WHERE
子句中可能包含的任何資料欄上設定SELECT
。對於 GoogleSQL 方言資料庫中的交錯式資料表,您只需要在父項資料表上具備
DELETE
權限。如果子項資料表指定ON DELETE CASCADE
,即使沒有子項資料表的DELETE
權限,系統也會刪除子項資料表的資料列。
使用 GRANT DELETE
的示例
GoogleSQL
GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;
PostgreSQL
GRANT DELETE ON TABLE employees, contractors TO hr_admin;
EXECUTE
在變更串流中授予 SELECT
時,您也必須在變更串流的讀取函式中授予 EXECUTE
。詳情請參閱「變更串流讀取函式和查詢語法」。
當您將這個角色與模型搭配使用時,該角色就能在機器學習函式中使用模型。
使用 GRANT EXECUTE
的示例
以下範例說明如何針對名為 my_change_stream
的變更串流,在讀取函式上授予 EXECUTE
。
GoogleSQL
GRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;
PostgreSQL
GRANT EXECUTE ON FUNCTION spanner.read_json_my_change_stream TO hr_analyst;
用量
將 USAGE
授予命名結構定義後,即可提供存取命名結構定義中所含物件的權限。預設會將 USAGE
權限授予預設結構定義。
後續步驟
- 設定精細的存取權控管機制
- 精細的存取權控管機制總覽
- GRANT 和 REVOKE 陳述式 (GoogleSQL 方言資料庫)
- GRANT 和 REVOKE 陳述式 (PostgreSQL 方言資料庫)