GRANT
为用户或用户组定义访问权限。
权限包括各种访问选项,例如读取表和视图中的数据、写入数据、创建表和删除表的功能。使用此命令可授予对表、数据库、架构、函数、过程、语言或列的特定权限。要撤销对数据库对象的权限,请使用 REVOKE 命令。
权限还包括各种访问选项,例如将对象或使用者添加到数据共享或从数据共享中删除对象或使用者的能力。要向用户或用户组的数据共享中添加数据库对象或从中删除数据库对象,请使用 ALTER 权限。同样,要从数据共享中添加或删除使用者,请使用 SHARE 权限。要撤销对数据库对象的权限,请使用 REVOKE 命令。您只能向用户和用户组授予 ALTER 和 SHARE 权限。
您还可以授予角色来管理数据库权限,以及控制用户可以对您的数据执行的操作。通过定义角色并向用户分配角色,您可以限制这些用户能够执行的操作,例如限制用户只能使用 CREATE TABLE 和 INSERT 命令。有关 CREATE ROLE 命令的更多信息,请参阅 CREATE ROLE。Amazon Redshift 有一些系统定义的角色,您也可以使用这些角色向用户授予特定权限。有关更多信息,请参阅Amazon Redshift 系统定义的角色。
您只能将对于外部架构的 GRANT 或 REVOKE USAGE 权限授予使用 ON SCHEMA 语法的数据库用户和用户组。将 ON EXTERNAL SCHEMA 与 Amazon Lake Formation 搭配使用时,您只能向 Amazon Identity and Access Management(IAM)角色授予 GRANT 和 REVOKE 权限。有关权限的列表,请参阅“语法”。
对于存储过程,唯一可以授予的权限是 EXECUTE。
您不能在以下事务数据块内的(外部资源)上运行 GRANT:((BEGIN ... END)。有关事务的更多信息,请参阅 可序列化的隔离。
语法
GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES } [,...] | 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 | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE db_name [, ...] TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | USAGE } [,...] | 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 } [, ...]
以下是 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 权限的语法。要开始使用 ASSUMEROLE 权限,请参阅有关授予 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 集成的语法。
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 ]
以下是使用 GRANT 授予 Amazon Redshift 上的数据共享权限的语法。在此情况下,您只能向用户和组授予 ALTER 和 SHARE 权限。
GRANT { ALTER | SHARE } ON DATASHARE datashare_name TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP
group_name
| PUBLIC } [, ...]
以下是使用 GRANT 授予 Amazon Redshift 上的数据共享使用权限的语法。您可以使用 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 salesshare TO ACCOUNT '123456789012' VIA DATA CATALOG;
以下是根据数据共享创建的特定数据库或 schema 的 GRANT 数据共享使用权限的语法。此 USAGE 权限不会将使用权限授予不是从指定数据共享创建的数据库。您只能将针对数据共享的权限 GRANT 或 REVOKE ALTER 或 SHARE 给用户和用户组。
GRANT USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema} TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
以下是有关 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 } [, ...]
以下是授予角色对 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 | 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 ] } TO { ROLE role_name } [, ...]
以下语法用于授予解释 EXPLAIN 计划中查询的行级别安全性策略筛选器的权限。您可以使用 REVOKE 语句撤消该权限。
GRANT EXPLAIN RLS TO ROLE rolename
以下语法用于授予为查询绕开行级别安全性策略的权限。
GRANT IGNORE RLS TO ROLE rolename
以下语法用于授予对指定行级别安全性策略的权限。
GRANT SELECT ON [ TABLE ] table_name [, ...] TO RLS POLICY policy_name [, ...]
参数
- SELECT
-
授予使用 SELECT 语句从表或视图中选择数据的权限。对于 UPDATE 或 DELETE 操作,也需要 SELECT 权限来引用现有的列值。
- INSERT
-
授予使用 INSERT 语句或 COPY 语句将数据加载到表中的权限。
- 更新
-
授予使用 UPDATE 语句更新表列的权限。UPDATE 操作也需要 SELECT 权限,因为这些操作必须引用表列才能确定要更新哪些行或者计算列的新值。
- DELETE
-
授予从表中删除数据行的权限。DELETE 操作也需要 SELECT 权限,因为这些操作必须引用表列才能确定要删除哪些行。
- REFERENCES
-
授予创建外键约束的权限。您必须授予对被引用表和引用表的此权限;否则,用户将无法创建约束。
- ALL [ PRIVILEGES ]
-
一次性向指定的用户或用户组授予所有可用权限。PRIVILEGES 关键字是可选的。
GRANT ALL ON SCHEMA 不会授予对外部架构的 CREATE 权限。
您可以针对为 Lake Formation 启用的 Amazon Glue Data Catalog 中的表授予 ALL 权限。在这种情况下,各个权限(如 SELECT、ALTER 等)将记录在 Data Catalog 中。
- ALTER
-
授予对为 Lake Formation 启用的 Amazon Glue Data Catalog 中的表的更改权限。此权限仅在使用 Lake Formation 时适用。
- DROP
-
授予删除表的权限。此权限仅在 Amazon Redshift 以及为 Lake Formation 启用的 Amazon Glue Data Catalog 中适用。
- ASSUMEROLE
-
向具有指定角色的用户、角色或组授予运行 COPY、UNLOAD、EXTERNAL FUNCTION 和 CREATE MODEL 命令的权限。用户、角色或组在运行指定的命令时代入该角色。要开始使用 ASSUMEROLE 权限,请参阅有关授予 ASSUMEROLE 权限的使用说明。
- ON [ TABLE ] table_name
-
授予对表或视图的指定权限。TABLE 关键字是可选的。您可以在一个语句中列出多个表和视图。
- ON ALL TABLES IN SCHEMA schema_name
-
授予对被引用架构中的所有表和视图的指定权限。
- ( column_name [,...] ) ON TABLE table_name
-
向用户、组或 PUBLIC 授予对 Amazon Redshift 表或视图的指定列的指定权限。
- ( column_list ) ON EXTERNAL TABLE schema_name.table_name
-
向 IAM 角色授予对引用架构中 Lake Formation 表的指定列的指定权限。
- ON EXTERNAL TABLE schema_name.table_name
-
向 IAM 角色授予对引用架构中指定 Lake Formation 表的指定权限。
- ON EXTERNAL SCHEMA schema_name
-
向 IAM 角色授予对引用架构的指定权限。
- ON iam_role
-
向 IAM 角色授予指定权限。
- TO username
-
指示接收权限的用户。
- TO IAM_ROLE iam_role
-
指示接收权限的 IAM 角色。
- WITH GRANT OPTION
-
指示接收权限的用户随之可以将相同的权限授予其他用户。您无法将 WITH GRANT OPTION 授予组或 PUBLIC。
- ROLE role_name
-
将权限授予角色。
- GROUP group_name
-
将权限授予用户组。可以是逗号分隔的列表,用于指定多个用户组。
- PUBLIC
-
向所有用户授予指定的权限,包括以后创建的用户。PUBLIC 表示一个始终包含所有用户的组。单个用户的权限包含向 PUBLIC 授予的权限、向用户所属的所有组授予的权限以及向用户单独授予的任何权限。
将 PUBLIC 授予 Lake Formation EXTERNAL TABLE 会将权限授予 Lake Formation 所有人组。
- 创建
-
根据数据库对象,向用户或用户组授予以下权限:
-
对于数据库,CREATE 允许用户在数据库中创建 schemas。
-
对于 schema,CREATE 允许用户在 schema 中创建对象。要重命名对象,用户必须具有 CREATE 权限并拥有要重命名的对象。
-
Amazon Redshift Spectrum 外部 schema 不支持 CREATE ON SCHEMA。要授予在外部 schema 中使用外部表的权限,请向需要访问权限的用户授予 USAGE ON SCHEMA。仅允许外部 schema 的所有者或超级用户在外部 schema 中创建外部表。要移交外部 schema 的所有权,请使用 ALTER SCHEMA 更改所有者。
-
- TEMPORARY | TEMP
-
授予在指定的数据库中创建临时表的权限。要运行 Amazon Redshift Spectrum 查询,数据库用户必须有权在数据库中创建临时表。
注意
默认情况下,向用户授予权限以通过其在 PUBLIC 组中自动获得的成员资格来创建临时表。要删除任何用户创建临时表的权限,请撤销 PUBLIC 组的 TEMP 权限。然后,明确授予特定用户或用户组创建临时表的权限。
- ON DATABASE db_name
-
授予对数据库的指定权限。
- USAGE
-
授予对特定架构的 USAGE 权限,这将使用户能够访问该架构中的对象。必须单独为本地 Amazon Redshift 架构授予对这些对象执行特定操作的权限(例如,对表的 SELECT 或 UPDATE 权限)。默认情况下,所有用户都对 PUBLIC 架构具有 CREATE 和 USAGE 权限。
使用 ON SCHEMA 语法向外部 Schema 授予 USAGE 权限时,无需单独授予对外部 Schema 中对象的操作。相应的目录权限控制对外部 Schema 对象的细粒度权限。
- ON SCHEMA schema_name
-
授予对数据库的指定权限。
Amazon Redshift Spectrum 外部架构不支持 GRANT ALL ON SCHEMA 中的 GRANT CREATE ON SCHEMA 和 CREATE 权限。要授予在外部 schema 中使用外部表的权限,请向需要访问权限的用户授予 USAGE ON SCHEMA。仅允许外部 schema 的所有者或超级用户在外部 schema 中创建外部表。要移交外部 schema 的所有权,请使用 ALTER SCHEMA 更改所有者。
- EXECUTE ON ALL FUNCTIONS IN SCHEMA schema_name
-
授予对被引用架构中的所有函数的指定权限。
对于在 pg_catalog 命名空间中定义的 pg_proc 内置条目,Amazon Redshift 不支持 GRANT 或 REVOKE 语句。
- EXECUTE ON PROCEDURE procedure_name
-
授予对特定存储过程的 EXECUTE 权限。由于存储过程名称可重载,因此您必须包含过程的参数列表。有关更多信息,请参阅命名存储过程。
- EXECUTE ON ALL PROCEDURES IN SCHEMA schema_name
-
授予对被引用架构中所有存储过程的指定权限。
- USAGE ON LANGUAGE language_name
-
授予对某种语言的 USAGE 权限。
需要 USAGE ON LANGUAGE 权限才能运行 CREATE FUNCTION 命令来创建用户定义函数(UDF,User-Defined Function)。有关更多信息,请参阅UDF 安全性和权限。
需要 USAGE ON LANGUAGE 权限才能通过运行 CREATE PROCEDURE 命令来创建存储过程。有关更多信息,请参阅存储过程的安全性和权限 。
对于 Python UDF,使用
plpythonu
。对于 SQL UDF,使用sql
。对于存储过程,请使用plpgsql
。 - FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL } [, ...]
-
指定被授予权限的 SQL 命令。您可以指定 ALL 以授予对 COPY、UNLOAD、EXTERNAL FUNCTION 和 CREATE MODEL 语句的权限。此子句仅适用于授予 ASSUMEROLE 权限。
- ALTER
向用户授予 ALTER 权限,以便将对象添加到数据共享中或从中删除,或设置属性 PUBLICACCESSIBLE。有关更多信息,请参阅ALTER DATASHARE。
- SHARE
向用户和用户组授予将数据使用者添加到数据共享的权限。要使特定使用者(账户或命名空间)能够从其集群访问数据共享,需要此权限。使用者可以相同或不同的 Amazon 账户,集群命名空间与全局唯一标识符 (GUID) 指定的集群命名空间相同或不同。
- ON DATASHARE datashare_name
-
授予对被引用数据共享的指定权限。有关使用者访问控制粒度的信息,请参阅 在 Amazon Redshift 中共享不同级别的数据。
- USAGE
将 USAGE 授予同一账户中的使用者账户或命名空间时,该账户中的特定使用者账户或命名空间可以以只读方式访问数据共享和数据共享的对象。
- TO NAMESPACE 'clusternamespace GUID'
指示同一账户中的一个命名空间,使用者可以在其中接收对数据共享的指定权限。命名空间使用 128 位的字符数字 GUID。
- TO ACCOUNT 'accountnumber' [ VIA DATA CATALOG ]
指示使用者可以在其中接收对数据共享的指定权限的另一个账号。指定‘VIA DATA CATALOG’表示向 Lake Formation 账户授予使用数据共享的权限。省略此参数意味着您向拥有该集群的账户授予使用权限。
- ON DATABASE shared_database_name> [, ...]
-
授予对在指定数据共享中创建的指定数据库的指定使用权限。
- ON SCHEMA shared_schema
-
授予对在指定数据共享中创建的指定架构的指定权限。
- CREATE MODEL
向特定用户或用户组授予 CREATE MODEL 权限。
- ON MODEL model_name
授予对特定模型的 EXECUTE 权限。
- { role } [, ...]
要向其他角色、用户或 PUBLIC 授予的角色。
PUBLIC 表示一个始终包含所有用户的组。单个用户的权限包含向 PUBLIC 授予的权限、向用户所属的所有组授予的权限以及向用户单独授予的任何权限。
- TO { { user_name [ WITH ADMIN OPTION ] } | role }[, ...]
将指定角色授予具有 WITH ADMIN OPTION 权限的指定用户、其他角色或 PUBLIC。
WITH ADMIN OPTION 条件句会向所有被授予者提供所有授予的角色的管理选项。
- EXPLAIN RLS TO ROLE rolename
向角色授予权限,使其可以解释 EXPLAIN 计划中某个查询的行级别安全性策略筛选器。
- IGNORE RLS TO ROLE rolename
向角色授予绕开某个查询的行级别安全性策略的权限。
使用说明
要了解有关 GRANT 使用说明的更多信息,请参阅使用说明。
示例
有关如何使用 GRANT 的示例,请参阅示例。