GRANT - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

GRANT

定義使用者或角色的存取權限。

許可包括存取選項,例如能夠讀取資料表和檢視中的資料、寫入資料、建立資料表及捨棄資料表。使用此命令可提供資料表、資料庫、結構描述、函數、程序、語言或資料欄的特定許可。若要撤銷資料庫物件的許可,請使用 REVOKE 命令。

權限也包括下列資料共用生產者存取選項:

  • 授予取用者命名空間和帳戶的資料共用存取權。

  • 透過在資料共用中新增或移除物件,授予變更資料共用的權限。

  • 透過從資料共用中新增或移除取用者命名空間,授予資料共用的權限。

資料共用取用者存取選項如下:

  • 授予使用者對從資料共用建立的資料庫,或指向此類資料庫的外部結構描述的完全存取權。

  • 授予使用者從資料共用建立之資料庫的物件層級權限,就像您對本機資料庫物件一樣。若要授予這個層級的權限,您必須在從資料共用建立資料庫時使用 WITH PERSOMES 子句。如需詳細資訊,請參閱 CREATE DATABASE

如需資料共用權限的詳細資訊,請參閱 共用資料共用

您也可以授予角色來管理資料庫許可,並控制使用者可以對您的資料執行哪些動作。透過定義角色並將角色指派給使用者,您可以限制這些使用者可執行的動作,例如限制使用者只能使用 CREATE TABLE 和 INSERT 命令。如需 CREATE ROLE 命令的相關資訊,請參閱 CREATE ROLE。Amazon Redshift 具有一些系統定義的角色,您也可以使用這些角色將特定許可授予使用者。如需詳細資訊,請參閱 Amazon Redshift 系統定義角色

您只能對使用 ON SCHEMA 語法的資料庫使用者和使用者群組執行外部結構描述的 GRANT 或 REVOKE USAGE 許可。搭配使用 ON 外部結構描述時 AWS Lake Formation,您只能授與和撤銷 AWS Identity and Access Management (IAM) 角色的權限。如需許可的清單,請參閱語法。

若為預存程序,您唯一可授予的許可是 EXECUTE。

您無法在交易區塊 (BEGIN ... END) 內執行 GRANT (針對外部資源)。如需交易的相關資訊,請參閱 可序列化隔離

若要查看使用者被授予的資料庫許可,請使用 HAS_DATABASE_PRIVILEGE。若要查看使用者被授予的結構描述許可,請使用 HAS_SCHEMA_PRIVILEGE。若要查看使用者被授予的資料表許可,請使用 HAS_TABLE_PRIVILEGE

語法

GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | ALTER | TRUNCATE } [,...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | TEMPORARY | TEMP | ALTER } [,...] | ALL [ PRIVILEGES ] } ON DATABASE db_name [, ...] TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | USAGE | ALTER } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT USAGE ON LANGUAGE language_name [, ...] TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

下列語法適用於 Amazon Redshift 資料表和檢視上的資料欄層級許可。

GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) } ON { [ TABLE ] table_name [, ...] } TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

以下語法可將 ASSUMEROLE 許可授予具有指定角色的使用者和群組。若要開始使用 ASSUMEROLE 權限,請參閱 授予 ASSUMEROL 許可的使用須知

GRANT ASSUMEROLE ON { 'iam_role' [, ...] | default | ALL } TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...] FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL } [, ...]

以下是 Redshift Spectrum 與 Lake Formation 整合的語法。

GRANT { SELECT | ALL [ PRIVILEGES ] } ( column_list ) ON EXTERNAL TABLE schema_name.table_name TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ] GRANT { { SELECT | ALTER | DROP | DELETE | INSERT } [, ...] | ALL [ PRIVILEGES ] } ON EXTERNAL TABLE schema_name.table_name [, ...] TO { { IAM_ROLE iam_role } [, ...] | PUBLIC } [ WITH GRANT OPTION ] GRANT { { CREATE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON EXTERNAL SCHEMA schema_name [, ...] TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ]
生產者端資料共用權限

以下是使用 GRANT 將 ALTER 或 SHARE 權限授予使用者或角色的語法。使用者可以使用 ALTER 權限變更資料共用,或者使用 SHARE 權限將使用授予取用者。ALTER 和 SHARE 是您可以授予使用者和使用者群組的唯一權限。

GRANT { ALTER | SHARE } ON DATASHARE datashare_name TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

以下是在 Amazon Redshift 上使用 GRANT 授予資料共用使用許可的語法 您可以使用 USAGE 許可將資料共用的存取權授予取用者。您無法將此許可授予使用者或使用者群組。此許可也不支援對 GRANT 陳述式使用 WITH GRANT OPTION。只有先前因為資料共用而被授予 SHARE 許可的使用者或使用者群組才能執行此類型的 GRANT 陳述式。

GRANT USAGE ON DATASHARE datashare_name TO NAMESPACE 'namespaceGUID' | ACCOUNT 'accountnumber' [ VIA DATA CATALOG ]

以下是如何將資料共用使用權授予 Lake Formation 帳戶的範例。

GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '123456789012' VIA DATA CATALOG;
取用者端資料共用權限

以下是 GRANT 資料共用使用許可的語法,用於特定資料庫或從資料共用建立的結構描述。

取用者存取從資料共用建立資料庫所需的進一步權限,取決於是否使用 WITH PERMISSIONS 子句從資料共用建立資料庫的 CREATE DATABASE 命令。如需有關 CREATE DATABASE 命令和 WITH PERMISSIONS 子句的詳細資訊,請參閱 CREATE DATABASE

不使用 WITH PERMISSIONS 子句建立的資料庫

當您在沒有 WITH PERMISSIONS 子句之從資料共用建立的資料庫上授予 USAGE 時,您不需要對共用資料庫中的物件個別授予權限。在沒有 WITH PERMISSIONS 子句之從資料共用建立的資料庫上授予使用權的實體,會自動存取資料庫中的所有物件。

使用 WITH PERMISSIONS 子句建立的資料庫

當您在資料庫上授予 USAGE 時,其中共用資料庫是使用 WITH PERMISSIONS 子句從資料共用建立的,取用者端身分仍然必須被授予共用資料庫中資料庫物件的相關權限才能存取該物件,就像您授予權限給本機資料庫物件一樣。若要將權限授予從資料共用建立之資料庫中的物件,請使用三部分語法 database_name.schema_name.object_name。若要將權限授予指向共用資料庫內共用結構描述的外部結構描述中的物件,請使用兩部分語法 schema_name.object_name

GRANT USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema} TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

作用域權限可讓您將權限授與資料庫或結構描述中某個類型之所有物件的使用者或角色。具有範圍權限的使用者和角色對資料庫或結構描述中所有目前和 future 物件都具有指定的權限。

以下是將限定範圍權限授予使用者或角色的語法。如需有關範圍權限的詳細資訊,請參閱。限定範圍權限

GRANT { CREATE | USAGE | ALTER } [,...] | ALL [ PRIVILEGES ] } FOR SCHEMAS IN DATABASE db_name TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...] GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } } FOR TABLES IN {SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name } TO { username [ WITH GRANT OPTION ] | ROLE role_name} [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } FOR FUNCTIONS IN {SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name } TO { username [ WITH GRANT OPTION ] | ROLE role_name | } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } FOR PROCEDURES IN {SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name } TO { username [ WITH GRANT OPTION ] | ROLE role_name | } [, ...] GRANT USAGE FOR LANGUAGES IN {DATABASE db_name} TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]

請注意,作用域權限不會區分函數和程序的權限。例如,下列陳述式會授bob與結構描述中函數和程序的EXECUTE權限Sales_schema

GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;

以下是 Amazon Redshift 上的機器學習模型許可語法。

GRANT CREATE MODEL TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON MODEL model_name [, ...] TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

以下是在 Amazon Redshift 上使用授予角色許可的語法。

GRANT { ROLE role_name } [, ...] TO { { user_name [ WITH ADMIN OPTION ] } | ROLE role_name }[, ...]

以下是在 Amazon Redshift 上對角色授予系統許可的語法。

GRANT { { CREATE USER | DROP USER | ALTER USER | CREATE SCHEMA | DROP SCHEMA | ALTER DEFAULT PRIVILEGES | ACCESS CATALOG | CREATE TABLE | DROP TABLE | ALTER TABLE | CREATE OR REPLACE FUNCTION | CREATE OR REPLACE EXTERNAL FUNCTION | DROP FUNCTION | CREATE OR REPLACE PROCEDURE | DROP PROCEDURE | CREATE OR REPLACE VIEW | DROP VIEW | CREATE MODEL | DROP MODEL | CREATE DATASHARE | ALTER DATASHARE | DROP DATASHARE | CREATE LIBRARY | DROP LIBRARY | CREATE ROLE | DROP ROLE | TRUNCATE TABLE VACUUM | ANALYZE | CANCEL }[, ...] } | { ALL [ PRIVILEGES ] } TO { ROLE role_name } [, ...]

以下語法可用來授予許可,以解釋 EXPLAIN 計畫中查詢的資料列層級安全性政策篩選。您可以使用 REVOKE 陳述式撤銷權限。

GRANT EXPLAIN RLS TO ROLE rolename

以下是授予許可以略過查詢資料列層級安全性政策的語法。

GRANT IGNORE RLS TO ROLE rolename

以下是對指定資料列層級安全性政策授予許可的語法。

GRANT SELECT ON [ TABLE ] table_name [, ...] TO RLS POLICY policy_name [, ...]

參數

SELECT

授予許可以使用 SELECT 陳述式從資料表或檢視選取資料。另外也需要 SELECT 許可,才能參考 UPDATE 或 DELETE 操作的現有資料欄值。

INSERT

授予許可以使用 INSERT 陳述式或 COPY 陳述式將資料載入資料表中。

UPDATE

授予許可以使用 UPDATE 陳述式更新資料表資料欄。UPDATE 操作也需要 SELECT 許可,因為這些操作必須參考資料表資料欄,才能判斷要更新哪些資料列,或運算資料欄的新值。

DELETE

允許刪除資料表中的資料列。DELETE 操作也需要 SELECT 許可,因為這些操作必須參考資料表資料欄,才能判斷要刪除哪些資料列。

DROP

准許捨棄資料表。此權限適用於 Amazon Redshift 以及為 Lake Formation 啟用的。 AWS Glue Data Catalog

REFERENCES

授予建立外部索引鍵限制條件的許可。您需要在被動參考資料表與主動參考資料表上授予此許可;否則,使用者就無法建立限制條件。

ALTER

根據資料庫物件而定,將下列許可授予使用者或使用者群組:

  • 對於資料表,ALTER 會授予修改資料表或檢視的許可。如需詳細資訊,請參閱 ALTER TABLE

  • 對於資料庫,ALTER 會授予修改資料庫的許可。如需詳細資訊,請參閱 ALTER DATABASE

  • 對於結構描述,ALTER 會授予修改結構描述的許可。如需詳細資訊,請參閱 ALTER SCHEMA

  • 對於外部資料表,ALTER 會授與變更已啟用 Lake Formation AWS Glue Data Catalog 的表格的權限。此許可僅適用於使用 Lake Formation 時。

TRUNCATE

允許截斷資料表 如果沒有此許可,只有資料表的擁有者或超級使用者可以截斷資料表。如需 TRUNCATE 命令的相關資訊,請參閱 TRUNCATE

ALL [ PRIVILEGES ]

對指定使用者或使用者群組一次授予所有可用許可。PRIVILEGES 關鍵字為選用。

GRANT ALL ON SCHEMA 不會授予外部結構描述的 CREATE 許可。

您可以將 ALL 權限授予對已啟用 Lake Formation 的表格。 AWS Glue Data Catalog 在這種情況下,系統會將 SELECT 和 ALTER 等個別許可記錄在 Data Catalog. 中。

ASSUMEROLE

對使用者、角色或具有指定角色的群組授予執行 COPY、UNLOAD、EXTERNAL FUNCTION 和 CREATE MODEL 命令的許可。執行指定的命令時,使用者、角色或群組會擔任該角色。若要開始使用 ASSUMEROLE 許可,請參閱 授予 ASSUMEROL 許可的使用須知

ON [ TABLE ] table_name

授予資料表或檢視的指定許可。TABLE 關鍵字為選用。您可在一個陳述式中列出多個資料表和檢視。

ON ALL TABLES IN SCHEMA schema_name

授予所參考結構描述中所有資料表和檢視的指定許可。

( column_name [,...] ) ON TABLE table_name

將 Amazon Redshift 資料表或檢視中指定資料欄的指定許可授予使用者、群組或 PUBLIC。

( column_list ) ON EXTERNAL TABLE schema_name.table_name

為所參考結構描述中 Lake Formation 資料表之指定欄上的 IAM 角色授予指定許可。

ON EXTERNAL TABLE schema_name.table_name

為所參考結構描述中 Lake Formation 資料表上的 IAM 角色授予指定許可。

ON EXTERNAL SCHEMA schema_name

為所參考結構描述上的 IAM 角色授予指定許可。

ON iam_role

將指定許可授予 IAM 角色。

TO username

指出接收許可的使用者。

TO IAM_ROLE iam_role

指出接收許可的 IAM 角色。

WITH GRANT OPTION

指出接收許可的使用者可以接著將相同的許可授予他人。無法將 WITH GRANT OPTION 授予群組或 PUBLIC。

ROLE role_name

將許可授予角色。

GROUP group_name

將許可授予使用者群組。可以使用逗號分隔清單來指定多個使用者群組。

PUBLIC

對所有使用者授予指定的許可,包括之後建立的使用者。PUBLIC 代表永遠包含所有使用者的群組。個別使用者的許可是由授予 PUBLIC 的許可、授予使用者所屬之任何群組的許可,以及個別授予使用者的任何許可,三者加總所組成。

將 PUBLIC 授予 Lake Formation EXTERNAL TABLE 會導致向 Lake Formation 的每個人群組授予許可。

CREATE

根據資料庫物件而定,將下列許可授予使用者或使用者群組:

  • 若是資料庫,CREATE 可讓使用者在資料庫內建立結構描述。

  • 若是結構描述,CREATE 可讓使用者在結構描述內建立物件。若要重新命名物件,使用者必須具有 CREATE 許可並擁有要重新命名的物件。

  • Amazon Redshift Spectrum 外部結構描述不支援 CREATE ON SCHEMA。若要授予外部結構描述中外部資料表的使用權,請將 USAGE ON SCHEMA 授予需要存取權的使用者。只有外部結構描述的擁有者或超級使用者才可在外部結構描述中建立外部資料表。若要轉移外部結構描述的所有權,請使用 ALTER SCHEMA 來變更擁有者。

TEMPORARY | TEMP

授予許可以在指定的資料庫中建立臨時資料表。若要執行 Amazon Redshift Spectrum 查詢,資料庫使用者必須具有在資料庫中建立臨時資料表的許可。

注意

根據預設,建立臨時資料表的許可是依使用者在 PUBLIC 群組中的自動成員資格授予。若要移除任何使用者建立暫存資料表的許可,請撤銷 PUBLIC 群組的 TEMP 許可。然後將建立暫存資料表的許可明確授予特定使用者或使用者群組。

ON DATABASE db_name

授予資料庫的指定許可。

USAGE

授予特定結構描述的 USAGE 許可,即可讓使用者存取該結構描述中的物件。若是本機 Amazon Redshift 結構描述,對這些物件的特定動作必須另行授予 (例如資料表的 SELECT 或 UPDATE 許可)。根據預設,所有使用者對 PUBLIC 結構描述都具有 CREATE 和 USAGE 許可。

當您使用 ON SCHEMA 語法將 USAGE 授予外部結構描述時,您不需要對外部結構描述中的物件個別授予動作。對應的目錄許可會控制外部結構描述物件的精細許可。

ON SCHEMA schema_name

授予結構描述的指定許可。

Amazon Redshift Spectrum 外部結構描述不支援 GRANT ALL ON SCHEMA 中的 GRANT CREATE ON SCHEMA 和 CREATE 許可。若要授予外部結構描述中外部資料表的使用權,請將 USAGE ON SCHEMA 授予需要存取權的使用者。只有外部結構描述的擁有者或超級使用者才可在外部結構描述中建立外部資料表。若要轉移外部結構描述的所有權,請使用 ALTER SCHEMA 來變更擁有者。

EXECUTE ON ALL FUNCTIONS IN SCHEMA schema_name

授予所參考結構描述中所有函數的指定許可。

Amazon Redshift 不支援對 pg_catalog 命名空間中定義的 pg_proc 內建項目使用 GRANT 或 REVOKE 陳述式。

EXECUTE ON PROCEDURE procedure_name

授予特定預存程序的 EXECUTE 許可。由於預存程序名稱可以過載,因此您必須包含程序的引數清單。如需詳細資訊,請參閱 命名預存程序

EXECUTE ON ALL PROCEDURES IN SCHEMA schema_name

授予所參考結構描述中所有預存程序的指定許可。

USAGE ON LANGUAGE language_name

授予某種語言的 USAGE 許可。

需具有 USAGE ON LANGUAGE 許可,才能透過執行 CREATE FUNCTION 命令建立使用者定義的函數 (UDF)。如需詳細資訊,請參閱 UDF 安全與權限

需具有 USAGE ON LANGUAGE 許可,才能透過執行 CREATE PROCEDURE 命令建立預存程序。如需詳細資訊,請參閱 預存程序的安全和權限

若是 Python UDF,請使用 plpythonu。若是 SQL UDF,請使用 sql。若為預存程序,請使用 plpgsql

FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL } [, ...]

指定 SQL 命令的授予權限。您可以指定 ALL 來授予 COPY、UNLOAD、EXTERNAL FUNCTION 和 CREATE MODEL 陳述式的許可。此子句僅適用於授予 ASSUMEROLE 許可。

ALTER

授予 ALTER 許可給使用者,使他們可以在資料共用中新增或移除物件,或設定屬性 PUBLICACCESSIBLE。如需詳細資訊,請參閱 ALTER DATASHARE

SHARE

授予使用者和使用者群組將資料取用者新增至資料共用的許可。需要此許可才能讓特定取用者 (帳戶或命名空間) 從其叢集存取資料共用。消費者可以是相同或不同的 AWS 帳戶,具有與全域唯一識別碼 (GUID) 所指定的相同或不同叢集命名空間。

ON DATASHARE datashare_name

授予參考資料共用的指定許可。如需有關取用者存取控制精細度的資訊,請參閱 在 Amazon Redshift 中共用不同層級的資料

USAGE

將 USAGE 授予相同帳戶內的取用者帳戶或命名空間時,帳戶內的特定取用者帳戶或命名空間可以以唯讀方式存取資料共用和資料共用的物件。

TO NAMESPACE 'clusternamespace GUID'

表示相同帳戶中的命名空間,取用者可以在其中接收資料共用的指定許可。命名空間使用 128 位元英數字元 GUID。

TO ACCOUNT 'accountnumber' [ VIA DATA CATALOG ]

表示另一個帳戶的編號,其中的取用者可以接收資料共用的指定許可。指定 ‘VIA DATA CATALOG’ 表示您正在授予資料共用的使用權給 Lake Formation 帳戶。省略此參數表示您將使用權授予擁有叢集的帳戶。

ON DATABASE shared_database_name> [, ...]

在指定資料共用中建立的指定資料庫上授予指定使用許可。

ON SCHEMA shared_schema

在指定資料共用中建立的指定結構描述上授予指定許可。

FOR { SCHEMAS | TABLES | FUNCTIONS | PROCEDURES | LANGUAGES } IN

指定要被授予權限的資料庫物件。IN 後面的參數定義授予權限的範圍。

建立模型

將 CREATE MODEL 許可授予特定使用者或使用者群組。

ON MODEL model_name

授予特定模型的 EXECUTE 許可。

ACCESS CATALOG

授予檢視角色可存取之物件之相關中繼資料的權限。

{ role } [, ...]

要授予其他角色、使用者或 PUBLIC 的角色。

PUBLIC 代表永遠包含所有使用者的群組。個別使用者的許可是由授予 PUBLIC 的許可、授予使用者所屬之任何群組的許可,以及個別授予使用者的任何許可,三者加總所組成。

TO { { user_name [ WITH ADMIN OPTION ] } | role }[, ...]

將指定的角色授予具有 WITH ADMIN OPTION、其他角色或 PUBLIC 的指定使用者。

WITH ADMIN OPTION 子句會為所有承授者提供所有授予角色的管理選項。

EXPLAIN RLS TO ROLE rolename

授予許可,對角色解釋 EXPLAIN 計畫中查詢的資料列層級安全性政策篩選。

IGNORE RLS TO ROLE rolename

授予許可,以略過對角色查詢資料列層級安全性政策。

若要進一步了解 GRANT 使用須知,請參閱 使用須知

如需使用 GRANT 的範例,請參閱 範例