

 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-examples"></a>

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

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

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

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

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

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

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

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

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

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

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

```
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\_USER 的使用者具有 VIEW\_DATE 的所有權限，但這位使用者仍無法從 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\_db 的外部結構描述。

```
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\_role1 授予 user1。

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

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

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

下列範例會將 sample\_role1 授予 sample\_role2。

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

下列範例會將 sample\_role2 授予 sample\_role3 和 sample\_role4。然後嘗試將 sample\_role3 授予 sample\_role1。

```
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\_role1。

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

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

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

下列範例會嘗試將循環相依性中的 sample\_role3 授予 sample\_role2。

```
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
```