本頁說明可授予資料庫角色的權限,以進行精細的存取權控管。這項資訊適用於 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 方言資料庫)