

 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/)。

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

# 使用須知
<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 \* 操作只會傳回您有權存取的資料欄。使用檢視時，SELECT \* 操作會嘗試存取檢視中的所有欄。如果您沒有存取所有欄的許可，這些查詢就會失敗，並顯示許可遭拒錯誤。
+ 在以下情況下，SELECT \* 不會擴展到僅可存取的資料欄：
  + 您無法使用 SELECT \* 建立僅具有可存取資料欄的一般檢視。
  + 您無法使用 SELECT \* 建立僅具有可存取資料欄的具體化視觀表。
+ 如果您有資料表或檢視的 SELECT 或 UPDATE 權限並新增一個資料欄，則您對資料表或檢視及其所有資料欄仍具有相同的權限。
+ 只有資料表的擁有者或超級使用者可以授與資料欄層級權限。
+ 資料欄層級權限不支援 WITH GRANT OPTION 子句。
+ 您無法同時在資料表層級和資料欄層級擁有相同的權限。例如，使用者 `data_scientist` 不能同時擁有資料表 `employee` 和資料欄 `employee.department` 的 SELECT 權限。對資料表和資料表內的資料欄授與相同權限時，請考慮下列結果：
  + 如果使用者具有資料表的資料表層級權限，則在資料欄層級授與相同權限就沒有作用。
  + 如果使用者具有資料表的資料表層級權限，對資料表的一或多個資料欄撤銷相同的權限，則會傳回錯誤。請改為在資料表層級撤銷權限。
  + 如果使用者具有資料欄層級權限，在資料表層級授與相同的權限，則會傳回錯誤。
  + 如果使用者具有資料欄層級權限，在資料表層級撤銷相同的權限，則會撤銷資料表上所有資料欄的資料欄和資料表權限。
+ 您無法授與延遲繫結檢視的資料欄層級權限。
+ 若要建立具體化檢視，您必須具有基礎資料表的資料表層級 SELECT 權限。即使您擁有特定資料欄層級的權限，也無法針對這些資料欄建立具體化檢視。不過，您可以將 SELECT 權限授與具體化檢視的資料欄，與一般檢視類似。
+ 若要查閱資料欄層級權限的授與，請使用 [PG\_ATTRIBUTE\_INFO](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\_ASSUMEROLE\_PRIVILEGE](r_HAS_ASSUMEROLE_PRIVILEGE.md)若要列出已授予所指定使用者的 IAM 角色和命令許可，請參閱 [PG\_GET\_IAM\_ROLE\_BY\_USER](PG_GET_IAM_ROLE_BY_USER.md)。若要列出已授予您指定 IAM 角色存取權的使用者、角色和群組，請參閱 [PG\_GET\_GRANTEE\_BY\_IAM\_ROLE](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'
);
```