

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 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/)。

# REVOKE
<a name="r_REVOKE"></a>

从用户或角色删除访问权限，例如，用于创建、删除或更新表的权限。

您只能使用 ON SCHEMA 语法将针对外部架构的 GRANT 或 REVOKE USAGE 权限授予数据库用户和角色。将 ON EXTERNAL SCHEMA 与 AWS Lake Formation 搭配使用时，您只能向 AWS Identity and Access Management (IAM) 角色授予 GRANT 和 REVOKE 权限。有关权限的列表，请参阅“语法”。

对于存储过程，默认情况下，向 PUBLIC 授予 USAGE ON LANGUAGE `plpgsql` 权限。EXECUTE ON PROCEDURE 权限默认情况下只授予拥有者和超级用户。

在 REVOKE 命令中指定要删除的权限。要授予权限，请使用 [GRANT](r_GRANT.md) 命令。

## 语法
<a name="r_REVOKE-synopsis"></a>

```
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | ALTER | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | TEMPORARY | TEMP | ALTER } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE db_name [, ...]
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
EXECUTE
    ON FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { EXECUTE } [,...] | ALL [ PRIVILEGES ] }
    ON PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
USAGE
    ON LANGUAGE language_name [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

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

REVOKE [GRANT OPTION FOR]
{ { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON TEMPLATE template_name [,...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### 撤销表的列级别权限
<a name="revoke-column-level"></a>

以下是 Amazon Redshift 表和视图上的列级别权限的语法。

```
REVOKE { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }
     FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
     [ RESTRICT ]
```

### 撤销 ASSUMEROLE 权限
<a name="revoke-assumerole-permissions"></a>

以下是从具有指定角色的用户和组上撤销 ASSUMEROLE 权限的语法。

```
REVOKE ASSUMEROLE
    ON { 'iam_role' [, ...]  | default | ALL }
    FROM { user_name | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL }
```

### 撤销 Lake Formation 的 Redshift Spectrum 的权限
<a name="revoke-spectrum-integration-with-lf-permissions"></a>

以下是 Redshift Spectrum 与 Lake Formation 集成的语法。

```
REVOKE [ GRANT OPTION FOR ]
{ SELECT | ALL [ PRIVILEGES ] } ( column_list )
    ON EXTERNAL TABLE schema_name.table_name
    FROM { IAM_ROLE iam_role } [, ...]

REVOKE [ GRANT OPTION FOR ]
{ { SELECT | ALTER | DROP | DELETE | INSERT }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL TABLE schema_name.table_name [, ...]
    FROM { { IAM_ROLE iam_role } [, ...] | PUBLIC }

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | ALTER | DROP }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL SCHEMA schema_name [, ...]
    FROM { IAM_ROLE iam_role } [, ...]
```

### 撤销数据共享权限
<a name="revoke-datashare-permissions"></a>

**生产者端数据共享权限**  
以下是使用 REVOKE 删除用户或角色的 ALTER 或 SHARE 权限的语法。权限已被撤销的用户无法再更改数据共享，也无法向使用者授予使用权限。

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

以下是使用 REVOKE 删除使用者对数据共享的访问权限的语法。

```
REVOKE USAGE
 ON DATASHARE datashare_name
 FROM NAMESPACE 'namespaceGUID' [, ...] | ACCOUNT 'accountnumber' [ VIA DATA CATALOG ] [, ...]
```

以下是从 Lake Formation 账户中撤销数据共享使用权限的示例。

```
REVOKE USAGE ON DATASHARE salesshare FROM ACCOUNT '123456789012' VIA DATA CATALOG;
```

**使用者端数据共享权限**  
以下是根据数据共享创建的特定数据库或 schema 的 REVOKE 数据共享使用权限的语法。撤销使用 WITH PERMISSIONS 子句创建的数据库的使用权限并不能撤销您授予用户或角色的任何其他权限，包括为基础对象授予的对象级权限。如果您向该用户或角色重新授予使用权限，他们将保留在您撤销使用权限之前拥有的所有其他权限。

```
REVOKE USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema}
 FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### 撤销限定范围权限
<a name="revoke-scoped-permissions"></a>

限定范围权限允许您向用户或角色授予对数据库或架构中某一类型的所有对象的访问权限。具有限定范围权限的用户和角色对数据库或架构中的所有当前和未来对象具有指定权限。

您可以在 [SVV\$1DATABASE\$1PRIVILEGES](r_SVV_DATABASE_PRIVILEGES.md) 中查看数据库级限定权限的范围。您可以在 [SVV\$1SCHEMA\$1PRIVILEGES](r_SVV_SCHEMA_PRIVILEGES.md) 中查看架构级限定权限的范围。

有关限定范围权限的更多信息，请参阅[限定范围权限](t_scoped-permissions.md)。

以下是撤销用户和角色的限定范围权限的语法。

```
REVOKE [ GRANT OPTION ] 
{ CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
FOR SCHEMAS IN
DATABASE db_name 
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 db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] { EXECUTE | ALL [ PRIVILEGES ] }
FOR FUNCTIONS IN 
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] { EXECUTE | ALL [ PRIVILEGES ] }
FOR PROCEDURES IN
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] USAGE
FOR LANGUAGES IN
DATABASE db_name
FROM { username | ROLE role_name } [, ...]  

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

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

请注意，范围限定的权限不区分函数的权限和过程的权限。例如，以下语句撤销 `bob` 对架构 `Sales_schema` 中函数和过程的 `EXECUTE` 权限。

```
REVOKE EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema FROM bob;
```

### 撤销机器学习权限
<a name="revoke-model-permissions"></a>

以下是有关 Amazon Redshift 上机器学习模型权限的语法。

```
REVOKE [ GRANT OPTION FOR ]
    CREATE MODEL FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON MODEL model_name [, ...]

    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    [ RESTRICT ]
```

### 撤销角色权限
<a name="revoke-roles"></a>

以下是撤销在 Amazon Redshift 上的角色权限的语法。

```
REVOKE [ ADMIN OPTION FOR ] { ROLE role_name } [, ...] FROM { user_name } [, ...]
```

```
REVOKE { ROLE role_name } [, ...] FROM { ROLE role_name } [, ...]
```

以下是撤销角色在 Amazon Redshift 上的系统权限的语法。

```
REVOKE
  {
    { 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 ] }
FROM { ROLE role_name } [, ...]
```

### 撤销对安全性策略的权限
<a name="revoke-role-level"></a>

以下语法用于撤销解释 EXPLAIN 计划中查询的安全性策略筛选条件的权限。可能的安全性策略包括行级安全性策略和动态数据掩蔽策略。

```
REVOKE EXPLAIN { RLS | MASKING } FROM ROLE rolename 
```

以下语法用于撤销为查询绕开行级安全性策略的权限。

```
REVOKE IGNORE RLS FROM ROLE rolename 
```

以下语法用于从指定的安全性策略撤销 SELECT 权限。可能的安全性策略包括行级安全性策略和动态数据掩蔽策略。

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

## 参数
<a name="r_REVOKE-parameters"></a>

GRANT OPTION FOR   
仅撤消将指定权限授予其他用户的选项，而不撤消权限本身。您无法从组或 PUBLIC 撤消 GRANT OPTION。

SELECT   
撤消用于通过 SELECT 语句从表或视图中选择数据的权限。

INSERT   
撤消用于通过 INSERT 语句或 COPY 语句将数据加载到表中的权限。

UPDATE   
撤消用于通过 UPDATE 语句更新表列的权限。

DELETE   
撤消用于从表中删除数据行的权限。

REFERENCES   
撤消用于创建外键约束的权限。您应该在被引用表和引用表上撤消此权限。

TRUNCATE  
撤销截断表的权限。如果没有此权限，则只有表的拥有者或超级用户才可以截断表。有关 TRUNCATE 命令的更多信息，请参阅 [TRUNCATE](r_TRUNCATE.md)。

ALL [ PRIVILEGES ]   
一次性从指定的用户或组撤消所有可用权限。PRIVILEGES 关键字是可选的。  
 Amazon Redshift 不支持 RULE 和 TRIGGER 权限。有关更多信息，请转至 [不支持的 PostgreSQL 功能](c_unsupported-postgresql-features.md)。

ALTER  
根据数据库对象，从用户或用户组撤销以下权限：  
+ 对于表，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 时适用。

DROP  
根据数据库对象，从用户或角色撤销以下权限：  
+  对于表，DROP 撤销删除表或视图的权限。有关更多信息，请参阅 [DROP TABLE](r_DROP_TABLE.md)。
+  对于数据库，DROP 撤销删除数据库的权限。有关更多信息，请参阅 [DROP DATABASE](r_DROP_DATABASE.md)。
+  对于架构，DROP 撤销删除架构的权限。有关更多信息，请参阅 [DROP SCHEMA](r_DROP_SCHEMA.md)。

ASSUMEROLE  <a name="assumerole"></a>
从具有指定角色的用户、角色或组撤消运行 COPY、UNLOAD、EXTERNAL FUNCTION 或 CREATE MODEL 命令的权限。

ON [ TABLE ] *table\$1name*   
撤消对表或视图的指定权限。TABLE 关键字是可选的。

ON ALL TABLES IN SCHEMA *schema\$1name*   
撤消对引用的 Schema 中的所有表的指定权限。

( *column\$1name* [,...] ) ON TABLE *table\$1name*   <a name="revoke-column-level-privileges"></a>
撤消用户、组或 PUBLIC 对 Amazon Redshift 表或视图的指定列的指定权限。

( *column\$1list* ) ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="revoke-external-table-column"></a>
从 IAM 角色撤消对于引用的 Schema 中 Lake Formation 表的指定列的指定权限。

ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="revoke-external-table"></a>
从 IAM 角色撤消对于引用的 Schema 中的指定 Lake Formation 表的指定权限。

ON EXTERNAL SCHEMA *schema\$1name*   <a name="revoke-external-schema"></a>
从 IAM 角色撤消对于引用的 Schema 的指定权限。

FROM IAM\$1ROLE *iam\$1role*   <a name="revoke-from-iam-role"></a>
表示丢失权限的 IAM 角色。

ROLE *role\$1name*   
从指定的角色撤销权限。

GROUP *group\$1name*   
从指定的用户组撤消权限。

PUBLIC   
从所有用户撤消指定权限。PUBLIC 表示一个始终包含所有用户的组。单个用户的权限包含向 PUBLIC 授予的权限、向用户所属的所有组授予的权限以及向用户单独授予的任何权限。  
从 Lake Formation 外部表中撤销 PUBLIC 会将该权限从 Lake Formation *所有人*组撤销。

CREATE   
根据数据库对象，从用户或组撤销以下权限：  
+ 对于数据库，对 REVOKE 使用 CREATE 子句将阻止用户在数据库中创建 schema。
+ 对于 schemas，对 REVOKE 使用 CREATE 子句将阻止用户在 schema 中创建对象。要重命名对象，用户必须具有 CREATE 权限并拥有要重命名的对象。
默认情况下，所有用户都对 PUBLIC Schema 具有 CREATE 和 USAGE 权限。

TEMPORARY \$1 TEMP   
撤销在指定的数据库中创建临时表的权限。  
默认情况下，向用户授予权限以通过其在 PUBLIC 组中自动获得的成员资格来创建临时表。要删除任意用户创建临时表的权限，请撤销 PUBLIC 组的 TEMP 权限，然后明确向特定用户或用户组授予用于创建临时表的权限。

ON DATABASE *db\$1name*   
撤销对指定数据库的权限。

USAGE   
撤销对特定架构中的对象的 USAGE 权限，这将使用户无法访问这些对象。必须单独撤销这些对象的特定操作权限（例如，对函数的 EXECUTE 权限）。  
默认情况下，所有用户都对 PUBLIC Schema 具有 CREATE 和 USAGE 权限。

ON SCHEMA *schema\$1name*   
撤销对指定架构的权限。您可以使用架构权限来控制表的创建；数据库的 CREATE 权限仅控制架构的创建。

RESTRICT   
仅撤销用户直接授予的那些权限。此行为是默认行为。

EXECUTE ON PROCEDURE *procedure\$1name*   
撤销对特定存储过程的 EXECUTE 权限。由于存储过程名称可重载，因此您必须包含过程的参数列表。有关更多信息，请参阅 [命名存储过程](stored-procedure-naming.md)。

EXECUTE ON ALL PROCEDURES IN SCHEMA *procedure\$1name*   
撤销对引用的架构中的所有过程的指定权限。

USAGE ON LANGUAGE *language\$1name*   
撤销对某种语言的 USAGE 权限。对于 Python 用户定义的函数 (UDF)，请使用 `plpythonu`。对于 SQL UDF，使用 `sql`。对于存储过程，请使用 `plpgsql`。  
要创建 UDF，您必须具有使用 SQL 或 `plpythonu` (Python) 语言的权限。默认情况下，向 PUBLIC 授予 USAGE ON LANGUAGE SQL。但是，您必须明确授予 USAGE ON LANGUAGE PLPYTHONU 权限才能指定用户或组。  
要撤销 SQL 的使用权限，请先从 PUBLIC 撤销使用权限。然后，仅向允许创建 SQL UDF 的特定用户或组授予 SQL 使用权限。以下示例将从 PUBLIC 撤销对 SQL 的使用权限，然后向用户组 `udf_devs` 授予使用权限。  

```
revoke usage on language sql from PUBLIC;
grant usage on language sql to group udf_devs;
```
有关更多信息，请参阅 [UDF 安全性和权限](udf-security-and-privileges.md)。  
要撤销存储过程的使用权限，请先从 PUBLIC 撤销使用权限。然后，仅向允许创建存储过程的特定用户或组授予 `plpgsql` 使用权限。有关更多信息，请参阅 [存储过程的安全性和权限](stored-procedure-security-and-privileges.md)。

ON COPY JOB *job\$1name*  <a name="on-copy-job-revoke"></a>
撤销对复制作业的指定权限。

FOR \$1 ALL \$1 COPY \$1 UNLOAD \$1 EXTERNAL FUNCTION \$1 CREATE MODEL \$1 [, ...]  <a name="revoke-for"></a>
指定撤销其权限的 SQL 命令。您可以指定 ALL 以撤销对 COPY、UNLOAD、EXTERNAL FUNCTION 和 CREATE MODEL 语句的权限。此子句仅适用于撤销 ASSUMEROLE 权限。

ALTER  
撤销用户或用户组的 ALTER 权限，允许那些不拥有数据共享的用户或用户组更改数据共享。将对象添加到数据共享中或从中删除，或设置属性 PUBLICACCESSIBLE 时需要此权限。有关更多信息，请参阅 [ALTER DATASHARE](r_ALTER_DATASHARE.md)。

SHARE  
撤销用户和用户组将使用者添加到数据共享的权限。需要撤销此权限才能阻止特定使用者从其集群访问数据共享。

ON DATASHARE *datashare\$1name *  
授予对被引用数据共享的指定权限。

FROM 用户名  
指示失去权限的用户。

FROM GROUP *group\$1name*  
指示失去权限的用户组。

WITH GRANT OPTION  
指示失去权限的用户随之可以对其他用户撤销相同的权限。您无法为组或 PUBLIC 撤消 WITH GRANT OPTION。

USAGE  
撤销同一账户中的使用者账户或命名空间的 USAGE 时，该账户中的特定使用者账户或命名空间不能以只读方式访问数据共享和数据共享的对象。  
撤销 USAGE 权限将撤销使用者对数据共享的访问权限。

FROM NAMESPACE 'clusternamespace GUID'  
指示同一账户中使用者失去对数据共享的权限的命名空间。命名空间使用 128 位字母数字全局唯一标识符 (GUID)。

FROM ACCOUNT 'accountnumber' [ VIA DATA CATALOG ]  
指示另一个账户中使用者失去对数据共享的权限的账号。指定‘VIA DATA CATALOG’表示您要从 Lake Formation 账户撤销使用数据共享的权限。省略账号意味着您要撤销拥有集群的账户的权限。

ON DATABASE *shared\$1database\$1name> [, ...]*   <a name="revoke-datashare"></a>
撤销对在指定数据共享中创建的指定数据库的指定使用权限。

ON SCHEMA* shared\$1schema*   <a name="revoke-datashare"></a>
撤销对在指定数据共享中创建的指定架构的指定权限。

FOR \$1 SCHEMAS \$1 TABLES \$1 FUNCTIONS \$1 PROCEDURES \$1 LANGUAGES \$1 COPY JOBS\$1 IN   
指定要撤销权限的数据库对象。IN 后面的参数定义了所撤销权限的范围。

CREATE MODEL  
撤销 CREATE MODEL 在指定数据库中创建机器学习模型的权限。

ON MODEL *model\$1name*  
撤销特定模型的 EXECUTE 权限。

ACCESS CATALOG  
撤销查看该角色可访问对象的相关元数据的权限。

[ ADMIN OPTION FOR ] \$1 role \$1 [, ...]  
您从具有 WITH ADMIN OPTION 的指定用户撤销的角色。

FROM \$1 role \$1 [, ...]  
从其撤消了指定角色的角色。

EXPLAIN \$1 RLS \$1 MASKING \$1 FROM ROLE *rolename*  
从角色撤销用于解释 EXPLAIN 计划中查询的安全性策略筛选条件的权限。RLS 撤销解释行级安全性策略筛选条件的权限。MASKING 撤销解释动态数据掩蔽策略筛选条件的权限。

IGNORE RLS FROM ROLE *rolename*   
从角色撤销绕开查询的行级安全性策略的权限。

FROM \$1 RLS \$1 MASKING \$1 POLICY *policy\$1name*  
指示失去权限的安全性策略。TO RLS POLICY 表示行级安全性策略。TO MASKING POLICY 表示动态数据掩蔽策略。

## 使用说明
<a name="r_REVOKE-usage-notes-link"></a>

要了解有关 REVOKE 使用说明的更多信息，请参阅[使用说明](r_REVOKE-usage-notes.md)。

## 示例
<a name="r_REVOKE-examples-link"></a>

有关如何使用 REVOKE 的示例，请参阅[示例](r_REVOKE-examples.md)。

# 使用说明
<a name="r_REVOKE-usage-notes"></a>

要撤消对象的权限，您必须满足下列条件之一：
+ 是对象所有者。
+ 是超级用户。
+ 拥有该对象和权限的授予权限。

  例如，以下命令使用户 HR 能够对 employees 表执行 SELECT 命令并对其他用户授予和撤销相同的权限。

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

  HR 无法撤销 SELECT 之外的任何操作的权限或 employees 表之外的任何其他表的权限。

超级用户可以访问所有对象，不管设置对象权限的 GRANT 和 REVOKE 命令如何。

PUBLIC 表示一个始终包含所有用户的组。默认情况下，PUBLIC 的所有成员都对 PUBLIC schema 具有 CREATE 和 USAGE 权限。要限制任何用户对 PUBLIC schema 的权限，您必须首先从 PUBLIC 撤销对 PUBLIC schema 的所有权限，然后向特定用户或组授予权限。以下示例控制 PUBLIC schema 中的表创建权限。

```
revoke create on schema public from public;
```

要从 Lake Formation 表撤销权限，与表的外部架构关联的 IAM 角色必须有权撤销对外部表的权限。以下示例创建具有关联 IAM 角色 `myGrantor` 的外部架构。IAM 角色 `myGrantor` 有权撤销其他角色的权限。REVOKE 命令使用与外部架构关联的 IAM 角色 `myGrantor` 的权限来撤销对 IAM 角色 `myGrantee` 的权限。

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

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

**注意**  
如果 IAM 角色在为 Lake Formation 启用的 AWS Glue Data Catalog 中也有 `ALL` 权限，则不会撤销 `ALL` 权限。只撤销 `SELECT` 权限。您可以在 Lake Formation 控制台中查看 Lake Formation 权限。

## 有关撤销 ASSUMEROLE 权限的使用说明
<a name="r_REVOKE-usage-notes-assumerole"></a>

以下使用说明适用于在 Amazon Redshift 中撤销 ASSUMEROLE 权限。

只有数据库超级用户才可以撤消用户和组的 ASSUMEROLE 权限。超级用户始终会保留 ASSUMEROLE 权限。

要为用户和组启用 ASSUMEROLE 的使用权限，超级用户要在集群上运行一次以下语句。要为用户和组启用 ASSUMEROLE 的使用权限，超级用户要在集群上将以下语句运行一次。

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

## 有关撤销机器学习权限的使用说明
<a name="r_REVOKE-usage-notes-create-model"></a>

您不能直接授予或撤销与机器学习函数相关的权限。机器学习函数属于机器学习模型，其权限通过模型来控制。相反，您可以撤销与机器学习模型相关的权限。以下示例演示如何从与模型 `customer_churn` 关联的所有用户撤销运行权限。

```
REVOKE EXECUTE ON MODEL customer_churn FROM PUBLIC;
```

您还可以撤销某个用户对机器学习模型 `customer_churn` 的所有权限。

```
REVOKE ALL on MODEL customer_churn FROM ml_user;
```

如果架构中有机器学习函数，则授予或撤销与机器学习函数相关的 `EXECUTE` 权限将失败，即使该机器学习函数已通过 `GRANT EXECUTE ON MODEL` 获得 `EXECUTE` 权限。我们建议在使用 `CREATE MODEL` 命令时，通过单独的架构将机器学习函数单独保存在单独架构本身中。以下示例演示了如何执行此操作。

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

以下示例从 GUESTS 用户组撤消对 SALES 表的 INSERT 权限。此命令使 GUESTS 的成员无法通过使用 INSERT 命令将数据加载到 SALES 表中。

```
revoke insert on table sales from group guests;
```

以下示例从用户 `fred` 撤消对 QA\$1TICKIT 架构中所有表的 SELECT 权限。

```
revoke select on all tables in schema qa_tickit from fred;
```

以下示例撤消用户 `bobr` 从视图中选择的权限。

```
revoke select on table eventview from bobr;
```

以下示例从所有用户撤消在 TICKIT 数据库中创建临时表的权限。

```
revoke temporary on database tickit from public;
```

以下示例从用户 `cust_name` 撤消对 `cust_phone` 表的 `cust_profile` 和 `user1` 列的 SELECT 权限。

```
revoke select(cust_name, cust_phone) on cust_profile from user1;
```

以下示例从 `cust_name` 组中撤消对 `cust_phone` 和 `cust_contact_preference` 列的 SELECT 权限，并撤消对 `cust_profile` 表的 `sales_group` 列的 UPDATE 权限。

```
revoke select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile from group sales_group;
```

下面的示例演示如何使用 ALL 关键字从 `cust_profile` 组撤消对 `sales_admin` 表的三列的 SELECT 和 UPDATE 权限。

```
revoke ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile from group sales_admin;
```

以下示例从 `cust_name` 用户撤消对 `cust_profile_vw` 视图的 `user2` 列的 SELECT 权限。

```
revoke select(cust_name) on cust_profile_vw from user2;
```

## 撤销通过数据共享创建的数据库的 USAGE 权限的示例
<a name="r_REVOKE-examples-datashare"></a>

以下示例从 `13b8833d-17c6-4f16-8fe4-1a018f5ed00d` 命名空间撤销对 `salesshare` 数据共享的访问权限。

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

以下示例从 `Bob` 撤销对 `sales_db` 的 USAGE 权限。

```
REVOKE USAGE ON DATABASE sales_db FROM Bob;
```

以下示例从 `Analyst_role` 撤销对 `sales_schema` 的 USAGE 权限。

```
REVOKE USAGE ON SCHEMA sales_schema FROM ROLE Analyst_role;
```

## 撤销限定范围权限的示例
<a name="r_REVOKE-examples-scoped"></a>

以下示例从 `Sales` 角色撤销 `Sales_db` 数据库中所有当前和将来架构的使用权限。

```
REVOKE USAGE FOR SCHEMAS IN DATABASE Sales_db FROM ROLE Sales;
```

以下示例从用户 `alice` 撤销授予对 `Sales_db` 数据库中所有当前和将来表的 SELECT 权限的能力。`alice` 保留对 `Sales_db` 中所有表的访问权限。

```
REVOKE GRANT OPTION SELECT FOR TABLES IN DATABASE Sales_db FROM alice;
```

以下示例从用户 `bob` 撤销对 `Sales_schema` 架构中函数的 EXECUTE 权限。

```
REVOKE EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema FROM bob;
```

以下示例从 `Sales` 角色撤销对 `ShareDb` 数据库 `ShareSchema` 架构中所有表的所有权限。指定架构时，您还可以使用由两部分组成的格式 `database.schema` 指定架构的数据库。

```
REVOKE ALL FOR TABLES IN SCHEMA ShareDb.ShareSchema FROM ROLE Sales;
```

下面的示例与前一个示例相同。您可以使用 `DATABASE` 关键字而不是使用由两部分组成的格式来指定架构的数据库。

```
REVOKE ALL FOR TABLES IN SCHEMA ShareSchema DATABASE ShareDb FROM ROLE Sales;
```

## 撤销 ASSUMEROLE 权限的示例
<a name="r_REVOKE-examples-assumerole"></a>

以下是撤销 ASSUMEROLE 权限的示例。

超级用户必须通过在集群上运行一次以下语句来为用户和组启用 ASSUMEROLE 的使用权限。

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

以下语句撤消用户 reg\$1user1 在所有角色中对所有操作的 ASSUMEROLE 权限。

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

## 撤销 ROLE 权限的示例
<a name="r_REVOKE-examples-role"></a>

下面的示例将从 sample\$1role2 撤销 sample\$1role1。

```
CREATE ROLE sample_role2;
GRANT ROLE sample_role1 TO ROLE sample_role2;
REVOKE ROLE sample_role1 FROM ROLE sample_role2;
```

下面的示例将撤销 user1 的系统权限。

```
GRANT ROLE sys:DBA TO user1;
REVOKE ROLE sys:DBA FROM user1;
```

下面的示例将从 user1 撤销 sample\$1role1 和 sample\$1role2。

```
CREATE ROLE sample_role1;
CREATE ROLE sample_role2;
GRANT ROLE sample_role1, ROLE sample_role2 TO user1;
REVOKE ROLE sample_role1, ROLE sample_role2 FROM user1;
```

下面的示例将从 user1 撤销具有 ADMIN OPTION 的 sample\$1role2。

```
GRANT ROLE sample_role2 TO user1 WITH ADMIN OPTION;
REVOKE ADMIN OPTION FOR ROLE sample_role2 FROM user1;
REVOKE ROLE sample_role2 FROM user1;
```

下面的示例将从 sample\$1role5 撤销 sample\$1role1 和 sample\$1role2。

```
CREATE ROLE sample_role5;
GRANT ROLE sample_role1, ROLE sample_role2 TO ROLE sample_role5;
REVOKE ROLE sample_role1, ROLE sample_role2 FROM ROLE sample_role5;
```

下面的示例将撤销 sample\$1role1 的 CREATE SCHEMA 和 DROP SCHEMA 系统权限。

```
GRANT CREATE SCHEMA, DROP SCHEMA TO ROLE sample_role1;
REVOKE CREATE SCHEMA, DROP SCHEMA FROM ROLE sample_role1;
```