

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# GRANT
<a name="r_GRANT"></a>

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

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

權限也包括下列資料共用生產者存取選項：
+  授予取用者命名空間和帳戶的資料共用存取權。
+  透過在資料共用中新增或移除物件，授予變更資料共用的權限。
+  透過從資料共用中新增或移除取用者命名空間，授予資料共用的權限。

資料共用取用者存取選項如下：
+ 授予使用者對從資料共用建立的資料庫，或指向此類資料庫的外部結構描述的完全存取權。
+ 授予使用者從資料共用建立之資料庫的物件層級權限，就像您對本機資料庫物件一樣。若要授予這個層級的權限，您必須在從資料共用建立資料庫時使用 WITH PERSOMES 子句。如需詳細資訊，請參閱[CREATE DATABASE](r_CREATE_DATABASE.md)。

如需資料共用權限的詳細資訊，請參閱 [您可以授予資料共用的權限](permissions-datashares.md)。

許可也包含下列 Amazon Redshift 聯合許可目錄：
+ 將資料表層級許可授予使用者和角色。
+ 授予資料表、檢視和具體化檢視的精細資料欄層級許可。
+ 將範圍許可授予使用者和角色。
+ 在 Amazon Redshift 聯合許可目錄上授予資料庫層級許可。

如需在 Amazon Redshift 聯合許可目錄上管理許可的詳細資訊，請參閱 [管理 Amazon Redshift 聯合許可目錄上的存取控制授予/撤銷](federated-permissions-managing-access.md)。如需 Amazon Redshift Federated Permissions Catalog 支援授予/撤銷語法的詳細資訊，請參閱[授予/撤銷](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html#federated-permissions-managing-access-grant-revoke)。

許可也包含聯合身分使用者的 CONNECT AWS IAM Identity Center 權限。此權限可讓管理員透過啟用 Amazon Redshift 聯合許可的每個 Amazon Redshift 工作群組或叢集 (Amazon Redshift Federated Permissions) 的精細許可來控制使用者存取。Amazon Redshift 管理員可以指定哪些 AWS IAM Identity Center 聯合身分使用者或群組可以直接連線至 Amazon Redshift 工作群組 (Amazon Redshift)，對每個工作群組或叢集 AWS IAM Identity Center 的使用者存取權提供精細的控制。

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

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

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

您無法在交易區塊 (BEGIN ... END) 內執行 GRANT (針對外部資源)。如需交易的相關資訊，請參閱 [Amazon Redshift 中的隔離層級](c_serial_isolation.md)。

若要查看使用者被授予的資料庫許可，請使用 [HAS\$1DATABASE\$1PRIVILEGE](r_HAS_DATABASE_PRIVILEGE.md)。若要查看使用者被授予的結構描述許可，請使用 [HAS\$1SCHEMA\$1PRIVILEGE](r_HAS_SCHEMA_PRIVILEGE.md)。若要查看使用者被授予的資料表許可，請使用 [HAS\$1TABLE\$1PRIVILEGE](r_HAS_TABLE_PRIVILEGE.md)。

## 語法
<a name="r_GRANT-synopsis"></a>



```
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 | USAGE | 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 | DROP } [,...] | 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 } [, ...]             

GRANT { { ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
    ON COPY JOB job_name [,...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON TEMPLATE [database_name.][schema_name.]template_name [,...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### 授予資料表的資料欄層級權限
<a name="grant-column-level"></a>

下列語法適用於 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 許可
<a name="grant-assumerole-permissions"></a>

以下語法可將 ASSUMEROLE 許可授予具有指定角色的使用者和群組。若要開始使用 ASSUMEROLE 權限，請參閱 [授予 ASSUMEROL 許可的使用須知](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole)。

```
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 整合的許可
<a name="grant-spectrum-integration-with-lf-syntax"></a>

以下是 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 ]
```

### 授予資料共用許可
<a name="grant-datashare-syntax"></a>

**生產者端資料共用權限**  
以下是使用 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](r_CREATE_DATABASE.md)。

**不使用 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 } [, ...]
```

### 授予限定範圍權限
<a name="grant-scoped-syntax"></a>

限定範圍許可讓您能夠對使用者或角色授予資料庫或結構描述內某一種類型的所有物件的許可。具有限定範圍許可的使用者和角色對於資料庫或結構描述內所有目前和未來的物件擁有指定的許可。

您可以在 [SVV\$1DATABASE\$1PRIVILEGES](r_SVV_DATABASE_PRIVILEGES.md) 中檢視資料庫層級限定範圍許可的範圍。您可以在 [SVV\$1SCHEMA\$1PRIVILEGES](r_SVV_SCHEMA_PRIVILEGES.md) 中檢視結構描述層級限定範圍許可的範圍。

如需限定範圍許可的詳細資訊，請參閱 [限定範圍權限](t_scoped-permissions.md)。

以下是將限定範圍權限授予使用者或角色的語法。

```
GRANT { CREATE | USAGE | ALTER | DROP } [,...] | 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 } [, ...]  

GRANT { { CREATE | ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
FOR COPY JOBS 
IN DATABASE db_name
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]

GRANT { { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
FOR TEMPLATES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]
```

請注意，限定範圍許可不區分函式的許可和程序的許可。例如，下列陳述式會同時將結構描述 `Sales_schema` 中函式和程序的 `EXECUTE` 許可授予 `bob`。

```
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
```

### 授予機器學習許可
<a name="grant-model-syntax"></a>

以下是 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 } [, ...]
```

### 授予角色許可
<a name="grant-roles"></a>

以下是在 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 | ACCESS SYSTEM TABLE
    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 |
    IGNORE RLS | EXPLAIN RLS | 
    EXPLAIN MASKING }[, ...]
  }
  | { ALL [ PRIVILEGES ] }
TO ROLE role_name [, ...]
```

### 授予安全政策的解釋許可
<a name="grant-row-level-security"></a>

以下語法可用來授予許可，以解釋 EXPLAIN 計畫中查詢的安全政策篩選。可能的安全政策包括資料列層級安全政策和動態資料遮罩政策。

```
GRANT EXPLAIN { RLS | MASKING } TO ROLE rolename 
```

以下是授予許可以略過查詢資料列層級安全性政策的語法。此語法不適用於動態資料遮罩政策。

```
GRANT IGNORE RLS TO ROLE rolename 
```

以下是對指定安全政策授予查詢資料表許可的語法。可能的安全政策包括資料列層級安全政策和動態資料遮罩政策。

```
GRANT SELECT ON [ TABLE ] table_name [, ...]
TO { RLS | MASKING } POLICY policy_name [, ...]
```

### 授予連線許可
<a name="grant-connection-permissions"></a>

以下是授予聯合身分使用者 （或群組） AWS IAM Identity Center 連線至工作群組/叢集許可的語法：

```
GRANT CONNECT [ON WORKGROUP]
TO [USER] <prefix>:<username> | ROLE <prefix>:<rolename> | PUBLIC;
```

## Parameters
<a name="r_GRANT-parameters"></a>

SELECT   <a name="grant-select"></a>
授予許可以使用 SELECT 陳述式從資料表或檢視選取資料。另外也需要 SELECT 許可，才能參考 UPDATE 或 DELETE 操作的現有資料欄值。

INSERT   <a name="grant-insert"></a>
授予許可以使用 INSERT 陳述式或 COPY 陳述式將資料載入資料表中。

UPDATE   <a name="grant-update"></a>
授予許可以使用 UPDATE 陳述式更新資料表資料欄。UPDATE 操作也需要 SELECT 許可，因為這些操作必須參考資料表資料欄，才能判斷要更新哪些資料列，或運算資料欄的新值。

DELETE  <a name="grant-delete"></a>
允許刪除資料表中的資料列。DELETE 操作也需要 SELECT 許可，因為這些操作必須參考資料表資料欄，才能判斷要刪除哪些資料列。

DROP  <a name="grant-drop"></a>
根據資料庫物件而定，將下列許可授予使用者或角色：  
+  對於資料表，DROP 會授予捨棄資料表或檢視的許可。如需詳細資訊，請參閱[DROP TABLE](r_DROP_TABLE.md)。
+  對於資料庫，DROP 會授予捨棄資料庫的許可。如需詳細資訊，請參閱[DROP DATABASE](r_DROP_DATABASE.md)。
+  對於結構描述，DROP 會授予捨棄結構描述的許可。如需詳細資訊，請參閱[DROP SCHEMA](r_DROP_SCHEMA.md)。

REFERENCES   <a name="grant-references"></a>
授予建立外部索引鍵限制條件的許可。您需要在被動參考資料表與主動參考資料表上授予此許可；否則，使用者就無法建立限制條件。

ALTER  <a name="grant-alter"></a>
根據資料庫物件而定，將下列許可授予使用者或使用者群組：  
+ 對於資料表，ALTER 會授予修改資料表或檢視的許可。如需詳細資訊，請參閱[ALTER TABLE](r_ALTER_TABLE.md)。
+ 對於資料庫，ALTER 會授予修改資料庫的許可。如需詳細資訊，請參閱[ALTER DATABASE](r_ALTER_DATABASE.md)。
+ 對於結構描述，ALTER 會授予修改結構描述的許可。如需詳細資訊，請參閱[ALTER SCHEMA](r_ALTER_SCHEMA.md)。
+ 對於外部資料表，ALTER 會授予許可，以允許在針對 Lake Formation 啟用的 AWS Glue Data Catalog 中修改資料表。此許可僅適用於使用 Lake Formation 時。

TRUNCATE  <a name="grant-truncate"></a>
允許截斷資料表 如果沒有此許可，只有資料表的擁有者或超級使用者可以截斷資料表。如需 TRUNCATE 命令的相關資訊，請參閱 [TRUNCATE](r_TRUNCATE.md)。

ALL [ PRIVILEGES ]   <a name="grant-all"></a>
對指定的使用者或角色一次授予所有可用的許可。PRIVILEGES 關鍵字為選用。  
GRANT ALL ON SCHEMA 不會授予外部結構描述的 CREATE 許可。  
您可以將 ALL 許可授予已啟用 Lake Formation AWS Glue Data Catalog 的 中的資料表。在這種情況下，系統會將 SELECT 和 ALTER 等個別許可記錄在 Data Catalog. 中。  
 Amazon Redshift 不支援 RULE 和 TRIGGER 許可。如需詳細資訊，請前往 [不支援的 PostgreSQL 功能](c_unsupported-postgresql-features.md)。

ASSUMEROLE  <a name="assumerole"></a>
對使用者、角色或具有指定角色的群組授予執行 COPY、UNLOAD、EXTERNAL FUNCTION 和 CREATE MODEL 命令的許可。執行指定的命令時，使用者、角色或群組會擔任該角色。若要開始使用 ASSUMEROLE 許可，請參閱 [授予 ASSUMEROL 許可的使用須知](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole)。

ON [ TABLE ] *table\$1name*   <a name="grant-on-table"></a>
授予資料表或檢視的指定許可。TABLE 關鍵字為選用。您可在一個陳述式中列出多個資料表和檢視。

ON ALL TABLES IN SCHEMA *schema\$1name*   <a name="grant-all-tables"></a>
授予所參考結構描述中所有資料表和檢視的指定許可。

( *column\$1name* [,...] ) ON TABLE *table\$1name*   <a name="grant-column-level-privileges"></a>
將 Amazon Redshift 資料表或檢視中指定資料欄的指定許可授予使用者、群組或 PUBLIC。

( *column\$1list* ) ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="grant-external-table-column"></a>
為所參考結構描述中 Lake Formation 資料表之指定欄上的 IAM 角色授予指定許可。

ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="grant-external-table"></a>
為所參考結構描述中 Lake Formation 資料表上的 IAM 角色授予指定許可。

ON EXTERNAL SCHEMA *schema\$1name*   <a name="grant-external-schema"></a>
為所參考結構描述上的 IAM 角色授予指定許可。

ON *iam\$1role*   <a name="grant-iam_role"></a>
將指定許可授予 IAM 角色。

TO *username*   <a name="grant-to"></a>
指出接收許可的使用者。

TO IAM\$1ROLE *iam\$1role*   <a name="grant-to-iam-role"></a>
指出接收許可的 IAM 角色。

WITH GRANT OPTION   <a name="grant-with-grant"></a>
指出接收許可的使用者可以接著將相同的許可授予他人。無法將 WITH GRANT OPTION 授予群組或 PUBLIC。

ROLE *role\$1name*   <a name="grant-role"></a>
將許可授予角色。

GROUP *group\$1name*   <a name="grant-group"></a>
將許可授予使用者群組。可以使用逗號分隔清單來指定多個使用者群組。

PUBLIC   <a name="grant-public"></a>
對所有使用者授予指定的許可，包括之後建立的使用者。PUBLIC 代表永遠包含所有使用者的群組。個別使用者的許可是由授予 PUBLIC 的許可、授予使用者所屬之任何群組的許可，以及個別授予使用者的任何許可，三者加總所組成。  
將 PUBLIC 授予 Lake Formation EXTERNAL TABLE 會導致向 Lake Formation 的*每個人*群組授予許可。

將 【ON WORKGROUP】 連接至 \$1 【USER】 <prefix>：<username> \$1 ROLE <prefix>：<rolename> \$1 PUBLIC \$1  
准許將工作群組或叢集連線至 AWS IAM Identity Center 聯合身分使用者或群組。字首識別身分提供者。授予 PUBLIC AWS IAM Identity Center 時， 許可適用於所有聯合身分使用者，包括稍後建立的使用者。此許可僅適用於在工作群組或叢集上啟用 Amazon Redshift 聯合許可時。

CREATE   <a name="grant-create"></a>
根據資料庫物件而定，將下列許可授予使用者或使用者群組：  
+ 若是資料庫，CREATE 可讓使用者在資料庫內建立結構描述。
+ 若是結構描述，CREATE 可讓使用者在結構描述內建立物件。若要重新命名物件，使用者必須具有 CREATE 許可並擁有要重新命名的物件。
+ Amazon Redshift Spectrum 外部結構描述不支援 CREATE ON SCHEMA。若要授予外部結構描述中外部資料表的使用權，請將 USAGE ON SCHEMA 授予需要存取權的使用者。只有外部結構描述的擁有者或超級使用者才可在外部結構描述中建立外部資料表。若要轉移外部結構描述的所有權，請使用 [ALTER SCHEMA](r_ALTER_SCHEMA.md) 來變更擁有者。

TEMPORARY \$1 TEMP   <a name="grant-temporary"></a>
授予許可以在指定的資料庫中建立臨時資料表。若要執行 Amazon Redshift Spectrum 查詢，資料庫使用者必須具有在資料庫中建立臨時資料表的許可。  
根據預設，建立臨時資料表的許可是依使用者在 PUBLIC 群組中的自動成員資格授予。若要移除任何使用者建立暫存資料表的許可，請撤銷 PUBLIC 群組的 TEMP 許可。然後將建立暫存資料表的許可明確授予特定使用者或使用者群組。

ON DATABASE *db\$1name*   <a name="grant-database"></a>
授予資料庫的指定許可。

USAGE   <a name="grant-usage"></a>
授予特定結構描述的 USAGE 許可，即可讓使用者存取該結構描述中的物件。若是本機 Amazon Redshift 結構描述，對這些物件的特定動作必須另行授予 (例如資料表的 SELECT 或 UPDATE 許可)。根據預設，所有使用者對 PUBLIC 結構描述都具有 CREATE 和 USAGE 許可。  
 當您使用 ON SCHEMA 語法將 USAGE 授予外部結構描述時，您不需要對外部結構描述中的物件個別授予動作。對應的目錄許可會控制外部結構描述物件的精細許可。

ON SCHEMA *schema\$1name*   <a name="grant-schema"></a>
授予結構描述的指定許可。  
Amazon Redshift Spectrum 外部結構描述不支援 GRANT ALL ON SCHEMA 中的 GRANT CREATE ON SCHEMA 和 CREATE 許可。若要授予外部結構描述中外部資料表的使用權，請將 USAGE ON SCHEMA 授予需要存取權的使用者。只有外部結構描述的擁有者或超級使用者才可在外部結構描述中建立外部資料表。若要轉移外部結構描述的所有權，請使用 [ALTER SCHEMA](r_ALTER_SCHEMA.md) 來變更擁有者。

EXECUTE ON ALL FUNCTIONS IN SCHEMA *schema\$1name*  <a name="grant-all-functions"></a>
授予所參考結構描述中所有函數的指定許可。  
Amazon Redshift 不支援對 pg\$1catalog 命名空間中定義的 pg\$1proc 內建項目使用 GRANT 或 REVOKE 陳述式。

EXECUTE ON PROCEDURE *procedure\$1name*   <a name="grant-procedure"></a>
授予特定預存程序的 EXECUTE 許可。由於預存程序名稱可以過載，因此您必須包含程序的引數清單。如需詳細資訊，請參閱[命名預存程序](stored-procedure-naming.md)。

EXECUTE ON ALL PROCEDURES IN SCHEMA *schema\$1name*  <a name="grant-all-procedures"></a>
授予所參考結構描述中所有預存程序的指定許可。

USAGE ON LANGUAGE *language\$1name*   
授予某種語言的 USAGE 許可。  
自 2025 年 11 月 1 日起，Amazon Redshift 不再支援建立新的 Python UDF。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。自 2026 年 7 月 1 日起，Amazon Redshift 將不再支援 Python UDF。我們建議您在 2025 年 11 月 1 日之前將現有的 Python UDF 移轉至 Lambda UDF。如需建立和使用 Lambda UDF 的相關資訊，請參閱 [純量 Lambda UDF](udf-creating-a-lambda-sql-udf.md)。如需將現有 Python UDF 轉換為 Lambda UDF 的相關資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。
需具有 USAGE ON LANGUAGE 許可，才能透過執行 [CREATE FUNCTION](r_CREATE_FUNCTION.md) 命令建立使用者定義的函數 (UDF)。如需詳細資訊，請參閱[UDF 安全與許可](udf-security-and-privileges.md)。  
需具有 USAGE ON LANGUAGE 許可，才能透過執行 [CREATE PROCEDURE](r_CREATE_PROCEDURE.md) 命令建立預存程序。如需詳細資訊，請參閱[預存程序的安全和權限](stored-procedure-security-and-privileges.md)。  
若是 Python UDF，請使用 `plpythonu`。若是 SQL UDF，請使用 `sql`。若為預存程序，請使用 `plpgsql`。

ON COPY JOB *job\$1name*  <a name="on-copy-job"></a>
授予複製任務的指定許可。

FOR \$1 ALL \$1 COPY \$1 UNLOAD \$1 EXTERNAL FUNCTION \$1 CREATE MODEL \$1 [, ...]   <a name="grant-for"></a>
指定 SQL 命令的授予權限。您可以指定 ALL 來授予 COPY、UNLOAD、EXTERNAL FUNCTION 和 CREATE MODEL 陳述式的許可。此子句僅適用於授予 ASSUMEROLE 許可。

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

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

ON DATASHARE *datashare\$1name*   <a name="grant-datashare"></a>
授予參考資料共用的指定許可。如需有關取用者存取控制精細度的資訊，請參閱 [Amazon Redshift 中不同層級的資料共用](datashare-overview.md#granularity)。

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

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

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

ON DATABASE *shared\$1database\$1name> [, ...]*   <a name="grant-datashare"></a>
在指定資料共用中建立的指定資料庫上授予指定使用許可。

ON SCHEMA* shared\$1schema*   <a name="grant-datashare"></a>
在指定資料共用中建立的指定結構描述上授予指定許可。

FOR \$1 SCHEMAS \$1 TABLES \$1 FUNCTIONS \$1 PROCEDURES \$1 LANGUAGES \$1 COPY JOBS\$1 IN   
指定要被授予權限的資料庫物件。IN 後面的參數定義授予權限的範圍。

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

ON MODEL *model\$1name*  
授予特定模型的 EXECUTE 許可。

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

\$1 role \$1 [, ...]  
要授予其他角色、使用者或 PUBLIC 的角色。  
PUBLIC 代表永遠包含所有使用者的群組。個別使用者的許可是由授予 PUBLIC 的許可、授予使用者所屬之任何群組的許可，以及個別授予使用者的任何許可，三者加總所組成。

TO \$1 \$1 *user\$1name* [ WITH ADMIN OPTION ] \$1 \$1 role \$1[, ...]  
將指定的角色授予具有 WITH ADMIN OPTION、其他角色或 PUBLIC 的指定使用者。  
WITH ADMIN OPTION 子句會為所有承授者提供所有授予角色的管理選項。

EXPLAIN \$1 RLS \$1 MASKING \$1 TO ROLE *rolename*  
授予角色解釋 EXPLAIN 計畫中查詢的安全政策篩選的許可。RLS 會授予許可，以解釋資料列層級安全政策篩選。MASKING 會授予許可，以解釋動態資料遮罩政策篩選。

IGNORE RLS TO ROLE *rolename*   
授予許可，以略過對角色查詢資料列層級安全性政策。

TO \$1 RLS \$1 MASKING \$1 POLICY *policy\$1name*  
指出接收許可的安全政策。TO RLS POLICY 表示資料列層級安全政策。TO MASKING POLICY 表示動態資料遮罩政策。

## 使用須知
<a name="r_GRANT-usage-notes-link"></a>

若要進一步了解 GRANT 使用須知，請參閱 [使用須知](r_GRANT-usage-notes.md)。

## 範例
<a name="r_GRANT-examples-link"></a>

如需使用 GRANT 的範例，請參閱 [範例](r_GRANT-examples.md)。

# 使用須知
<a name="r_GRANT-usage-notes"></a>

若要授予物件的權限，您必須符合下列條件之一：
+ 身為物件擁有者。
+ 身為超級使用者。
+ 具有該物件和權限的授予權限。

例如，以下命令可讓使用者 HR 在 employees 資料表上執行 SELECT 命令，並對其他使用者授予和撤銷相同的權限。

```
grant select on table employees to HR with grant option;
```

HR 無法授予 SELECT 以外任何操作的權限，也無法授予 employees 資料表以外任何資料表的權限。

在另一個範例中，以下命令可讓使用者 HR 在 employees 資料表上執行 ALTER 命令，並對其他使用者授予和撤銷相同的權限。

```
grant ALTER on table employees to HR with grant option;
```

HR 無法授予 ALTER 以外任何操作的權限，也無法授予 employees 資料表以外任何資料表的權限。

在檢視上授予權限並不表示具有基礎資料表的權限。同樣地，在結構描述上授予權限並不表示具有結構描述中資料表的權限。請改為明確授與基礎資料表的存取權限。

若要將權限授予 AWS Lake Formation 資料表，與資料表外部結構描述相關聯的 IAM 角色必須具有將權限授予外部資料表的許可。下列範例所建立的外部結構描述內含相關聯的 `myGrantor` IAM 角色。該 `myGrantor` IAM 角色具備將許可授予他人的許可。GRANT 命令會使用與外部結構描述相關聯的 `myGrantor` IAM 角色許可，將許可授予 `myGrantee` IAM 角色。

```
create external schema mySchema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myGrantor'
create external database if not exists;
```

```
grant select
on external table mySchema.mytable
to iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

如果對 IAM 角色將授予所有權限 (GRANT ALL)，則啟用 Lake Formation 的相關 Data Catalog 中將授予個別權限。例如，執行下列 GRANT ALL 的結果是 Lake Formation 主控台中會顯示授予的個別權限 (SELECT、ALTER、DROP、DELETE 和 INSERT)。

```
grant all
on external table mySchema.mytable
to iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

無論是使用 GRANT 或 REVOKE 命令設定物件權限，超級使用者都能存取所有物件。

## 欄位層級存取控制的使用須知
<a name="r_GRANT-usage-notes-clp"></a>

下列使用須知適用於 Amazon Redshift 資料表和檢視上的資料欄層級權限。這些須知會描述資料表；除非我們明確提到例外，否則相同的須知會適用於檢視。
+ 對於 Amazon Redshift 資料表，您只能在資料欄層級授予 SELECT 和 UPDATE 權限。對於 Amazon Redshift 檢視，您只能在資料欄層級授予 SELECT 權限。
+ 在資料表上的資料欄層級 GRANT 內容中使用時，ALL 關鍵字是 SELECT 和 UPDATE 權限組合的同義詞。
+ 如果您沒有資料表中所有資料欄的 SELECT 權限，執行 SELECT \$1 操作只會傳回您有權存取的資料欄。使用檢視時，SELECT \$1 操作會嘗試存取檢視中的所有欄。如果您沒有存取所有欄的許可，這些查詢就會失敗，並顯示許可遭拒錯誤。
+ 在以下情況下，SELECT \$1 不會擴展到僅可存取的資料欄：
  + 您無法使用 SELECT \$1 建立僅具有可存取資料欄的一般檢視。
  + 您無法使用 SELECT \$1 建立僅具有可存取資料欄的具體化視觀表。
+ 如果您有資料表或檢視的 SELECT 或 UPDATE 權限並新增一個資料欄，則您對資料表或檢視及其所有資料欄仍具有相同的權限。
+ 只有資料表的擁有者或超級使用者可以授與資料欄層級權限。
+ 資料欄層級權限不支援 WITH GRANT OPTION 子句。
+ 您無法同時在資料表層級和資料欄層級擁有相同的權限。例如，使用者 `data_scientist` 不能同時擁有資料表 `employee` 和資料欄 `employee.department` 的 SELECT 權限。對資料表和資料表內的資料欄授與相同權限時，請考慮下列結果：
  + 如果使用者具有資料表的資料表層級權限，則在資料欄層級授與相同權限就沒有作用。
  + 如果使用者具有資料表的資料表層級權限，對資料表的一或多個資料欄撤銷相同的權限，則會傳回錯誤。請改為在資料表層級撤銷權限。
  + 如果使用者具有資料欄層級權限，在資料表層級授與相同的權限，則會傳回錯誤。
  + 如果使用者具有資料欄層級權限，在資料表層級撤銷相同的權限，則會撤銷資料表上所有資料欄的資料欄和資料表權限。
+ 您無法授與延遲繫結檢視的資料欄層級權限。
+ 若要建立具體化檢視，您必須具有基礎資料表的資料表層級 SELECT 權限。即使您擁有特定資料欄層級的權限，也無法針對這些資料欄建立具體化檢視。不過，您可以將 SELECT 權限授與具體化檢視的資料欄，與一般檢視類似。
+ 若要查閱資料欄層級權限的授與，請使用 [PG\$1ATTRIBUTE\$1INFO](r_PG_ATTRIBUTE_INFO.md) 檢視。

## 授予 ASSUMEROL 許可的使用須知
<a name="r_GRANT-usage-notes-assumerole"></a>

下列是在 Amazon Redshift 中授予 ASSUMEROLE 許可的使用須知。

您可以使用 ASSUMEROLE 許可控制資料庫使用者、角色或群組在命令上的 IAM 角色存取許可，例如 COPY、UNLOAD、EXTERNAL FUNCTION 或 CREATE MODEL 等命令。將 ASSUMEROLE 許可授予 IAM 角色的使用者、角色或群組之後，使用者、角色或群組就可以在執行命令時擔任該角色。ASSUMEROLE 許可可讓您視需要授予適當命令的存取權。

只有資料庫超級使用者可以授予或撤銷使用者、角色和群組的 ASSUMEROLE 許可。超級使用者始終保有 ASSUMEROLE 許可。

若要為使用者、角色和群組啟用 ASSUMEROLE 許可的使用權，超級使用者會執行下列兩個動作：
+ 在叢集上執行下列陳述式一次：

  ```
  revoke assumerole on all from public for all;
  ```
+ 將 ASSUMEROLE 許可授予使用者、角色和群組，以使用適當的命令。

授予 ASSUMEROLE 許可時，您可以在 ON 子句中指定角色鏈結。您可以使用逗號來分隔角色鏈中的角色，例如：`Role1,Role2,Role3`。如果在授予 ASSUMEROLE 權限時指定角色鏈結，您必須在執行 ASSUMEROLE 許可授予的操作時指定角色鏈結。執行 ASSUMEROLE 許可授予的操作時，您無法指定角色鏈中的個別角色。例如，如果使用者、角色或群組被授予角色鏈結 `Role1,Role2,Role3`，則您無法指定僅 `Role1` 執行操作。

如果使用者嘗試執行 COPY、UNLOAD、EXTERNAL FUNCTION 或 CREATE MODEL 操作，但尚未獲得 ASSUMEROLE 許可，則會出現類似下列內容的訊息。

```
ERROR:  User awsuser does not have ASSUMEROLE permission on IAM role "arn:aws:iam::123456789012:role/RoleA" for COPY 
```

若要列出已透過 ASSUMEROLE 許可授予 IAM 角色和命令存取權的使用者，請參閱。[HAS\$1ASSUMEROLE\$1PRIVILEGE](r_HAS_ASSUMEROLE_PRIVILEGE.md)若要列出已授予所指定使用者的 IAM 角色和命令許可，請參閱 [PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER](PG_GET_IAM_ROLE_BY_USER.md)。若要列出已授予您指定 IAM 角色存取權的使用者、角色和群組，請參閱 [PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE](PG_GET_GRANTEE_BY_IAMROLE.md)。

## 授予機器學習許可的使用須知
<a name="r_GRANT-usage-notes-create-model"></a>

您無法直接授予或撤銷與 ML 函數相關的許可。ML 函數屬於 ML 模型，而且許可是透過模型控制的。相反地，您可以授予 ML 模型相關的許可。下列範例會示範如何授予許可給所有使用者，以便執行與模型 `customer_churn` 相關聯的 ML 函數。

```
GRANT EXECUTE ON MODEL customer_churn TO PUBLIC;
```

您也可以對 ML 模型 `customer_churn` 的使用者授予所有許可。

```
GRANT ALL on MODEL customer_churn TO ml_user;
```

如果結構描述中有 ML 函數，則授予 ML 函數相關的 `EXECUTE` 許可將會失敗，即使該 ML 函數已經具有透過 `GRANT EXECUTE ON MODEL` 取得的 `EXECUTE` 許可也是一樣。我們建議您在使用 `CREATE MODEL` 命令時，使用個別的結構描述，將 ML 函數本身保留在不同的結構描述中。下列範例示範如何執行此動作。

```
CREATE MODEL ml_schema.customer_churn
FROM customer_data
TARGET churn
FUNCTION ml_schema.customer_churn_prediction
IAM_ROLE default
SETTINGS (
 S3_BUCKET 'amzn-s3-demo-bucket'
);
```

# 範例
<a name="r_GRANT-examples"></a>

 以下範例會將 SALES 資料表的 SELECT 權限授予使用者 `fred`。

```
grant select on table sales to fred;
```

以下範例會將 QA\$1TICKIT 結構描述中所有資料表的 SELECT 權限授予使用者 `fred`。

```
grant select on all tables in schema qa_tickit to fred;
```

以下範例會將 QA\$1TICKIT 結構描述中的所有結構描述權限授予使用者群組 QA\$1USERS。結構描述權限為 CREATE 和 USAGE。USAGE 會授予使用者存取結構描述中物件的權限，但不會授予物件的 INSERT 或 SELECT 這類權限。分別授與每個物件的權限。

```
create group qa_users;
grant all on schema qa_tickit to group qa_users;
```

以下範例會將 QA\$1TICKIT 結構描述中 SALES 資料表的所有權限授予群組 QA\$1USERS 中的所有使用者。

```
grant all on table qa_tickit.sales to group qa_users;
```

以下範例會將 QA\$1TICKIT 結構描述中 SALES 資料表的所有權限授予群組 QA\$1USERS 和 RO\$1USERS 中的所有使用者。

```
grant all on table qa_tickit.sales to group qa_users, group ro_users;
```

以下範例會將 QA\$1TICKIT 結構描述中 SALES 資料表的 DROP 權限授予群組 QA\$1USERS 中的所有使用者。

```
grant drop on table qa_tickit.sales to group qa_users;>
```

以下一系列命令說明，結構描述的存取權不會授予結構描述中資料表的權限。

```
create user schema_user in group qa_users password 'Abcd1234';
create schema qa_tickit;
create table qa_tickit.test (col1 int);
grant all on schema qa_tickit to schema_user;

set session authorization schema_user;
select current_user;


current_user
--------------
schema_user
(1 row)


select count(*) from qa_tickit.test;


ERROR: permission denied for relation test [SQL State=42501]


set session authorization dw_user;
grant select on table qa_tickit.test to schema_user;
set session authorization schema_user;
select count(*) from qa_tickit.test;


count
-------
0
(1 row)
```

以下一系列命令說明，檢視的存取權不代表能夠存取其基礎資料表。雖然名為 VIEW\$1USER 的使用者具有 VIEW\$1DATE 的所有權限，但這位使用者仍無法從 DATE 資料表選取。

```
create user view_user password 'Abcd1234';
create view view_date as select * from date;
grant all on view_date to view_user;
set session authorization view_user;
select current_user;


current_user
--------------
view_user
(1 row)


select count(*) from view_date;


count
-------
365
(1 row)


select count(*) from date;


ERROR:  permission denied for relation date
```

下列範例會將 `cust_profile` 資料表中 `cust_name` 和 `cust_phone` 資料欄的 SELECT 權限授予使用者 `user1`。

```
grant select(cust_name, cust_phone) on cust_profile to user1;
```

下列範例會將 `cust_name` 和 `cust_phone` 資料欄的 SELECT 權限，以及 `cust_profile` 資料表中 `cust_contact_preference` 資料欄的 UPDATE 權限授予 `sales_group` 群組。

```
grant select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile to group sales_group;
```

下列範例顯示 ALL 關鍵字的使用方式，以將資料表 `cust_profile` 中三個資料欄的 SELECT 和 UPDATE 權限授予 `sales_admin` 群組。

```
grant ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile to group sales_admin;
```

以下範例會將 `cust_profile_vw` 檢視中 `cust_name` 資料欄的 SELECT 權限授予 `user2` 使用者。

```
grant select(cust_name) on cust_profile_vw to user2;
```

## 授予資料共用存取權的範例
<a name="r_GRANT-examples-datashare"></a>

以下是顯示 GRANT 資料共用使用許可的範例，用於特定資料庫或從資料共用建立的結構描述。

在下列範例中，生產者端管理員會授予指定之命名空間的 `salesshare` 資料共用上的 USAGE 權限。

```
GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

在下列範例中，取用者端管理員會在 `sales_db` 至 `Bob` 上授予的 USAGE 權限。

```
GRANT USAGE ON DATABASE sales_db TO Bob;
```

在下列範例中，取用者端管理員會將 `sales_schema` 結構描述的 GRANT USAGE 權限授予 `Analyst_role` 角色。`sales_schema` 是指向 sales\$1db 的外部結構描述。

```
GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
```

此時，`Bob` 和 `Analyst_role` 可以存取 `sales_schema` 和 `sales_db` 中的所有資料庫物件。

下列範例顯示授予共用資料庫中物件的其他物件層級權限。只有當用於建立共用資料庫之 CREATE DATABASE 使用 WITH PERMISSIONS 子句，這些額外的權限才是必要的。如果 CREATE DATABASE 命令沒有使用 WITH PERMISSIONS，授予共用資料庫上的 USAGE 權限即是授予對該資料庫中所有物件的完全存取權限。

```
GRANT SELECT ON sales_db.sales_schema.tickit_sales_redshift to Bob;
```

## 授予限定範圍權限的範例
<a name="r_GRANT-examples-scoped"></a>

下列範例會將 `Sales_db` 資料庫中所有目前和未來結構描述的使用權授予 `Sales` 角色。

```
GRANT USAGE FOR SCHEMAS IN DATABASE Sales_db TO ROLE Sales;
```

下列範例會將 `Sales_db` 資料庫中所有目前和未來資料表的 SELECT 權限授予使用者 `alice`，並提供 `alice` 權限以授予 `Sales_db` 中資料表的限定範圍權限給其他使用者。

```
GRANT SELECT FOR TABLES IN DATABASE Sales_db TO alice WITH GRANT OPTION;
```

下列範例會將 `Sales_schema` 結構描述中函數的 EXECUTE 權限授予使用者 `bob`。

```
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
```

下列範例會將 `ShareDb` 資料庫的 `ShareSchema` 結構描述中所有資料表的所有權限授予 `Sales` 角色。當指定結構描述時，您可以使用兩部分格式 `database.schema` 指定結構描述的資料庫。

```
GRANT ALL FOR TABLES IN SCHEMA ShareDb.ShareSchema TO ROLE Sales;
```

以下範例與前面的範例是相同的。您可以使用 `DATABASE` 關鍵字來指定資料庫，而不是使用兩部分格式。

```
GRANT ALL FOR TABLES IN SCHEMA ShareSchema DATABASE ShareDb TO ROLE Sales;
```

## 授予 ASSUMEROLE 權限的範例
<a name="r_GRANT-examples-assumerole"></a>

以下是授予 ASSUMEROLE 權限的範例

下列範例顯示超級使用者在叢集上執行一次的 REVOKE 陳述式，以啟用使用者和群組的 ASSUMEROLE 權限。然後，超級使用者會將 ASSUMEROLE 權限授予使用者和群組，以取得適當的命令。有關如何為使用者和群組啟用 ASSUMEROLE 權限的資訊，請參閱 [授予 ASSUMEROL 許可的使用須知](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole)。

```
revoke assumerole on all from public for all;
```

下列範例會將 ASSUMEROLE 權限授予使用者 `reg_user1`，讓 IAM 角色 `Redshift-S3-Read` 執行 COPY 操作。

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-S3-Read'
to reg_user1 for copy;
```

下列範例會將 ASSUMEROLE 權限授予使用者 `reg_user1`，讓 IAM 角色鏈 `RoleB`、`RoleA` 執行 UNLOAD 操作。

```
grant assumerole
on 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB'
to reg_user1
for unload;
```

以下是使用 IAM 角色鏈結 `RoleA`、`RoleB` 的 UNLOAD 命令範例。

```
unload ('select * from venue limit 10')
to 's3://companyb/redshift/venue_pipe_'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

下列範例會將 ASSUMEROLE 權限授予使用者 `reg_user1`，讓 IAM 角色 `Redshift-Exfunc` 建立外部函數。

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-Exfunc'
to reg_user1 for external function;
```

下列範例會將 ASSUMEROLE 權限授予使用者 `reg_user1`，讓 IAM 角色 `Redshift-model` 建立機器學習模型。

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-ML'
to reg_user1 for create model;
```

## 授予 ROLE 權限的範例
<a name="r_GRANT-examples-role"></a>

下列範例會將 sample\$1role1 授予 user1。

```
CREATE ROLE sample_role1;
GRANT ROLE sample_role1 TO user1;
```

下列範例會使用 WITH ADMIN OPTION 選項將 sample\$1role1 授予 user1、為 user1 設定目前工作階段，以及 user1 會將 sample\$1role1 授予 user2。

```
GRANT ROLE sample_role1 TO user1 WITH ADMIN OPTION;
SET SESSION AUTHORIZATION user1;
GRANT ROLE sample_role1 TO user2;
```

下列範例會將 sample\$1role1 授予 sample\$1role2。

```
GRANT ROLE sample_role1 TO ROLE sample_role2;
```

下列範例會將 sample\$1role2 授予 sample\$1role3 和 sample\$1role4。然後嘗試將 sample\$1role3 授予 sample\$1role1。

```
GRANT ROLE sample_role2 TO ROLE sample_role3;
GRANT ROLE sample_role3 TO ROLE sample_role2;
ERROR: cannot grant this role, a circular dependency was detected between these roles
```

下列範例會將 CREATE USER 系統權限授予 sample\$1role1。

```
GRANT CREATE USER TO ROLE sample_role1;
```

下列範例會將系統定義角色 `sys:dba` 授予 user1。

```
GRANT ROLE sys:dba TO user1;
```

下列範例會嘗試將循環相依性中的 sample\$1role3 授予 sample\$1role2。

```
CREATE ROLE sample_role3;
GRANT ROLE sample_role2 TO ROLE sample_role3;
GRANT ROLE sample_role3 TO ROLE sample_role2; -- fail
ERROR:  cannot grant this role, a circular dependency was detected between these roles
```