

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 管理 Amazon Redshift 联合身份验证权限目录上的访问控制
<a name="federated-permissions-managing-access"></a>

借助 Amazon Redshift 联合身份验证权限，用户可以对 Amazon Web Services 账户中的任何 Redshift 仓库定义粗糙和精细的访问控制。粗糙权限管理对表、视图和数据库对象的访问权限，包括范围内权限，而精细访问控制则支持列级别的权限以及应用行级别安全性（RLS）和动态数据掩蔽（DDM）等安全策略。

## 授权/撤销
<a name="federated-permissions-managing-access-grant-revoke"></a>

通过联合身份验证权限，您可以定义对表级别访问的权限，例如在任何 Redshift 仓库的 Redshift 联合身份验证权限数据库中，对表和视图进行数据读写的访问权限。

```
GRANT SELECT ON "sales_db@finance-catalog".sales_schema.sales_table TO "IAMR:sales_analyst";  

GRANT INSERT ON "sales_db@finance-catalog".sales_schema.sales_view TO "IAMR:sales_data_engineer";  

REVOKE UPDATE ON "sales_db@finance-catalog".sales_schema.us_sales_view FROM "IAMR:us_sales_analyst";  

REVOKE DELETE ON "sales_db@finance-catalog".sales_schema.us_sales_view FROM "IAMR:us_sales_analyst";
```

Amazon Redshift 联合身份验证权限支持范围内权限，让您可以对某个数据库或架构中某种类型的所有对象授予或撤销权限。

```
GRANT SELECT FOR TABLES IN SCHEMA "sales_db@finance-catalog".sales_schema TO "IAMR:sales_manager";  

REVOKE UPDATE FOR TABLES IN SCHEMA sales_schmea DATABASE "sales_db@finance-catalog" FROM "IAMR:sales_analyst";
```

您可以定义对数据库授予/撤销的访问权限。

```
GRANT CREATE ON DATABASE "sales_db@finance-catalog" TO "IAMR:sales_admin";  

REVOKE TEMP ON DATABASE "sales_db@finance-catalog" FROM "IAMR:sales_analyst";
```

有关 Amazon Redshift 联合身份验证权限支持的授权语法的更多信息，请参阅[您可以在 Amazon Redshift 联合身份验证权限目录上授予的权限](#federated-permissions-managing-access-grant-allowed)。

## 访问权限的精细控制
<a name="federated-permissions-managing-access-fgac"></a>

您可以使用列级别访问控制、行级别安全性（RLS）和动态数据掩蔽（DDM），对具有 Amazon Redshift 联合身份验证权限的数据库中的敏感数据定义精细访问控制。列级别访问控制可用于对表和视图定义更精细的列级别访问权限。超级用户以及在数据库上具有 `sys:secadmin` 角色的用户或角色可以创建 RLS 和 DDM 策略，将这些策略附加到特定关系，以及在关系上启用 RLS。

### 列级别访问控制：
<a name="federated-permissions-managing-access-column"></a>

您可以对表或视图中的个别列授予或撤销特定权限。

```
GRANT SELECT ON "sales_db@finance-catalog".sales_schema.sales_table(order_number, sales_date, purchase_amount, sale_amount) TO "IAMR:sales_revenue_analyst";  

REVOKE UPDATE ON "sales_db@finance-catalog".sales_schema.us_sales_view(order_number, sales_date, purchase_amount, sale_amount) FROM "IAMR:sales_revenue_analyst";
```

### 行级别安全性（RLS）：
<a name="federated-permissions-managing-access-row"></a>

您可以为某个关系启用或禁用行级别安全性。

```
ALTER TABLE "sales_db@finance-catalog".sales_schema.sales_table ROW LEVEL SECURITY ON;
```

您可以在数据库上创建、更改或删除 RLS 策略。

```
-- Create an RLS policy  
CREATE RLS POLICY "sales_db@finance-catalog".policy_america  
WITH (region VARCHAR(10))   
USING (region = 'USA');  

-- Alter an RLS policy  
ALTER RLS POLICY "sales_db@finance-catalog".policy_america  
USING (region IN ('USA', 'CANADA', 'Mexico'));  

-- Drop an RLS policy  
DROP RLS POLICY "sales_db@finance-catalog".policy_america;
```

您可以在关系上附加或分离 RLS 策略。

```
-- Attach an RLS policy  
ATTACH RLS POLICY "sales_db@finance-catalog".policy_america  
ON "sales_db@finance-catalog".sales_schema.sales_table  
TO "IAMR:america_sales_analyst";  

-- Detach an RLS policy  
DETACH RLS POLICY "sales_db@finance-catalog".policy_america  
ON "sales_db@finance-catalog".sales_schema.sales_view_america  
FROM "IAMR:global_sales_analyst";
```

### 动态数据掩蔽（DDM）：
<a name="federated-permissions-managing-access-ddm"></a>

您可以在数据库上创建、更改或删除掩蔽策略。

```
-- Create a masking policy  
CREATE MASKING POLICY "sales_db@finance-catalog".hash_credit  
WITH (credit_card varchar(256))  
USING (sha2(credit_card + 'testSalt', 256));  

-- Alter an masking policy  
ALTER MASKING POLICY "sales_db@finance-catalog".hash_credit  
USING (sha2(credit_card + 'otherTestSalt', 256));  

-- Drop an masking policy  
DROP MASKING POLICY "sales_db@finance-catalog".hash_credit;
```

您可以在关系上附加或分离掩蔽策略。

```
-- Attach a masking policy  
 ATTACH MASKING POLICY hash_credit  
ON "sales_db@finance-catalog".sales_schema.transaction_table (credit_card)  
TO "IAMR:sales_analyst" PRIORITY 30;   

-- Detach a masking policy  
DETACH MASKING POLICY hash_credit  
ON "sales_db@finance-catalog".sales_schema.transaction_view (credit_card)  
FROM "IAMR:transaction_analyst";
```

超级用户或具有 `sys:secadmin` 权限的用户可以通过联合身份验证权限，使用 [SHOW POLICIES](r_SHOW_POLICIES.md) 命令查看 RLS 和 DDM 策略，及其在关系上的附件。

**注意**  
Amazon Redshift 联合身份验证权限不支持 RLS、DDM 策略定义中的用户定义函数（UDF）。
Amazon Redshift 联合身份验证权限不支持 Redshift SQL 函数 user\$1is\$1member\$1of、role\$1is\$1member\$1of、user\$1is\$1member\$1of\$1role。

### 您可以在 Amazon Redshift 联合身份验证权限目录上授予的权限
<a name="federated-permissions-managing-access-grant-allowed"></a>

对于具有 Amazon Redshift 联合身份验证权限的数据库，支持使用 SQL 语句对资源进行不同粒度级别的权限管理。该语法支持本地表引用（连接到包含资源的数据库时或源数据库处于 USE 状态时）和完全限定的跨数据库引用。

**注意**
+ *username* 可以引用 IAM 用户、IAM 角色或 IdC（Amazon IAM Identity Center）用户。
+ *role\$1name* 可以引用 IdC 组。不支持 IAM 组。

#### 粗糙权限
<a name="federated-permissions-managing-access-grant-allowed-coarse"></a>

```
GRANT { SELECT | INSERT | UPDATE | DELETE | TRUNCATE} ON   
[ TABLE ] { table_name | database@catalog.schema_name.table_name }  
TO { username | ROLE role_name | PUBLIC }  

REVOKE { SELECT | INSERT | UPDATE | DELETE | TRUNCATE } ON  
[ TABLE ] { table_name | database@catalog.schema_name.table_name }   
FROM { username | ROLE role_name | PUBLIC }
```

#### 列级别权限
<a name="federated-permissions-managing-access-grant-allowed-column"></a>

```
GRANT { { SELECT | UPDATE | DELETE }   
( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }  
ON { table_name | database@catalog.schema_name.table_name }  
TO { username | ROLE role_name | PUBLIC }  

REVOKE { { SELECT | UPDATE | DELETE }   
( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }  
ON { table_name | database@catalog.schema_name.table_name }  
FROM { username | ROLE role_name | PUBLIC }
```

### 范围内权限
<a name="federated-permissions-managing-access-scoped"></a>

```
GRANT { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }  
FOR SCHEMAS IN  
DATABASE database@catalog   
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 database@catalog ] | DATABASE database@catalog }  
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]  

REVOKE [ GRANT OPTION ] { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }   
FOR SCHEMAS IN   
DATABASE database@catalog   
FROM { username | ROLE role_name } [, ...]   

REVOKE [ GRANT OPTION ] { { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [ PRIVILEGES ] } }   
FOR TABLES IN   
{ SCHEMA schema_name [ DATABASE database@catalog ] | DATABASE database@catalog }   
FROM { username | ROLE role_name } [, ...]
```